Mini CNC osa Z

Odpovědět
Hanz
Příspěvky: 71
Registrován: 25 dub 2019, 23:52
Reputation: 0

Re: Mini CNC osa Z

Příspěvek od Hanz » 04 říj 2019, 16:16

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:

kiRRow
Příspěvky: 115
Registrován: 07 kvě 2019, 07:03
Reputation: 2
Bydliště: Opava

Re: Mini CNC osa Z

Příspěvek od kiRRow » 04 říj 2019, 18:10

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

kiRRow
Příspěvky: 115
Registrován: 07 kvě 2019, 07:03
Reputation: 2
Bydliště: Opava

Re: Mini CNC osa Z

Příspěvek od kiRRow » 04 říj 2019, 18:59

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.

Hanz
Příspěvky: 71
Registrován: 25 dub 2019, 23:52
Reputation: 0

Re: Mini CNC osa Z

Příspěvek od Hanz » 05 říj 2019, 18:16

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.

kiRRow
Příspěvky: 115
Registrován: 07 kvě 2019, 07:03
Reputation: 2
Bydliště: Opava

Re: Mini CNC osa Z

Příspěvek od kiRRow » 06 říj 2019, 05:28

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

Hanz
Příspěvky: 71
Registrován: 25 dub 2019, 23:52
Reputation: 0

Re: Mini CNC osa Z

Příspěvek od Hanz » 06 říj 2019, 17:44

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 ?

kiRRow
Příspěvky: 115
Registrován: 07 kvě 2019, 07:03
Reputation: 2
Bydliště: Opava

Re: Mini CNC osa Z

Příspěvek od kiRRow » 08 říj 2019, 16:19

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.

Hanz
Příspěvky: 71
Registrován: 25 dub 2019, 23:52
Reputation: 0

Re: Mini CNC osa Z

Příspěvek od Hanz » 11 říj 2019, 15:23

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
  }
}

kiRRow
Příspěvky: 115
Registrován: 07 kvě 2019, 07:03
Reputation: 2
Bydliště: Opava

Re: Mini CNC osa Z

Příspěvek od kiRRow » 11 říj 2019, 15:57

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ů

Hanz
Příspěvky: 71
Registrován: 25 dub 2019, 23:52
Reputation: 0

Re: Mini CNC osa Z

Příspěvek od Hanz » 16 říj 2019, 17:41

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ě

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host