Osvětlení kamionu

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Indian
Příspěvky: 16
Registrován: 20 bře 2018, 14:36
Reputation: 0

Osvětlení kamionu

Příspěvek od Indian » 17 úno 2020, 21:06

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

  
      
    }
    

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: Osvětlení kamionu

Příspěvek od jankop » 17 úno 2020, 22:01

Co si představuješ pod pojmem?
tlačítka mám přes odpor na zem

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Osvětlení kamionu

Příspěvek od AstroMiK » 17 úno 2020, 22:05

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á ...)

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: Osvětlení kamionu

Příspěvek od jankop » 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.

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Osvětlení kamionu

Příspěvek od AstroMiK » 17 úno 2020, 22:16

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.

Indian
Příspěvky: 16
Registrován: 20 bře 2018, 14:36
Reputation: 0

Re: Osvětlení kamionu

Příspěvek od Indian » 17 úno 2020, 22:23

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.

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Osvětlení kamionu

Příspěvek od AstroMiK » 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.

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

Re: Osvětlení kamionu

Příspěvek od KamilV » 17 úno 2020, 22:33

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í.

Uživatelský avatar
gilhad
Příspěvky: 778
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: Osvětlení kamionu

Příspěvek od gilhad » 18 úno 2020, 03:38

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");};

Indian
Příspěvky: 16
Registrován: 20 bře 2018, 14:36
Reputation: 0

Re: Osvětlení kamionu

Příspěvek od Indian » 18 úno 2020, 05:13

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

Odpovědět

Kdo je online

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