Stránka 1 z 2

Osvětlení kamionu

Napsal: 17 úno 2020, 21:06
od Indian
Ahoj Všem,
potřeboval bych pomoc. Udělal jsem jednoduché osvětlení kamionu pro syna s neopixel pásky, vždy světlo obsahuje dvě diody v řadě, obě svítí bíle a při sepnutí blinkru se krajní dioda rozbliká žlutě atd, vše mi funguje, ale mám problém, že když vypnu blinkr na kolíbkovém přepínači, tak dlouho trvá, než se mi znovu načte základní poloha, tlačítka mám přes odpor na zem, tak nevím kde hledat. Předem děkuji za vaši pomoc.

Kód: Vybrat vše

#include <Adafruit_NeoPixel.h>
      #define PIN_LP 8
      #define PIN_LZ 7
      #define PIN_PP 10
      #define PIN_PZ 11
      #define PIN_M 9
      #define pocet 2

int cteniL = 0;
int cteniP = 0;
int cteniV = 0;
int cteniM = 0;
int X = 200;   //blik
int Y = 60;   //jas
int Z = 150;    //cekani na zhasnuti zlute
const int TLL = 2;
const int TLP = 12;
const int TV = 5;
const int TM = 3;
byte var;

Adafruit_NeoPixel stripLP = Adafruit_NeoPixel(2, PIN_LP, NEO_RGB + NEO_KHZ800);
Adafruit_NeoPixel stripLZ = Adafruit_NeoPixel(2, PIN_LZ, NEO_RGB + NEO_KHZ800);
Adafruit_NeoPixel stripPP = Adafruit_NeoPixel(2, PIN_PP, NEO_RGB + NEO_KHZ800);
Adafruit_NeoPixel stripPZ = Adafruit_NeoPixel(2, PIN_PZ, NEO_RGB + NEO_KHZ800);
Adafruit_NeoPixel stripM = Adafruit_NeoPixel(2, PIN_M, NEO_RGB + NEO_KHZ800);

    void setup() {
      stripLP.begin();
      stripLP.show(); // Initialize all pixels to 'off'
      stripLZ.begin();
      stripLZ.show();
      stripPP.begin();
      stripPP.show();
      stripPZ.begin();
      stripPZ.show();
      stripM.begin();
      stripM.show();
        pinMode (TLL, INPUT);
        pinMode (TLP, INPUT);
        pinMode (TV, INPUT);
        pinMode (TM, INPUT);
        stripLP.setBrightness(Y);
        stripLZ.setBrightness(Y);
        stripPP.setBrightness(Y);
        stripPZ.setBrightness(Y);
        stripM.setBrightness(Y);
        
    }
    void loop () {
cteniL = digitalRead(TLL);
cteniP = digitalRead(TLP);
cteniV = digitalRead(TV);
cteniM = digitalRead(TM);

  if (cteniL == 1 & cteniP == 0 & cteniV == 0 & cteniM == 0){
    var = 0;
  }
  else if (cteniL == 0 & cteniP == 1 & cteniV == 0 & cteniM == 0){
    var = 1;
  }
  else if (cteniL == 0 & cteniP == 0 & cteniV == 1 & cteniM == 0){
    var = 2;
  }
  else if (cteniL == 0 & cteniP == 0 & cteniV == 0 & cteniM == 0){
    var = 3;
  }
  else if (cteniL == 1 & cteniP == 0 & cteniV == 0 & cteniM == 1){
    var = 4;
  }
  else if (cteniL == 0 & cteniP == 1 & cteniV == 0 & cteniM == 1){
    var = 5;
  }
  else if (cteniL == 0 & cteniP == 0 & cteniV == 1 & cteniM == 1){
    var = 6;
  }
  else if (cteniL == 0 & cteniP == 0 & cteniV == 0 & cteniM == 1){
    var = 7;
  }
                      
  switch (var){
    case 0:
      stripPP.setPixelColor(0, 255, 255, 255); 
      stripPP.setPixelColor(1, 255, 255, 255);                 
      stripPZ.setPixelColor(0, 0, 255, 0);
      stripPZ.setPixelColor(1, 0, 255, 0);
      stripM.setPixelColor(0, 0, 0, 0); 
      stripM.setPixelColor(1, 0, 0, 0);
      stripM.show(); 
      stripPP.show();                                                
      stripPZ.show();
      delay(0);
      stripLP.setPixelColor(0, 255, 255, 255); 
      stripLP.setPixelColor(1, 150, 255, 0);
      stripLZ.setPixelColor(0, 0, 255, 0); 
      stripLZ.setPixelColor(1, 150, 255, 0);    
      stripLP.show();
      stripLZ.show();
      delay(X);
      stripLP.setPixelColor(0, 255, 255, 255); 
      stripLP.setPixelColor(1, 0, 0, 0);
      stripLZ.setPixelColor(0, 0, 255, 0); 
      stripLZ.setPixelColor(1, 0, 0, 0);    
      stripLP.show();
      stripLZ.show();
      delay(X);
            
    break;


      case 1:
        stripLP.setPixelColor(0, 255, 255, 255); 
        stripLP.setPixelColor(1, 255, 255, 255);                 
        stripLZ.setPixelColor(0, 0, 255, 0);
        stripLZ.setPixelColor(1, 0, 255, 0);
        stripM.setPixelColor(0, 0, 0, 0); 
        stripM.setPixelColor(1, 0, 0, 0);
        stripM.show();
        stripLP.show();                                                
        stripLZ.show();
        delay(0);
        stripPP.setPixelColor(0, 255, 255, 255); 
        stripPP.setPixelColor(1, 150, 255, 0);
        stripPZ.setPixelColor(0, 0, 255, 0); 
        stripPZ.setPixelColor(1, 150, 255, 0);    
        stripPP.show();
        stripPZ.show();
        delay(X);
        stripPP.setPixelColor(0, 255, 255, 255); 
        stripPP.setPixelColor(1, 0, 0, 0);
        stripPZ.setPixelColor(0, 0, 255, 0); 
        stripPZ.setPixelColor(1, 0, 0, 0);    
        stripPP.show();
        stripPZ.show();
        delay(X);
            
    break;
      case 2:   
        stripLP.setPixelColor(0, 255, 255, 255); 
        stripLP.setPixelColor(1, 150, 255, 0);
        stripLZ.setPixelColor(0, 0, 255, 0); 
        stripLZ.setPixelColor(1, 150, 255, 0);
        stripPP.setPixelColor(0, 255, 255, 255); 
        stripPP.setPixelColor(1, 150, 255, 0);
        stripPZ.setPixelColor(0, 0, 255, 0); 
        stripPZ.setPixelColor(1, 150, 255, 0);
        stripM.setPixelColor(0, 0, 0, 0); 
        stripM.setPixelColor(1, 0, 0, 0);
        stripM.show();    
        stripPP.show();
        stripPZ.show();    
        stripLP.show();
        stripLZ.show();
        delay(X);
        stripLP.setPixelColor(0, 255, 255, 255); 
        stripLP.setPixelColor(1, 0, 0, 0);
        stripLZ.setPixelColor(0, 0, 255, 0); 
        stripLZ.setPixelColor(1, 0, 0, 0); 
        stripPP.setPixelColor(0, 255, 255, 255); 
        stripPP.setPixelColor(1, 0, 0, 0);
        stripPZ.setPixelColor(0, 0, 255, 0); 
        stripPZ.setPixelColor(1, 0, 0, 0);    
        stripPP.show();
        stripPZ.show();   
        stripLP.show();
        stripLZ.show();
        delay(X);        

    break;
      case 3:
            for (int i=0; i<pocet; i++){
            stripLP.setPixelColor(i, 255, 255, 255);                   
            stripLZ.setPixelColor(i, 0, 255, 0);
            stripPP.setPixelColor(i, 255, 255, 255);                   
            stripPZ.setPixelColor(i, 0, 255, 0);
            stripM.setPixelColor(0, 0, 0, 0); 
            stripM.setPixelColor(1, 0, 0, 0);
            stripM.show();
            stripLP.show();                                                
            stripLZ.show();
            stripPP.show();                                                
            stripPZ.show();
            delay(0);
            }
     break;       
      case 4:
        stripPP.setPixelColor(0, 255, 255, 255); 
        stripPP.setPixelColor(1, 255, 255, 255);                 
        stripPZ.setPixelColor(0, 0, 255, 0);
        stripPZ.setPixelColor(1, 0, 255, 0);
        stripPP.show();                                                
        stripPZ.show();
        delay(0);
        stripLP.setPixelColor(0, 255, 255, 255); 
        stripLP.setPixelColor(1, 150, 255, 0);
        stripLZ.setPixelColor(0, 0, 255, 0); 
        stripLZ.setPixelColor(1, 150, 255, 0);
        stripM.setPixelColor(0, 150, 255, 0); 
        stripM.setPixelColor(1, 0, 0, 0);
        stripM.show();    
        stripLP.show();
        stripLZ.show();
        delay(X);
        stripLP.setPixelColor(0, 255, 255, 255); 
        stripLP.setPixelColor(1, 0, 0, 0);
        stripLZ.setPixelColor(0, 0, 255, 0); 
        stripLZ.setPixelColor(1, 0, 0, 0);
        stripM.setPixelColor(0, 0, 0, 0); 
        stripM.setPixelColor(1, 150, 255, 0);
        stripM.show();    
        stripLP.show();
        stripLZ.show();
        delay(X);
            
    break;
      case 5:
        stripLP.setPixelColor(0, 255, 255, 255); 
        stripLP.setPixelColor(1, 255, 255, 255);                 
        stripLZ.setPixelColor(0, 0, 255, 0);
        stripLZ.setPixelColor(1, 0, 255, 0);
        stripLP.show();                                                
        stripLZ.show();
        delay(0);
        stripPP.setPixelColor(0, 255, 255, 255); 
        stripPP.setPixelColor(1, 150, 255, 0);
        stripPZ.setPixelColor(0, 0, 255, 0); 
        stripPZ.setPixelColor(1, 150, 255, 0);
        stripM.setPixelColor(0, 150, 255, 0); 
        stripM.setPixelColor(1, 0, 0, 0);
        stripM.show();    
        stripPP.show();
        stripPZ.show();
        delay(X);
        stripPP.setPixelColor(0, 255, 255, 255); 
        stripPP.setPixelColor(1, 0, 0, 0);
        stripPZ.setPixelColor(0, 0, 255, 0); 
        stripPZ.setPixelColor(1, 0, 0, 0);
        stripM.setPixelColor(0, 0, 0, 0); 
        stripM.setPixelColor(1, 150, 255, 0);
        stripM.show();   
        stripPP.show();
        stripPZ.show();
        delay(X);
            
    break;
      case 6:   
        stripLP.setPixelColor(0, 255, 255, 255); 
        stripLP.setPixelColor(1, 150, 255, 0);
        stripLZ.setPixelColor(0, 0, 255, 0); 
        stripLZ.setPixelColor(1, 150, 255, 0);
        stripPP.setPixelColor(0, 255, 255, 255); 
        stripPP.setPixelColor(1, 150, 255, 0);
        stripPZ.setPixelColor(0, 0, 255, 0); 
        stripPZ.setPixelColor(1, 150, 255, 0);
        stripM.setPixelColor(0, 150, 255, 0); 
        stripM.setPixelColor(1, 0, 0, 0);
        stripM.show();      
        stripPP.show();
        stripPZ.show();    
        stripLP.show();
        stripLZ.show();
        delay(X);
        stripLP.setPixelColor(0, 255, 255, 255); 
        stripLP.setPixelColor(1, 0, 0, 0);
        stripLZ.setPixelColor(0, 0, 255, 0); 
        stripLZ.setPixelColor(1, 0, 0, 0); 
        stripPP.setPixelColor(0, 255, 255, 255); 
        stripPP.setPixelColor(1, 0, 0, 0);
        stripPZ.setPixelColor(0, 0, 255, 0); 
        stripPZ.setPixelColor(1, 0, 0, 0);
        stripM.setPixelColor(0, 0, 0, 0); 
        stripM.setPixelColor(1, 150, 255, 0);
        stripM.show();   
        stripPP.show();
        stripPZ.show();   
        stripLP.show();
        stripLZ.show();
        delay(X);        

    break;
      case 7:
        stripLP.setPixelColor(0, 255, 255, 255);
        stripLP.setPixelColor(1, 255, 255, 255);                
        stripLZ.setPixelColor(0, 0, 255, 0);
        stripLZ.setPixelColor(1, 0, 255, 0);
        stripPP.setPixelColor(0, 255, 255, 255);
        stripPP.setPixelColor(1, 255, 255, 255);                  
        stripPZ.setPixelColor(0, 0, 255, 0);
        stripPZ.setPixelColor(1, 0, 255, 0);
        stripM.setPixelColor(0, 150, 255, 0); 
        stripM.setPixelColor(1, 0, 0, 0);
        stripM.show(); 
        stripLP.show();                                                
        stripLZ.show();
        stripPP.show();                                                
        stripPZ.show();
        delay(X);
        stripLP.setPixelColor(0, 255, 255, 255);
        stripLP.setPixelColor(1, 255, 255, 255);                
        stripLZ.setPixelColor(0, 0, 255, 0);
        stripLZ.setPixelColor(1, 0, 255, 0);
        stripPP.setPixelColor(0, 255, 255, 255);
        stripPP.setPixelColor(1, 255, 255, 255);                  
        stripPZ.setPixelColor(0, 0, 255, 0);
        stripPZ.setPixelColor(1, 0, 255, 0);
        stripM.setPixelColor(0, 0, 0, 0); 
        stripM.setPixelColor(1, 150, 255, 0);
        stripM.show();    
        stripLP.show();                                                
        stripLZ.show();
        stripPP.show();                                                
        stripPZ.show();
        delay(X);
     break;     
  }

  
      
    }
    

Re: Osvětlení kamionu

Napsal: 17 úno 2020, 22:01
od jankop
Co si představuješ pod pojmem?
tlačítka mám přes odpor na zem

Re: Osvětlení kamionu

Napsal: 17 úno 2020, 22:05
od AstroMiK
V první řadě se trochu rozepiš (nebo nakresli schéma), jak máš zapojená tlačítka "Přes odpor na zem".

Já vidím v programu 4 problémy:

1) V podmínkách je použité jednoduché '&'. Myslím, že by mělo být dvojité "&&", nebo to vypsat jako 'and'.

2) Vstupy máš nastavené jako INPUT. To bych změnil na INPUT_PULLUP, aby byl i nezapojený stav jasně definovaný.
K tomu by ale bylo třeba vidět to připojení tlačítka.

3) V jedné řádce tam máš příkaz delay(0). To je schválně, nebo je to překlep?

4) Je dobrý programy alespoň trochu okomentovat.
Minimálně, co znamená který vstup (třeba takový 'PP' nebo 'LZ' se dá z kontextu odvodit, ale fakt mě nenapadá, co může znamenat třeba 'cteniV' nebo 'cteniM'),
a který CASE provádí jakou funkci (levá, pravá ...)

Re: Osvětlení kamionu

Napsal: 17 úno 2020, 22:14
od jankop
Ty podmínky jsou myslím v pořádku, nejspíš fungují správně. V tomto případě je asi jedno, jestli dělá logické nebo binární operace.

Re: Osvětlení kamionu

Napsal: 17 úno 2020, 22:16
od AstroMiK
jankop píše:
17 úno 2020, 22:14
Ty podmínky jsou myslím v pořádku, nejspíš fungují správně. V tomto případě je asi jedno, jestli dělá logické nebo binární operace.
... jo, to je vlastně pravda. Jsou to jen nuly, nebo jedničky, takže binární součin bude fungovat.

Re: Osvětlení kamionu

Napsal: 17 úno 2020, 22:23
od Indian
1) jednoduche & mi taky funguje ale upravim

2) upravim

3) 0 není překlep, je to case výchozí, kdyz jsou tlacitka vypnuta, rozne vse hned do standardu

4) omlouvam se, pro me ty popisky jsou jasne, psal jsem to :)) LZ - levy zadni, cteniV - vystrazne blinkry, M- maják :)))

A už jsem našel chybu, nemám prepinace na zem, tim pádem trvá prechod z 1 na 0

Az jsem si to po sobe znovu tady cetl a premyslel nad zapojenim (dite ma kamion pod postelou) tak to mam blbe, zitra se musim na to mrknout a predelat, stejne budu pridavat naves.

Re: Osvětlení kamionu

Napsal: 17 úno 2020, 22:29
od AstroMiK
... mně se nejednalo o case 0, ale o delay(0).
To je něco jako "žádná pauza". Teď koukám, že je to v tom programu dokonce několikrát.

Re: Osvětlení kamionu

Napsal: 17 úno 2020, 22:33
od KamilV
jankop píše:
17 úno 2020, 22:14
Ty podmínky jsou myslím v pořádku, nejspíš fungují správně. V tomto případě je asi jedno, jestli dělá logické nebo binární operace.
Úplně jedno to IMHO není. U bitového součinu & se vyhodnocují všechny operandy toho IFu.
U logického && se vyhodnotí první operand a pokud už ten je false, další se ani nevyhodnocují, pokud je true, vyhodnotí se další v řadě.

Zde bude rozdíl kosmetický a rychlost výpočtu bude skoro stejná.
Pokud by ale takový IF měl třeba zastavit rekurzi, bude rozdíl mezi & a && fatální.

Re: Osvětlení kamionu

Napsal: 18 úno 2020, 03:38
od gilhad
Nemluve o tom, ze

Kód: Vybrat vše

int a=1;
int b=2;
if ( a && b) {Serial.println("tohle se vypise");};
if ( a & b) {Serial.println("a tohle zase ne");};

Re: Osvětlení kamionu

Napsal: 18 úno 2020, 05:13
od Indian
AstroMiK píše:
17 úno 2020, 22:29
... mně se nejednalo o case 0, ale o delay(0).
To je něco jako "žádná pauza". Teď koukám, že je to v tom programu dokonce několikrát.
To je tam jako pojistka, občas se stávalo, že po rychlém přepnutí levého blinkru na pravý (a na opak) zůstal ten levý (pravy) stále blikat, proto je To tam jako nastaveni do základu. Ty pásky svítí stále dle nastaveni které dostanou, takze je nutno je nastavovat zas do výchozí pozice co mají mít