Mini CNC osa Z

Odpovědět
Uživatelský avatar
kiRRow
Příspěvky: 1152
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Mini CNC osa Z

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

nemám momentálně na čem to otestovat ... ale zkus to střídavé blikání pojmout takhle ...

Kód: Vybrat vše

if(mode == 4) { 
  aktualniMillis = millis();  //podívám se na hodinky - aktuální čas
  if(aktualniMillis - predchoziMillis3 > 300) { // nejprve si zjistím jestli je čas něco provést
    led1svetlo = !led1svetlo; // do hodnoty led1svetlo zapíšu její negovanou hodnotu, svítila-li zhasne, byla-li zhaslá rožne se
    led2svetlo = !led1svetlo; // do hodnoty led2svetlo zapíšu negovanou hodnotu led1svetlo, pokud led1 svítí chci led2 zhaslou a naopak
    predchoziMillis3 = aktualniMillis;   // v tento čas jsem provedl poslední akci 
  }
} 
už se to pomalu blíží k slušnému programu ... ještě to očesat a je to :)

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

Re: Mini CNC osa Z

Příspěvek od Hanz » 17 říj 2019, 15:36

dobrý den, pokusil jsem se dále zkoušet a testovat sketch s blikáním led, hlavně tu část, kde má jít o blikání střídavé. Myslím si, že se mi to povedlo, ale raději budu opatrnější s oslavama. Sketch je funkční, přidány komentáře, tady je :

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);  // pin led1 nastaven jako výstup
  pinMode(led2, OUTPUT);  // pin led2 nastaven jako výstup
  pinMode(Tlacitko, INPUT);  // pin tlačítka nastaven jako vstup
  digitalWrite(Tlacitko,HIGH);  //   

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

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

   if(mode == 0) {
    // ******* led1, led2 vypnuto ********    
     led1svetlo = false;  // zhasni led1
     Serial.println("led1 nesvítí");  // výpis na seriový monitor         
     led2svetlo = false;  // zhasni led2
     Serial.println("led2 nesvítí");  // výpis na seriový monitor                   
   }
   
  if(mode == 1) {
    // ******* led1, led2 svítí  ********       
     led1svetlo = true;  // rožni led1
     Serial.println("led1 svítí");  // výpis na seriový monitor           
     led2svetlo = true;  // rožni led2
     Serial.println("led2 svítí");  // výpis na seriový monitor                
   }
   
  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            
    }     
  }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 bliká rychle");  // výpis na seriový monitor  
  }
  
      // ******* 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             
    }
  }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 bliká rychle");  // výpis na seriový monitor  
   }
  }
  
    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             
    }
  }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 bliká pomalu");  // výpis na seriový monitor  
  }
  
// ******* 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                    
    }
  }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 bliká pomalu");  // výpis na seriový monitor                
   }  
  }
  
       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 > 500) {  // pokud zhasnout uběhlo už 500ms od poslední akce?
            led1svetlo = false;  // zhasni led1       
            predchoziMillis3 = aktualniMillis;  // v tento čas jsem provedl poslední akci                                              
    }      
  }else if(aktualniMillis - predchoziMillis3 > 500) {  // pokud zhasnout uběhlo už 500ms od poslední akce?                
            led1svetlo = true;   // rožni led1         
            predchoziMillis3 = aktualniMillis;  // v tento čas jsem provedl poslední akci
             Serial.println("led1 bliká střídavě");  // výpis na seriový monitor                             
  } 

   digitalWrite(led2,!led1svetlo);  // aktualizace stavu led2 ?!
   
// ******* 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 > 500) {  // pokud zhasnout uběhlo už 500ms od poslední akce?  
        // predchoziMillis4 = aktualniMillis;   // v tento čas jsem provedl poslední akci
         /* do hodnoty led2svetlo zapíšu negovanou hodnotu led1svetlo, pokud led1 svítí chci led2 zhaslou a naopak 
            čas blikání se bude řídit časem blikání led1svetlo      */            
            led2svetlo = !led1svetlo;  // aktualizace stavu proměnné led2                                                                                              
    }    
  }else if(aktualniMillis - predchoziMillis4 > 500) {  // pokud zhasnout uběhlo už 500ms od poslední akce? 
        // predchoziMillis4 = aktualniMillis;   // v tento čas jsem provedl poslední akci 
         /* do hodnoty led2svetlo zapíšu negovanou hodnotu led1svetlo, pokud led1 svítí chci led2 zhaslou a naopak 
            čas blikání se bude řídit časem blikání led1svetlo     */       
            led2svetlo = !led1svetlo; // aktualizace stavu proměnné led2
             Serial.println("led2 bliká střídavě");  // výpis na seriový monitor                                                    
   }  
  }  
  digitalWrite(led1,led1svetlo);  // aktualizace stavu led1, zápis proměnné na výstupní pin 10
  digitalWrite(led2,led2svetlo);  // aktualizace stavu led2, zápis proměnné na výstupní pin 11   
 }
stojí za zmínku, že jsem musel v mode==4 přidat aktualizaci stavu led2 !?

Kód: Vybrat vše

   digitalWrite(led2,!led1svetlo);  // aktualizace stavu led2 ?!
   
   
// ******* led2 bliká střídavě  *******
  aktualniMillis = millis();  //podívam se na hodinky - aktuální čas
a taky zrušit provedení poslední akce predchoziMillis4 - nyní je napsán jako text

Kód: Vybrat vše

// ******* 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 > 500) {  // pokud zhasnout uběhlo už 500ms od poslední akce?  
        // predchoziMillis4 = aktualniMillis;   // v tento čas jsem provedl poslední akci
         /* do hodnoty led2svetlo zapíšu negovanou hodnotu led1svetlo, pokud led1 svítí chci led2 zhaslou a naopak 
            čas blikání se bude řídit časem blikání led1svetlo      */            
            led2svetlo = !led1svetlo;  // aktualizace stavu proměnné led2                                                                                              
    }    
  }else if(aktualniMillis - predchoziMillis4 > 500) {  // pokud zhasnout uběhlo už 500ms od poslední akce? 
        // predchoziMillis4 = aktualniMillis;   // v tento čas jsem provedl poslední akci 
         /* do hodnoty led2svetlo zapíšu negovanou hodnotu led1svetlo, pokud led1 svítí chci led2 zhaslou a naopak 
            čas blikání se bude řídit časem blikání led1svetlo     */       
            led2svetlo = !led1svetlo; // aktualizace stavu proměnné led2
             Serial.println("led2 bliká střídavě");  // výpis na seriový monitor                                                    
   }  
mám to na stole, od mačkání tlačítka už mozol ,ale hodně pomohl výpis na seriový monitor, aspoň jsem věděl, kde v kodu zrovna jsem, když mi neblikalo nic.

Uživatelský avatar
kiRRow
Příspěvky: 1152
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Mini CNC osa Z

Příspěvek od kiRRow » 17 říj 2019, 18:49

V minulém příspěvku jsem ti posílal kód jak by to střídavé blikání mělo vypadat a pracovat. Čti, prosím, co ti píšu, protože jinak nemá cenu ti už odpovídat.

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

Re: Mini CNC osa Z

Příspěvek od Hanz » 17 říj 2019, 18:52

vyzkoušel jsem , ale bohužel mi to nešlo, no ale pro jistotu to vyzkouším ještě jednou.

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

Re: Mini CNC osa Z

Příspěvek od Hanz » 17 říj 2019, 21:35

dobrý den, jsem zmatkař ! Znovu jsem vyzkoušel dodělat střídavé blikání od kiRRow a je plně funkční - zprvu jsem špatně pochopil :oops: tady je Funkční sketch :

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) { 
  aktualniMillis = millis();  //podívám se na hodinky - aktuální čas
  if(aktualniMillis - predchoziMillis3 > 300) { // nejprve si zjistím jestli je čas něco provést
    led1svetlo = !led1svetlo; // do hodnoty led1svetlo zapíšu její negovanou hodnotu, svítila-li zhasne, byla-li zhaslá rožne se
    led2svetlo = !led1svetlo; // do hodnoty led2svetlo zapíšu negovanou hodnotu led1svetlo, pokud led1 svítí chci led2 zhaslou a naopak
    predchoziMillis3 = aktualniMillis;   // v tento čas jsem provedl poslední akci 
  }
} 
   
  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 
 } 

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: Mini CNC osa Z

Příspěvek od KamilV » 18 říj 2019, 08:59

Kód jsem až tak nestudoval, ale minimálně ještě drobnou kosmetiku by si zasloužil:
  • je dobrým zvykem dát všechny #define nahoru
  • konstanty je přehledné psát velkými písmeny
  • mode by mohlo být jen byte místo int

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

Re: Mini CNC osa Z

Příspěvek od Hanz » 18 říj 2019, 12:23

dobrý den, děkuju za připomínky a návrhy. Zde jsou zakomponovány a sketch upraven, upraveno i mode == 2, mode == 3

Kód: Vybrat vše

#define TLACITKO 7   // pin pro TLACITKO
#define LED1  10    // pin pro LED1 zelená
#define LED2  11    // pin pro LED2 červená

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

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í

boolean led1svetlo;   //  pomocná hodnota proměnné led1svetlo
boolean led2svetlo;   //  pomocná hodnota proměnné led2svetlo

 
void setup() {
  
  pinMode(LED1, OUTPUT);  // pin pro LED1 nastaven jako výstup
  pinMode(LED2, OUTPUT);  // pin pro LED2 nastaven jako výstup
  pinMode(TLACITKO, INPUT);  // pin pro TLACITKO nastaven jako vstup
  digitalWrite(TLACITKO,HIGH);  //   

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

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 vynuluje
      delay(200); // prodleva proti záchvěvům tlačítka 200ms
    }

   if(mode == 0) {
    // ******* LED1, LED2 vypnuto ********    
     led1svetlo = false;  // zhasni LED1              
     led2svetlo = false;  // zhasni LED2
     Serial.println("LED1,LED2 vypnuto");  // výpis na seriový monitor                   
   }
   
  if(mode == 1) {
    // ******* LED1, LED2 zapnuto  ********       
     led1svetlo = true;  // rožni LED1             
     led2svetlo = true;  // rožni LED2
     Serial.println("LED1,LED2 zapnuto");  // výpis na seriový monitor                
   }
   
  if(mode == 2) {
    // ******* LED1,LED2 blikání rychlé  *******
  aktualniMillis = millis();  //podívám se na hodinky - aktuální čas
  if(led1svetlo){  // potřebuju LED1,LED2 zhasnout nebo rosvítit?
    if(aktualniMillis - predchoziMillis1 > 200) {  // nejprve si zjistím jestli je čas něco provést, uběhlo už 200ms od poslední akce?           
            led1svetlo = false;  // zhasni LED1
            led2svetlo = false;  // zhasni LED2
            predchoziMillis1 = aktualniMillis;   // v tento čas jsem provedl poslední akci
    }
   } else if(aktualniMillis - predchoziMillis1 > 200) {  // nejprve si zjistím jestli je čas něco provést, uběhlo už 200ms od poslední akce?            
            led1svetlo = true;  // rozsviť LED1
            led2svetlo = true;  // rozsviť LED2
            predchoziMillis1 = aktualniMillis;  // v tento čas jsem provedl poslední akci
  }
  Serial.println("LED1,LED2 blikání rychlé");  // výpis na seriový monitor
 }
    
    if(mode == 3) { 
  // ******* LED1,LED2 blikání pomalé  *******
  aktualniMillis = millis();  //podívám se na hodinky - aktuální čas
  if(led1svetlo){  // potřebuju LED1,LED2 zhasnout nebo rosvítit?
    if(aktualniMillis - predchoziMillis2 > 500) {  // nejprve si zjistím jestli je čas něco provést, uběhlo už 500ms od poslední akce?           
            led1svetlo = false;  // zhasni LED1
            led2svetlo = false;  // zhasni LED2
            predchoziMillis2 = aktualniMillis;   // v tento čas jsem provedl poslední akci
    }
   } else if(aktualniMillis - predchoziMillis2 > 500) {  // nejprve si zjistím jestli je čas něco provést, uběhlo už 500ms od poslední akce?            
            led1svetlo = true;  // rozsviť LED1
            led2svetlo = true;  // rozsviť LED2
            predchoziMillis2 = aktualniMillis;  // v tento čas jsem provedl poslední akci
  }
  Serial.println("LED1,LED2 blikání pomalé");  // výpis na seriový monitor
 }
    
       if(mode == 4) { 
  // ******* LED1,LED2 blikání střídavé  *******   
  aktualniMillis = millis();  //podívám se na hodinky - aktuální čas
  if(aktualniMillis - predchoziMillis3 > 300) { // nejprve si zjistím jestli je čas něco provést, uběhlo už 300ms ?
    led1svetlo = !led1svetlo; // do hodnoty led1svetlo zapíšu její negovanou hodnotu, svítila-li LED1 tak zhasne, byla-li zhaslá rožne se
    led2svetlo = !led1svetlo; // do hodnoty led2svetlo zapíšu negovanou hodnotu led1svetlo, pokud LED1 svítí chci LED2 zhaslou a naopak
    predchoziMillis3 = aktualniMillis;   // v tento čas jsem provedl poslední akci 
    Serial.println("LED1,LED2 blikání střídavé");  // výpis na seriový monitor
  }
 } 
  digitalWrite(LED1,led1svetlo);  // aktualizace stavu LED1, zápis proměnné na výstupní pin 10
  digitalWrite(LED2,led2svetlo);  // aktualizace stavu LED2, zápis proměnné na výstupní pin 11   
}
zajímá mě jestli je tohle dobře ? mám to v mode == 2, mode == 3

Kód: Vybrat vše

 if(led1svetlo){  // potřebuju LED1,LED2 zhasnout nebo rosvítit?

Uživatelský avatar
kiRRow
Příspěvky: 1152
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Mini CNC osa Z

Příspěvek od kiRRow » 18 říj 2019, 15:51

tak ... mode 0 a mode 1 je perfektní ... teď se kouknem na blikání oběma ledkama najednou v mode 2 ... mělo by to pracovat následujícím způsobem ...

1) nejprve se mrkneme na hodinky - aktuálí čas
2) potom nebudem sledovat stav led1svetlo, ale místo toho zjistíme jestli je čas něco provést ... jestli uběhlo oněch 200 ms od poslední akce
3) když je čas něco provést, tak teprve tehdy zjistím jestli led1svetlo je HIGH, nebo ne ...
4) pokud ano, zhasnu led1svetlo i led2svetlo, pokud ne, rožnu led1svetlo i led2svetlo
5) zapíšu si čas provedení poslední akce

bude z toho nakonec kód o pár řádcích ... ten jen zkopíruješ do mode 3 a lehoučce upravíš aby blikal pomaleji
ps: pouč se z toho co je teďkom v mode 4

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

Re: Mini CNC osa Z

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

dobrý den, další zjednodušení a hlavně nápověda pro mě od kiRRow, úprava mode == 2 a mode == 3

Kód: Vybrat vše

#define TLACITKO 2   // pin pro TLACITKO
#define LED1  10    // pin pro LED1 zelená
#define LED2  11    // pin pro LED2 červená

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

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í

boolean led1svetlo;   //  pomocná hodnota proměnné led1svetlo
boolean led2svetlo;   //  pomocná hodnota proměnné led2svetlo

 
void setup() {
  
  pinMode(LED1, OUTPUT);  // pin pro LED1 nastaven jako výstup
  pinMode(LED2, OUTPUT);  // pin pro LED2 nastaven jako výstup
  pinMode(TLACITKO, INPUT_PULLUP);  // pin pro TLACITKO nastaven jako vstup
  digitalWrite(TLACITKO,HIGH);  //   

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

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 vynuluje
      delay(200); // prodleva proti záchvěvům tlačítka 200ms
    }

   if(mode == 0) {
    // ******* LED1, LED2 vypnuto ********    
     led1svetlo = false;  // zhasni LED1              
     led2svetlo = false;  // zhasni LED2
     Serial.println("LED1,LED2 vypnuto");  // výpis na seriový monitor                   
   }
   
  if(mode == 1) {
    // ******* LED1, LED2 zapnuto  ********       
     led1svetlo = true;  // rožni LED1             
     led2svetlo = true;  // rožni LED2
     Serial.println("LED1,LED2 zapnuto");  // výpis na seriový monitor                
   }
   
   if(mode == 2) {
    // ******* LED1,LED2 blikání rychlé  *******
  aktualniMillis = millis();  //podívám se na hodinky - aktuální čas  
    if(aktualniMillis - predchoziMillis1 > 200) {  // nejprve si zjistím jestli je čas něco provést, uběhlo už 200ms od poslední akce?  
      digitalRead(led1svetlo == HIGH); {    // zjistím jestli led1svetlo je HIGH - tj. jestli svítí LED1  
            led1svetlo = !led1svetlo;  // jestli ano zhasnu, když ne tak rožnu LED1 
            led2svetlo = !led2svetlo;  // totéž provedu s LED2
            predchoziMillis1 = aktualniMillis;   // v tento čas jsem provedl poslední akci
    }  
  }
  Serial.println("LED1,LED2 blikání rychlé");  // výpis na seriový monitor
 }
    
   if(mode == 3) { 
  // ******* LED1,LED2 blikání pomalé  *******
  aktualniMillis = millis();  //podívám se na hodinky - aktuální čas  
    if(aktualniMillis - predchoziMillis2 > 500) {  // nejprve si zjistím jestli je čas něco provést, uběhlo už 500ms od poslední akce?  
      digitalRead(led1svetlo == HIGH); {   // zjistím jestli led1svetlo je HIGH - tj. jestli svítí LED1     
            led1svetlo = !led1svetlo;  // jestli ano zhasnu, když ne tak rožnu LED1
            led2svetlo = !led2svetlo;  // totéž provedu s LED2
            predchoziMillis2 = aktualniMillis;   // v tento čas jsem provedl poslední akci
    }  
  } 
  Serial.println("LED1,LED2 blikání pomalé");  // výpis na seriový monitor
 }
    
    if(mode == 4) { 
  // ******* LED1,LED2 blikání střídavé  *******   
  aktualniMillis = millis();  //podívám se na hodinky - aktuální čas
  if(aktualniMillis - predchoziMillis3 > 300) { // nejprve si zjistím jestli je čas něco provést, uběhlo už 300ms ?
    led1svetlo = !led1svetlo; // do hodnoty led1svetlo zapíšu její negovanou hodnotu, svítila-li LED1 tak zhasne, byla-li zhaslá rožne se
    led2svetlo = !led1svetlo; // do hodnoty led2svetlo zapíšu negovanou hodnotu led1svetlo, pokud LED1 svítí chci LED2 zhaslou a naopak
    predchoziMillis3 = aktualniMillis;   // v tento čas jsem provedl poslední akci 
    Serial.println("LED1,LED2 blikání střídavé");  // výpis na seriový monitor
  }
 } 
  digitalWrite(LED1,led1svetlo);  // aktualizace stavu LED1, zápis proměnné na výstupní pin 10
  digitalWrite(LED2,led2svetlo);  // aktualizace stavu LED2, zápis proměnné na výstupní pin 11   
}

Uživatelský avatar
kiRRow
Příspěvky: 1152
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Mini CNC osa Z

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

Kód: Vybrat vše

digitalRead(led1svetlo == HIGH); {    // zjistím jestli led1svetlo je HIGH - tj. jestli svítí LED1  
            led1svetlo = !led1svetlo;  // jestli ano zhasnu, když ne tak rožnu LED1 
            led2svetlo = !led2svetlo;  // totéž provedu s LED2
            predchoziMillis1 = aktualniMillis;   // v tento čas jsem provedl poslední akci
    }
špatně ... podmínka se klade příkazem IF

Kód: Vybrat vše

/*
led1svetlo je proměná v paměti ... je v ní napsáno to, co se nakonci loopu zapíše do výstupních pinů ... je boolean, tudíž má hodnotu jen 0 nebo 1 ...
 pokud výsledek toho co je v závorce za příkazem IF je roven 1 neboli true, tak se provede to co je v prvních složených závorkách, pokud podmínka
 splněna není ... příkaz IF dostane 0 neboli false, tak se provede to co je v složených závorkách za else ...
*/
if(led1svetlo){ 
	zhasnu ledky
} else {
	rožnu ledky
}
zapíšu si poslední akci
ps : jo a ledky se zhasínaj tak, že je obě nastavíš obě ledsvetko na tvrdo false a rožínaj tak, že je nastavíš na true ...

Odpovědět

Kdo je online

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