Stránka 13 z 27

Re: Mini CNC osa Z

Napsal: 04 říj 2019, 16:16
od Hanz
dobrý den, pořád se mi nedaří dát dohromady bod
1) Zkontroluji zda-li je čas bliknout diodama
nachystáno jsem měl tohle :

Kód: Vybrat vše

  if (millis() > (posledniBlik3 + 500)) {  // zkontroluji, zda-li je čas bliknout diodama
 
   digitalRead(!LED1);   // nacteni hodnoty stavu LED1 a její negace     
      if(digitalRead(LED2) == HIGH)    // sviti-li LED       
         digitalWrite(LED2, LOW);    // zhasni LED      
      else         // nesviti-li LED       
         digitalWrite(LED2, HIGH);   // rozsvit LED
      }
  {    
    posledniBlik3 = millis(); // uložím si čas, kdy jsem tohle provedl
  }
ale jak čtu blbě a taky to nejelo :cry:

Re: Mini CNC osa Z

Napsal: 04 říj 2019, 18:10
od kiRRow
potřebuji znát stav první led .... takže udělám si proměnou typu boolean led1State ... do ní zapíšu výsledek digitalRead z led1...
pak pomocí digitalWrite zapíšu na tu samou ledku co jsem četl !led1State (negovaný stav té ledky) ... v momentě kdy udělám toto, budu mít na výstupu led1 negovanou hodnotu led1State ... takže v podstatě tuto hodnotu mohu zapsat do led2 pomocí digitalWrite, ale tentokrát normálně.

spustí se program, obě ledky jsou zhaslé, tedy 0
do led1State se načte 0
na led1 se zapíše negovaná hodnota tedy 1, led svítí
na led2 se zapíše normální hodnota, tedy 0 a je zhaslá
do led1State se načte 1
na led1 se zapíše negovaná hodnota tedy 0, led zhasne
na led2 se zapíše normální hodnota, tedy 1 a led se rožne
a furt dokolečka

Re: Mini CNC osa Z

Napsal: 04 říj 2019, 18:59
od kiRRow
Jinak mám stále pocit že nevíš co vlastně děláš.

Kód: Vybrat vše

   digitalRead(!LED1);   // nacteni hodnoty stavu LED1 a její negace --> hodnotu jsi sice načetl, ale vůbec nikde jsis ji neuložil ... a ten vykřičník tam taky není správně ... předpokládám, že do LED1 jsi pomocí #define uložil hodnotu 10, toto není to co chceš negovat, tohle je číslo pinu ... 
   
   // tady chybí zápis pro uložení načtené negované hodnoty do LED1
   
      if(digitalRead(LED2) == HIGH)    // sviti-li LED --> máš sledovat stav LED1 a né LED2 ... utekla složená závorka ?
         digitalWrite(LED2, LOW);    // zhasni LED --> ano
      else         // nesviti-li LED       --> ne ... chybí tady složené závorky } else { , to ani nemůže jít zkompilovat
         digitalWrite(LED2, HIGH);   // rozsvit LED --> ano
      }
ale jak jsem psal výše ... dá se to udělat i jednodušeji nakonec.

Re: Mini CNC osa Z

Napsal: 05 říj 2019, 18:16
od Hanz
dobrý den, zatím se mi povedlo jen to, že se ledky místo střídavého blikání, blikají stejně, ale i to je vlastně úspěch :evil:
co mě nepustí ?

Kód: Vybrat vše

int Tlacitko = 7;
#define LED1 10   // zelená Led
#define LED2 11   // červená Led

boolean Svetla; // stav proměnné Svetla tj. LOW / HIGH
boolean Blik1;
boolean Blik2;
boolean Blik3;

long posledniBlik1;
long posledniBlik2;
long posledniBlik3;

int mode = 0; //(0 - Vypnuto, 1 - Zapnuto, 2 - Blikání rychlé, 3 - Blikání pomalé, 4 - Blikání střídavé 

void setup() {
  
  pinMode(LED1,OUTPUT);
  pinMode(LED2,OUTPUT); 
  pinMode(Tlacitko, INPUT); 
  digitalWrite(Tlacitko,HIGH);
}

void loop() {
  
   // zapne nebo vypne LED v závislosti na stavu proměné Svetla
  digitalWrite(LED1, Svetla);
  digitalWrite(LED2, Svetla);
  if ((digitalRead(Tlacitko)) == LOW) // tady se přečte stav tlačítka
   {
      mode++; // přičte k MODE hodnotu 1
      if (mode > 4) mode = 0; // když je mode větší jak 4 tak ho vynuluj
      delay(200); // prodleva proti záchvěvům tlačítka  
    }
   if (mode == 0) Svetla = 0; //Vypni světla
   if (mode == 1) Svetla = 1; //Zapni světla
   if (mode == 2) Svetla = Blik1; // Rychlé blikání - Svetla zavisí na stavu promené Blik
   if (mode == 3) Svetla = Blik2; // Pomalé blikání - Svetla zavisí na stavu promené Blik
   if (mode == 4) Svetla = Blik3; // Střídavé blikání
   
   // časovač pro blikání 1  rychlé *************************************
   if ((millis() - posledniBlik1) > 80) // když celkový počet milisekund
   // minus počet milisekund při poslednim "bliku" je vetši jak 200
   // tady můžete nastavit rychlost blikání v počtu milisekund
   {
     Blik1 = !Blik1; // Blik se rovná negaci Blik (neguje proměnou)
     posledniBlik1 = millis(); // zapiš poslední blik
   }

     // časovač pro blikání 2 pomalé ************************************    
   if ((millis() - posledniBlik2) > 600) // když celkový počet milisekund
   // minus počet milisekund při poslednim "bliku" je vetši jak 400
   // tady můžete nastavit rychlost blikání v počtu milisekund
   {
     Blik2 = !Blik2; // Blik2 se rovná negaci Blik (neguje proměnou)
     posledniBlik2 = millis(); // zapiš poslední blik2
   } 
   
   // časovač pro blikání 3 střídavé ************************************ 
   
  if (millis() > (posledniBlik3 + 300))   // zkontroluji, zda-li je čas bliknout diodama
   {
    digitalRead(LED1);   // nacteni hodnoty stavu LED1 
    digitalWrite(LED1,!Blik3); // uložení stavu do proměnné   
     Blik3 = !Blik3;  //  negace stavu proměnné LED1 
      if(digitalRead(LED1) == HIGH)      // sviti-li LED1      
         digitalWrite(LED1, LOW);     // zhasni LED1              
      else  digitalWrite(LED1, HIGH);   // nesviti-li LED1 rozsvit LED1     
             
     posledniBlik3 = millis();   // uložím si čas, kdy jsem tohle provedl           
   }   

 }
zkoušel jsem časovač 3 jakoby přidat pro LED2 a změnit pomocí "!" stavy, ale opět bez úspěchu, v podstatě to blikalo stejně se slabým probliknutím u LED2.

Re: Mini CNC osa Z

Napsal: 06 říj 2019, 05:28
od kiRRow
Ten kód je slátanina několika různých kódů do hromady ... uplně na to zapomeň. Bijou se ti tam příkazy mezi sebou o ovládání LEDek ... Tvůj blik zapisuje do LEDek napřímo přes piny a zároveň v loopu se furt zapisuje do pinů LEDek hodnota svetla

Re: Mini CNC osa Z

Napsal: 06 říj 2019, 17:44
od Hanz
dobrý den, ano střídavé blikání bylo přidáno z jiného sketche, jak píše kiRRow. Nedalo mi to a tak jsem se zaměřil na hodnotu Svetla, o které taky píše. Napadlo mě, že když rozdělím proměnnou Svetla na Svetla pro LED1 a Svetla1 pro LED2 a dosadím ke každému stisku tlačítka tj. mode 1 až mode 4, mohlo by to fungovat. Musel jsem vytvořit i nový stav Blik3 pro případnou změnu času blikání. Tady je plně funkční výsledek :

Kód: Vybrat vše

int Tlacitko = 7;
#define LED1 10   // zelená Led
#define LED2 11   // červená Led

boolean Svetla; // stav proměnné Svetla tj. LOW / HIGH
boolean Svetla1;
boolean Blik1;
boolean Blik2;
boolean Blik3;

long posledniBlik1;
long posledniBlik2;
long posledniBlik3;

int mode = 0; //(0 - Vypnuto, 1 - Zapnuto, 2 - Blikání rychlé, 3 - Blikání pomalé, 4 - Blikání střídavé 

void setup() {
  
  pinMode(LED1,OUTPUT);
  pinMode(LED2,OUTPUT); 
  pinMode(Tlacitko, INPUT); 
  digitalWrite(Tlacitko,HIGH);
}

void loop() {
  
   // zapne nebo vypne LED v závislosti na stavu proměné Svetla
  digitalWrite(LED1, Svetla);
  digitalWrite(LED2, Svetla1);
  if ((digitalRead(Tlacitko)) == LOW) // tady se přečte stav tlačítka
   {
      mode++; // přičte k MODE hodnotu 1
      if (mode > 4) mode = 0; // když je mode větší jak 4 tak ho vynuluj
      delay(250); // prodleva proti záchvěvům tlačítka  
    }
   if (mode == 0) Svetla = 0, Svetla1 = 0; // Vypni světla
   if (mode == 1) Svetla = 1, Svetla1 = 1; // Zapni světla
   if (mode == 2) Svetla = Blik1, Svetla1 = Blik1; // Rychlé blikání - Svetla zavisí na stavu promené Blik1
   if (mode == 3) Svetla = Blik2, Svetla1 = Blik2; // Pomalé blikání - Svetla zavisí na stavu promené Blik2
   if (mode == 4) Svetla = Blik3, Svetla1 = !Blik3; // Střídavé blikání - Svetla zavisí na stavu promené Blik3
   
   // časovač pro blikání 1  rychlé *************************************   
   if ((millis() - posledniBlik1) > 300) // když celkový počet milisekund
   // minus počet milisekund při poslednim "bliku" je vetši jak 300
   // tady můžete nastavit rychlost blikání v počtu milisekund
   {
     Blik1 = !Blik1; // Blik se rovná negaci Blik (neguje proměnou)
     posledniBlik1 = millis(); // zapiš poslední blik
   }

     // časovač pro blikání 2 pomalé ************************************         
   if ((millis() - posledniBlik2) > 600) // když celkový počet milisekund
   // minus počet milisekund při poslednim "bliku" je vetši jak 600
   // tady můžete nastavit rychlost blikání v počtu milisekund
   {
     Blik2 = !Blik2; // Blik2 se rovná negaci Blik (neguje proměnou)
     posledniBlik2 = millis(); // zapiš poslední blik2
   } 
   
   // časovač pro blikání 3 střídavé ************************************    
    if ((millis() - posledniBlik3) > 200) // když celkový počet milisekund
   // minus počet milisekund při poslednim "bliku" je vetši jak 200
   // tady můžete nastavit rychlost blikání v počtu milisekund
   {
     Blik3 = !Blik3; // Blik2 se rovná negaci Blik (neguje proměnou)
     posledniBlik3 = millis(); // zapiš poslední blik2
   } 
 }


Začátky jsou těžké, ale stojí to zato ! Je to super ! a moc, moc děkuju kiRRow, gilhad a jiným, že mě podporujete Děkuju
Co Vy nato ?

Re: Mini CNC osa Z

Napsal: 08 říj 2019, 16:19
od kiRRow
Absolutní děs a hrůza ten kód. Ani mi neděkuj, nemáš totiž vůbec zač, protože jsem tě vůbec nic nenaučil.

Re: Mini CNC osa Z

Napsal: 11 říj 2019, 15:23
od Hanz
dobrý den, pokud předchozí sketch byl "absolutní děs a hrůza" tak jsem zvědavý, co napíšete o předělaném sketchi, který je funkční a dělá totéž co ten předešlý. Ano je delší, ano dá se zkrátit, / zjednodušit /...budete namítat. No učím se, učím se sám, učím se podle tutoriálu a podle článků na netu / tak, jako mnoho dalších / a jde mi to pomalu - to vím.
A proto jsem dlouho vydýchával " ! pochvalu " za minulý sketch. Proto jsem rád a vždycku budu rád a děkovat tomu, kdo mi jen trochu pomůže. A tady je další můj výtvor, stejný, předělaný :
Tlačítko, 2x led a variace blikání s millis + seriový monitor

Kód: Vybrat vše

unsigned long aktualniMillis; //aktualní čas
unsigned long predchoziMillis1; // předchozí čas
unsigned long predchoziMillis2; // předchozí čas

boolean led1svetlo; // proměnná pro stav led1
boolean led2svetlo; // proměnná pro stav led2

int Tlacitko = 7; // pin pro tlačítko
int led1 = 10; // pin pro led1 zelená
int led2 = 11; // pin pro led2 červená
int mode = 0; // 0 - Vypnuto, 1 - Zapnuto, 2 - Blikání rychlé, 3 - Blikání pomalé, 4 - Blikání střídavé 

 
void setup() {
  
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(Tlacitko, INPUT); 
  digitalWrite(Tlacitko,HIGH);
  
 // konfigurace rychlosti seriového portu
  Serial.begin(9600); 
  while (!Serial) {    ; // čekaní na připojení seriového portu, pry nezbytné pouze u desky Leonardo
  }
   // První výpis na seriový port
  Serial.println("Seriovy port aktivni");
}

void loop(){
 
  if ((digitalRead(Tlacitko)) == LOW) // tady se přečte stav tlačítka
   {
      mode++; // přičte k MODE hodnotu 1
      if (mode > 4) mode = 0; // když je mode větší jak 4 tak ho vynuluj
      delay(300); // prodleva proti záchvěvům tlačítka  
    }
   if (mode == 0); // Vypni led
   if (mode == 1); // Zapni led
   if (mode == 2); // Rychlé blikání led 
   if (mode == 3); // Pomalé blikání led 
   if (mode == 4); // Střídavé blikání led

   if(mode == 0) {
    // ******* led1, led2 blikání vypnuto *******
    digitalWrite(led1,LOW);
    digitalWrite(led2,LOW);    
   }
   
   if(mode == 1) {
    // ******* led1, led2 blikání zapnuto *******
    digitalWrite(led1,HIGH);
    digitalWrite(led2,HIGH);
   }
    
  if(mode == 2) {
    // ******* led1 bliká rychle  *******
  aktualniMillis = millis();  //podívám se na hodinky - aktuální čas
  if(led1svetlo){  // potřebuju led1 zhasnout nebo rosvítit?
    if(aktualniMillis - predchoziMillis1 > 300) {  // pokud zhasnout uběhlo už 300ms od poslední akce?
            predchoziMillis1 = aktualniMillis;   // v tento čas jsem provedl poslední akci
            led1svetlo = LOW;  //zhasni led1
            Serial.println("led1 VYP");
    }
  }else if(aktualniMillis - predchoziMillis1 > 300) {  // pokud zhasnout uběhlo už 300ms od poslední akce?
            predchoziMillis1 = aktualniMillis;  // v tento čas jsem provedl poslední akci
            led1svetlo = HIGH;  //rozsviť led1
            Serial.println("led1 ZAP");
  }
  digitalWrite(led1, led1svetlo);  //aktualizace stavu led1
  
      // ******* led2 bliká rychle  *******
  aktualniMillis = millis();  //podívam se na hodinky - aktuální čas
  if(led2svetlo){  // potřebuju led2 zhasnout nebo rosvítit?
    if(aktualniMillis - predchoziMillis2 > 300) {  // pokud zhasnout uběhlo už 300ms od poslední akce?
            predchoziMillis2 = aktualniMillis;   // v tento čas jsem provedl poslední akci
            led2svetlo = LOW;  //zhasni led2
            Serial.println("led2 VYP");
    }
  }else if(aktualniMillis - predchoziMillis2 > 300) {  // pokud zhasnout uběhlo už 300ms od poslední akce?
            predchoziMillis2 = aktualniMillis;   // v tento čas jsem provedl poslední akci
            led2svetlo = HIGH;  // rozsviť led2
            Serial.println("led2 ZAP");
  }
  digitalWrite(led2, led2svetlo);  // aktualizace stavu led2
  }


    if(mode == 3) { 
  // ******* led1 bliká pomalu  *******
  aktualniMillis = millis();  //podívám se na hodinky - aktuální čas
  if(led1svetlo){  // potřebuju led1 zhasnout nebo rosvítit?
    if(aktualniMillis - predchoziMillis1 > 500) {  // pokud zhasnout uběhlo už 500ms od poslední akce?
            predchoziMillis1 = aktualniMillis;   // v tento čas jsem provedl poslední akci
            led1svetlo = LOW;  //zhasni led1
            Serial.println("led1 VYP");
    }
  }else if(aktualniMillis - predchoziMillis1 > 500) {  // pokud zhasnout uběhlo už 500ms od poslední akce?
            predchoziMillis1 = aktualniMillis;  // v tento čas jsem provedl poslední akci
            led1svetlo = HIGH;  //rozsviť led1
            Serial.println("led1 ZAP");
  }
  digitalWrite(led1, led1svetlo);  //aktualizace stavu led1  
  
// ******* led2 bliká pomalu  *******
  aktualniMillis = millis();  //podívam se na hodinky - aktuální čas
  if(led2svetlo){  // potřebuju led2 zhasnout nebo rosvítit?
    if(aktualniMillis - predchoziMillis2 > 500) {  // pokud zhasnout uběhlo už 500ms od poslední akce?
            predchoziMillis2 = aktualniMillis;   // v tento čas jsem provedl poslední akci
            led2svetlo = LOW;  //zhasni led2
            Serial.println("led2 VYP");
    }
  }else if(aktualniMillis - predchoziMillis2 > 500) {  // pokud zhasnout uběhlo už 500ms od poslední akce?
            predchoziMillis2 = aktualniMillis;   // v tento čas jsem provedl poslední akci
            led2svetlo = HIGH;  // rozsviť led2
            Serial.println("led2 ZAP");
  }
  digitalWrite(led2, led2svetlo);  // aktualizace stavu led2
  }


      if(mode == 4) { 
  // ******* led1 bliká střídavě  *******
  aktualniMillis = millis();  //podívám se na hodinky - aktuální čas
  if(led2svetlo){  // potřebuju led3 zhasnout nebo rosvítit?
    if(aktualniMillis - predchoziMillis2 > 200) {  // pokud zhasnout uběhlo už 200ms od poslední akce?
            predchoziMillis2 = aktualniMillis;   // v tento čas jsem provedl poslední akci
            led2svetlo = LOW;  //zhasni led1
            Serial.println("led1 VYP");
    }
  }else if(aktualniMillis - predchoziMillis2 > 200) {  // pokud zhasnout uběhlo už 200ms od poslední akce?
            predchoziMillis2 = aktualniMillis;  // v tento čas jsem provedl poslední akci
            led2svetlo = HIGH;  //rozsviť led1
            Serial.println("led1 ZAP");
  }
  digitalWrite(led1, !led2svetlo);  //aktualizace stavu led1 a její negace oproti led2
    
// ******* led2 bliká střídavě  *******
  aktualniMillis = millis();  //podívam se na hodinky  - aktuální čas
  if(led2svetlo){  // potřebuju led3 zhasnout nebo rosvítit?
    if(aktualniMillis - predchoziMillis2 > 200) {  // pokud zhasnout uběhlo už 200ms od poslední akce?
            predchoziMillis2 = aktualniMillis;   // v tento čas jsem provedl poslední akci
            led2svetlo = LOW;  //zhasni led2
            Serial.println("led2 VYP");
    }
  }else if(aktualniMillis - predchoziMillis2 > 200) {  // pokud zhasnout uběhlo už 200ms od poslední akce?
            predchoziMillis2 = aktualniMillis;   // v tento čas jsem provedl poslední akci
            led2svetlo = HIGH;  // rozsviť led2
            Serial.println("led2 ZAP");
  }
  digitalWrite(led2, led2svetlo);  // aktualizace stavu led2
  }
}

Re: Mini CNC osa Z

Napsal: 11 říj 2019, 15:57
od kiRRow
tak postupně od shora ...

Kód: Vybrat vše

int Tlacitko = 7; // pin pro tlačítko - #define Tlacitko 7 - není nutno aby si tohle procesor pamatoval
int led1 = 10; // pin pro led1 zelená - #define led1 10 - není nutno aby si tohle procesor pamatoval
int led2 = 11; // pin pro led2 červená - #define led2 11 - není nutno aby si tohle procesor pamatoval
int mode = 0; // 0 - Vypnuto, 1 - Zapnuto, 2 - Blikání rychlé, 3 - Blikání pomalé, 4 - Blikání střídavé - Tady to je správně ... tohle se bude v průbehu programu měnit a proto je důležité si alokovat a držet hodnotu v paměti

Kód: Vybrat vše

/*Tohle celé můžeš vymazat*/
   if (mode == 0); // Vypni led
   if (mode == 1); // Zapni led
   if (mode == 2); // Rychlé blikání led 
   if (mode == 3); // Pomalé blikání led 
   if (mode == 4); // Střídavé blikání led
/*neplní to vůbec žádnou funkci*/
... mno a pak začíná ten mazec ... správně jako programátor bys měl minimálně začít stím, že přestaneš dělat to, že v jednom ifu na tvrdo zapisuješ na výstupní piny buď LOW nebo HIGH, zatím co druhý if dělá to, že si uloží stav do proměné, kterou jsis (chválím) správně nadefinoval a po skončení ifu tuto hodnotu z proměné zapíšeš na výstupní pin.
Popere se ti to pak, když v proměnné led1svetlo budeš mít uloženo HIGH a zároveň bude mode = 0 ... ten program doběhne k if(mode == 0) a nastaví výstupní piny na LOW pak přeskočí if(mode == 1), přeskočí if(mode == 2) a skočí na příkaz digitalWrite(led1, led1svetlo); a jelikož je v led1sveto = HIGH, tak se ti ta ledka rožne ... respektive zůstane ti svítit, protože ten procesor tam doběhne tak rychle, že ani nestihne zhasnout

Napsáno by to mělo být tak, že v každém if se nastaví led1svetlo a led2svetlo ... a až po posledním ifu se tento stav z proměnných zapíše do výstupních pinů

Re: Mini CNC osa Z

Napsal: 16 říj 2019, 17:41
od Hanz
dobrý den, provedeny úpravy ve sketchi

Kód: Vybrat vše

unsigned long aktualniMillis;   //aktualní čas
unsigned long predchoziMillis1;   // předchozí čas pro rychle blikání
unsigned long predchoziMillis2;   // předchozí čas pro pomalé blikání
unsigned long predchoziMillis3;   // předchozí čas pro střídavé blikání
unsigned long predchoziMillis4;   // předchozí čas pro střídavé blikání

boolean led1svetlo;   //  pomocná hodnota led1svetlo
boolean led2svetlo;   //  pomocná hodnota led2svetlo

#define Tlacitko 7   // pin pro tlačítko
#define led1  10    // pin pro led1 zelená
#define led2  11    // pin pro led2 červená
int mode = 0;    // 0 - Vypnuto, 1 - Zapnuto, 2 - Blikání rychlé, 3 - Blikání pomalé, 4 - Blikání střídavé 

 
void setup() {
  
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(Tlacitko, INPUT); 
  digitalWrite(Tlacitko,HIGH);
  
 // konfigurace rychlosti seriového portu
  Serial.begin(9600); 
  while (!Serial) {    ; // čekaní na připojení seriového portu, pry nezbytné pouze u desky Leonardo
  }
   // První výpis na seriový port
  Serial.println("Seriovy port aktivni");
}

void loop(){
  
  if ((digitalRead(Tlacitko)) == LOW) // tady se přečte stav tlačítka
   {
      mode++; // přičte k MODE hodnotu 1
      if (mode > 4) mode = 0; // když je mode větší jak 4 tak ho vynuluj
      delay(200); // prodleva proti záchvěvům tlačítka  
    }

   if(mode == 0) {
    // ******* led1, led2 vypnuto ********    
     led1svetlo = false;  //zhasni led1
     Serial.println("led1 nesvítí");         
     led2svetlo = false;  //zhasni led2
     Serial.println("led2 nesvítí");                  
   }
   
  if(mode == 1) {
    // ******* led1, led2 svítí  ********       
     led1svetlo = true;  //rožni led1
     Serial.println("led1 svítí");           
     led2svetlo = true;  //rožni led2
     Serial.println("led2 svítí");                
   }
   
  if(mode == 2) {
    // ******* led1 bliká rychle  *******
  aktualniMillis = millis();  //podívám se na hodinky - aktuální čas
  if(led1svetlo){  // potřebuju led1 zhasnout nebo rosvítit?
    if(aktualniMillis - predchoziMillis1 > 200) {  // pokud zhasnout uběhlo už 200ms od poslední akce?
            predchoziMillis1 = aktualniMillis;   // v tento čas jsem provedl poslední akci
            led1svetlo = false ;  //zhasni led1
            Serial.println("led1 rychle VYP");
    }     
  }else if(aktualniMillis - predchoziMillis1 > 200) {  // pokud zhasnout uběhlo už 200ms od poslední akce?
            predchoziMillis1 = aktualniMillis;  // v tento čas jsem provedl poslední akci
            led1svetlo = true;  //rozsviť led1
            Serial.println("led1 rychle ZAP");
  }
  
      // ******* led2 bliká rychle  *******
  aktualniMillis = millis();  //podívam se na hodinky - aktuální čas
  if(led2svetlo){  // potřebuju led2 zhasnout nebo rosvítit?
    if(aktualniMillis - predchoziMillis2 > 200) {  // pokud zhasnout uběhlo už 200ms od poslední akce?
            predchoziMillis2 = aktualniMillis;   // v tento čas jsem provedl poslední akci
            led2svetlo = false;  //zhasni led2
            Serial.println("led2 rychle VYP");
    }
  }else if(aktualniMillis - predchoziMillis2 > 200) {  // pokud zhasnout uběhlo už 200ms od poslední akce?
            predchoziMillis2 = aktualniMillis;   // v tento čas jsem provedl poslední akci
            led2svetlo = true;  // rozsviť led2
            Serial.println("led2 rychle ZAP");
   }
  }
  
    if(mode == 3) { 
  // ******* led1 bliká pomalu  *******
  aktualniMillis = millis();  //podívám se na hodinky - aktuální čas
  if(led1svetlo){  // potřebuju led1 zhasnout nebo rosvítit?
    if(aktualniMillis - predchoziMillis1 > 500) {  // pokud zhasnout uběhlo už 500ms od poslední akce?
            predchoziMillis1 = aktualniMillis;   // v tento čas jsem provedl poslední akci
            led1svetlo = false;  //zhasni led1
            Serial.println("led1 pomalu VYP");
    }
  }else if(aktualniMillis - predchoziMillis1 > 500) {  // pokud zhasnout uběhlo už 500ms od poslední akce?
            predchoziMillis1 = aktualniMillis;  // v tento čas jsem provedl poslední akci
            led1svetlo = true;  //rozsviť led1
            Serial.println("led1 pomalu ZAP");
  }
  
// ******* led2 bliká pomalu  *******
  aktualniMillis = millis();  //podívam se na hodinky - aktuální čas
  if(led2svetlo){  // potřebuju led2 zhasnout nebo rosvítit?
    if(aktualniMillis - predchoziMillis2 > 500) {  // pokud zhasnout uběhlo už 500ms od poslední akce?
            predchoziMillis2 = aktualniMillis;   // v tento čas jsem provedl poslední akci
            led2svetlo = false;  //zhasni led2
            Serial.println("led2 pomalu VYP");
    }
  }else if(aktualniMillis - predchoziMillis2 > 500) {  // pokud zhasnout uběhlo už 500ms od poslední akce?
            predchoziMillis2 = aktualniMillis;   // v tento čas jsem provedl poslední akci
            led2svetlo = true;  // rozsviť led2
            Serial.println("led2 pomalu ZAP");        
   }  
  }
  
       if(mode == 4) { 
  // ******* led1 bliká střídavě  *******   
  aktualniMillis = millis();  //podívám se na hodinky - aktuální čas 
  if(led1svetlo){  // potřebuju led1 zhasnout nebo rosvítit?
    if(aktualniMillis - predchoziMillis3 > 300) {  // pokud zhasnout uběhlo už 300ms od poslední akce?
            predchoziMillis3 = aktualniMillis;   // v tento čas jsem provedl poslední akci
            led1svetlo = false;  //zhasni led1 zelená
            Serial.println("led1 střídavě VYP");            
    }      
  }else if(aktualniMillis - predchoziMillis3 > 300) {  // pokud zhasnout uběhlo už 300ms od poslední akce?
            predchoziMillis3 = aktualniMillis;  // v tento čas jsem provedl poslední akci
            led1svetlo = true;  //rožni led1 zelená
            Serial.println("led1 střídavě ZAP");                       
  }  
  
// ******* led2 bliká střídavě  *******
  aktualniMillis = millis();  //podívam se na hodinky - aktuální čas
  if(led2svetlo){  // potřebuju led2 zhasnout nebo rosvítit?    
    if(aktualniMillis - predchoziMillis4 > 300) {  // pokud zhasnout uběhlo už 300ms od poslední akce?
            predchoziMillis4 = aktualniMillis;   // v tento čas jsem provedl poslední akci          
            led2svetlo = false;  //rožni led2 červená      
            Serial.println("led2 střídavě VYP");                       
    }    
  }else if(aktualniMillis - predchoziMillis4 > 300) {  // pokud zhasnout uběhlo už 300ms od poslední akce?
            predchoziMillis4 = aktualniMillis;   // v tento čas jsem provedl poslední akci            
            led2svetlo = true;  //zhasni led2 červená         
            Serial.println("led2 střídavě ZAP");                      
   }  
  } 
  digitalWrite(led1,led1svetlo);  // aktualizace stavu led1, zápis stavu proměnné na výstupní pin 10
  digitalWrite(led2,led2svetlo);  // aktualizace stavu led2, zápis stavu proměnné na výstupní pin 11 
 }
pokoušel jsem se o střídavé blikání. To se mi povedlo, když jsem v aktualizaci stavu proměnné na pinu 11 negoval proměnnou led2svetlo. No, ale ve všech if se to negovalo taky. Přidal jsem predchoziMillis4, doufám že správně