1. #include <OrangutanBuzzer.h>
  2. #include <OrangutanMotors.h>
  3. // definice IO portu (vyvodu) - Arduino cislovani !!
  4. const int pinLedRed = 1;     // cervena LED
  5. const int pinLedGreen = 7;   // zelena LED
  6. const int pinButtonA = 9;    // tlacitko A
  7. const int pinButtonB = 12;   // tlacisko B
  8. const int pinButtonC = 13;   // tlacitko C
  9. OrangutanBuzzer pipak;       // objekt pro "pipak", nutny prislusny INCLUDE
  10.   // POZOR, nelze vyuzivat Arduino funkci tone() - koliduje s rizenim motoru
  11.   // viz. https://www.pololu.com/docs/0J17/5.b
  12. OrangutanMotors motory;
  13. void setup()
  14. {
  15.   pinMode(pinLedRed, OUTPUT);     // definice vyvodu jako vystup
  16.   pinMode(pinLedGreen, OUTPUT);
  17.   pinMode(pinButtonA, INPUT_PULLUP);  // definice vyvodu jako vstup
  18.   pinMode(pinButtonB, INPUT_PULLUP);
  19.   pinMode(pinButtonC, INPUT_PULLUP);
  20.   pipak.playFrequency(523, 200, 15);  // zapni ton na dobu 200ms
  21.   while (pipak.isPlaying())           // cekej na dohrani tonu
  22.     ;
  23.   pipak.playFrequency(784, 100, 15);  // spust dalsi ton, dohraje "nekdy"
  24. }
  25. unsigned long lastTimeStart = 0;      // zaznamenany cas spusteni motoru
  26. boolean lastB = true;                 // minuly stav tlacitka B
  27. boolean runState = false;             // stav indikujici, zda se ma "pracovat"
  28. void loop()  // verze 5 = neblika, runState ovlivnuje motory, zda maji jet a navic jen omezenou dobu
  29. {
  30.   if (runState)                     // pokus ma pracovat, tak blika
  31.   {
  32.     motory.setSpeeds(40, 40);       // ne moc rychle vpred
  33.     if ((millis() - lastTimeStart) > 2000)   // uplynula 2 sec jizdy ?
  34.       runState = false;             // pri pristim pruchodu se motory zastavi
  35.   }
  36.   else
  37.   {
  38.     motory.setSpeeds(0, 0);         // motory STOP
  39.   }
  40.   boolean stav = digitalRead(pinButtonB);   // precti stav tlacitka B
  41.   if (stav != lastB)     // doslo k nejake zmene ?
  42.   {
  43.     lastB = stav;        // uloz novy stav pro priste
  44.     if (stav == 1)       // tj. tlacitko nestisknuto = byla to zmena "pusteni tlacitka"
  45.     {
  46.       runState = !runState;   // zmen stav
  47.       if (runState)      // byl to prechod do "jizdy" ?
  48.         lastTimeStart = millis();  // uloz kdy to bylo
  49.       delay(5);          // cekani, aby to dalsi zmenu nevyhodnotilo ihned
  50.     }
  51.   }
  52. }
  53. /*
  54. int svitit = 0;
  55. unsigned long lastTimeBlik = millis();   // minuly cas vykonani, od nej se meri interval
  56. boolean lastB = true;                 // minuly stav tlacitka
  57. boolean runState = false;             // stav indikujici, zda se ma "pracovat"
  58. void loop()  // verze 4 = blikani, rizeni tlacitkem B, pri spusteni se meni stav blikej/neblikej
  59. {
  60.   if ((millis() - lastTimeBlik) > 200)  // uplynulo jiz 200ms ?
  61.   {
  62.     lastTimeBlik = millis();            // uloz cas vykonani akce
  63.     if (runState)                     // pokus ma pracovat, tak blika
  64.     {
  65.       svitit = !svitit;   // logicka negace, meni hodnotu NULA na NE-NULA a naopak
  66.       digitalWrite(pinLedGreen, svitit);
  67.     }
  68.   }
  69.   boolean stav = digitalRead(pinButtonB);   // precti stav tlacitka
  70.   if (stav != lastB)     // doslo k nejake zmene ?
  71.   {
  72.     lastB = stav;        // uloz novy stav pro priste
  73.     if (stav == 1)       // tj. tlacitko nestisknuto = byla to zmena "pusteni tlacitka"
  74.     {
  75.       runState = !runState;   // zmen stav
  76.     }
  77.   }
  78. }
  79. */
  80. /*
  81. int svitit = 0;
  82. unsigned long lastTimeBlik = millis();   // minuly cas vykonani, od nej se meri interval
  83. void loop()  // verze 3 = blikani pomoci millis, negace stavu pomoci operatoru NEGACE
  84. {
  85.   if ((millis() - lastTimeBlik) > 200)  // uplynulo jiz 200ms ?
  86.   {
  87.     lastTimeBlik = millis();            // uloz cas vykonani akce
  88.     svitit = !svitit;   // logicka negace, meni hodnotu NULA na NE-NULA a naopak
  89.     digitalWrite(pinLedGreen, svitit);
  90.   }
  91.   else
  92.     ;                   // jinak nic
  93. }
  94. */
  95. /*
  96. int svitit = 0;
  97. void loop()  // verze 2 = globalni informace o poslednim stavu, hloupa negace stavu
  98. {
  99.   if (svitit != 0)   // testovat nenulovost neni nutno, lze tedy jen:   if (svitit)
  100.     svitit = 0;
  101.   else
  102.     svitit = 1;
  103.   digitalWrite(pinLedGreen, svitit);
  104.   delay(250);
  105. }
  106. */
  107. /*
  108. void loop()  // verze 1 = hloupe blikani ledkou pomoci dvojice DELAY cekani
  109. {
  110.   digitalWrite(pinLedGreen, 1);
  111.   delay(250);
  112.   digitalWrite(pinLedGreen, 0);
  113.   delay(250);
  114. }
  115. */