//Použité knihovny
#include <Dabble.h>
#include <Servo.h>

//Definice komponent: hnací motor, motor pro nafukování, servo motor
Servo BLDC_9; //motor pro nafukování
Servo BLDC_8; //hnací motor
Servo Servo5; //servo motor
const unsigned long konec = 5000; //definovaný čas pro nouzové vypnutí vznášedla
extern volatile unsigned long timer0_millis;

void setup() { //příslušný k´d pro nastavení jednotlivých komponent a zkouška motorů
  
  Dabble.begin(9600); //spuštění Bluetooth komunikace
  BLDC_9.attach(9, 1000, 2000); //definice pinu připojeného motoru pro nafukování
  BLDC_8.attach(8, 1000, 2000); //definice pinu připojeného hnacího motoru
  Servo5.attach(5); //definice pinu připojeného servo motoru
  
  //zkouška funkčnosti motorů, hnací a nafukovací motor se spustí na 5% maximální rychlosti a po dvou vteřinách se vypne
  BLDC_9.write(5 * 1.8);
  BLDC_8.write(5 * 1.8);
  delay(2 * 1000);
  BLDC_9.write(0 * 1.8);
  BLDC_8.write(0 * 1.8);
  delay(2 * 1000);
}
void loop() { // kód, který chci stále opakovat
              // definice jednotlivých tlačítek a jejich příslušných funkcí, vše je řešeno přes podmínky if a else
              //v každé jednotlivé podmínce je zadefinovaná bezpečnost pomocí funkce millis()
              //bezpečnost je definována tak, aby se vznášedlo do pěti vteřin vypnulo, pokud nedostane žádný signál z mobilního telefonu přes Bluetooth modul
  Dabble.processInput();
  if(GamePad.isPressed(2)) {
    Servo5.write(7);
    noInterrupts ();
    timer0_millis = 0;
    interrupts ();
  }
  else {
    if(GamePad.isPressed(3)) {
      Servo5.write(180);
      noInterrupts ();
      timer0_millis = 0;
      interrupts ();
    }
    else {
      if(GamePad.isPressed(6)) {
        BLDC_9.write(19 * 1.8);
        delay(0.5 * 1000);
        noInterrupts ();
        timer0_millis = 0;
        interrupts ();
      }
      else {
        if(GamePad.isPressed(8)) {
          BLDC_9.write(0 * 1.8);
          delay(0.5 * 1000);
          noInterrupts ();
          timer0_millis = 0;
          interrupts ();
        }
        else {
          if(GamePad.isPressed(0)) {
            BLDC_8.write(25 * 1.8);
            delay(0.5 * 1000);
            noInterrupts ();
            timer0_millis = 0;
            interrupts ();
          }
          else {
            if(GamePad.isPressed(1)) {
              BLDC_8.write(0 * 1.8);
              delay(0.5 * 1000);
              noInterrupts ();
              timer0_millis = 0;
              interrupts ();
            }
            else {
              if(GamePad.isPressed(5)) {
                BLDC_9.write(0 * 1.8);
                BLDC_8.write(0 * 1.8);
                delay(0.5 * 1000);
                noInterrupts ();
                timer0_millis = 0;
                interrupts ();
              }
              else {
                if(millis() > konec) {
                  BLDC_9.write(0 * 1.8);
                  BLDC_8.write(0 * 1.8);
                  delay(0.5 * 1000);
                }
                else {
                  Servo5.write(90);
                }
              }
            }
          }
        }
      }
    }
  }
}
