Stránka 2 z 2

Re: Ovládání arduino jedním tlačítkem.

Napsal: 05 kvě 2021, 18:28
od pavel1tu
Ale to je to samé - já jen ukázal jak rozlišit dlouhý/krátký

dlouhým stiskem budeš přepínat SADU akcí A/B/C ...
krátkým pak pomocí toho CASE jak bylo přepínat v dané sadě požadovanou akci (bude to tam pro A/B... několikrát)

Re: Ovládání arduino jedním tlačítkem.

Napsal: 06 kvě 2021, 23:10
od bokuba
pavel1tu ještě jednou díky, celé mi to došlo a už mi funguje, co jsem potřeboval. Až se rozhoupu, tak sem přihodím celé dílko. Tedy s vynecháním těch samotných "akcí" to jsou věci, které asi nemůžu pustit ven a hlavně nejsou nijak zajímavé :)

Re: Ovládání arduino jedním tlačítkem.

Napsal: 09 kvě 2021, 15:42
od bokuba
Tak jak jsem psal hodím sem celé dílko, třeba to někdy bude k užitku někomu ještě nešikovnějšímu, než jsem já. A nebo si sem pro to zase někdy sám sáhnu :)
Ještě jednou díky všem, ochotným, kteří pomohli a poradili neznalému.

Kód: Vybrat vše

//Ovládanie jedným tlačidlom
//Zapojenie INPUT_PULLUP
//jedním tlačítkem se cykluje pět úkonů po sobě - pomocí krátkého stisku, dlouhým stiskem se přepínají dvě jiné akce

const int buttonPin1 = 6;
int buttonState1 = HIGH;
int lastButtonState1 = HIGH;
unsigned long lastDebounceTime = 0;
unsigned long debounceInterval1 = 30; //interval na krátký stisk
unsigned long debounceInterval2 = 2200; //interval na dlougý stisk
int pocitadlo = 0;
int pocitadlo2 = 0;

void setup() {
    Serial.begin(115200,);
  pinMode(buttonPin1, INPUT_PULLUP);

 
}

void loop() {

  int reading1 = digitalRead(buttonPin1);
  
  if (reading1 != lastButtonState1 && reading1 == LOW) {
    lastDebounceTime = millis();
  }
  
  if ((millis() - lastDebounceTime) > debounceInterval1 && (millis() - lastDebounceTime) < debounceInterval2) {
    if (reading1 != buttonState1) {
      buttonState1 = reading1;
      if (buttonState1 == HIGH) {
        pocitadlo++;
        if (pocitadlo > 5)              {
          pocitadlo = 1;
                           }
                                   switch (pocitadlo)              {
          case 1:
          //akce1
            break;
          case 2:
          //akce2
            break;
          case 3:
          //akce3
            break;
          case 4:
          //akce4
            break;
          case 5:
          //akce5
            break;
          default:
            // toto sa nevykona
            break;
                          }
  
      }
    }
  }
  
  if ((millis() - lastDebounceTime) > debounceInterval2) {
    if (reading1 != buttonState1) {
      buttonState1 = reading1;
      if (buttonState1 == HIGH) {
        pocitadlo2++;
        if (pocitadlo2 > 2)              {
          pocitadlo2 = 1;
                           }
                                   switch (pocitadlo2)              {
          case 1:
            transmit ("set_env -back_light=100");
            pocitadlo = 7;
            break;
          case 2:
            transmit ("set_env -back_light=10");
            pocitadlo = 7;
            break;
          
          default:
            // toto sa nevykona
            break;
                          }
      
  
      }
    }
  }  
  
  
  
  
  lastButtonState1 = reading1;
}