kód postupného rozsvecovania LED a ich okamžitého zhasnutia
Automatizace, řízení, měření, logování a programování s využitím platformy Arduino.
-
- Příspěvky: 16
- Registrován: pát bře 25, 2022 3:38 pm
- Reputace: 0
Re: kód postupného rozsvecovania LED a ich okamžitého zhasnutia
Soban, tak sú tam proti naindukovaniu čohokolvek, to sa stane lahko vzhladom k vysokej vstupnej impedancií, tipujem nejakych tranzistorov mosfet ktoré vstup obsahuje v rámci integrovaného obvodu. Keď sa definuje pevná vstupná impedancia napríklad odporom na 10k proti zemi tak to náhodne nebude spínať, ale pri privedení +5V zo zopne zaručene. Tomuto rozumiem.
Ja kedže niesom dobrý programátor tak preferujem HW riešenia. To sú externé odpory. Každopadne ich tam nebude treba reálne ten kód pracuje s optočlenmi na vstupoch a na výstupoch zase niesu LED ale sú to LED v optočlenoch a relé (16A, 16A a 48A, spínané cez tranzistory). Ja som to tu len nechcem zbytočne rozpisovať aby sa to nekomplikovalo.
Hodilo by sa mi skôr vysvetliť ako presne ten program upraviť s tým millis
Mám pocit že pre ľudí tu to nebude problém a ja na to sám asi neprídem 
Každopadne nad tým ešte popremýšlam. Chápem to tak že na millis vznikne prilíš velká hodnota a podmienka, vlastne podmienky, sú splnené okamžite. Tak teraz už aspoň rozumiem problému
Buď sa tam pridá nejaka dalšia premenná kde sa bude millis teda čas ukladať celý čas a nejako sa zahrnie do existujúcej podmienky alebo sa tam pridá nejaka dalšia ale zatial netuším ako to urobiť 
Ja kedže niesom dobrý programátor tak preferujem HW riešenia. To sú externé odpory. Každopadne ich tam nebude treba reálne ten kód pracuje s optočlenmi na vstupoch a na výstupoch zase niesu LED ale sú to LED v optočlenoch a relé (16A, 16A a 48A, spínané cez tranzistory). Ja som to tu len nechcem zbytočne rozpisovať aby sa to nekomplikovalo.
Hodilo by sa mi skôr vysvetliť ako presne ten program upraviť s tým millis


Každopadne nad tým ešte popremýšlam. Chápem to tak že na millis vznikne prilíš velká hodnota a podmienka, vlastne podmienky, sú splnené okamžite. Tak teraz už aspoň rozumiem problému


-
- Příspěvky: 4031
- Registrován: pon úno 07, 2022 10:11 pm
- Reputace: 240
- Lokalita: Zlaté Hory / Olomouc
- Systémové napětí: 24V
- Výkon panelů [Wp]: 3600
- Kapacita baterie [kWh]: 16
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
- Bydliště: Zlaté Hory
Re: kód postupného rozsvecovania LED a ich okamžitého zhasnutia
Prostě před čekáním si musíš hodnotu uložit
No potom ve smyčce ji znovu číst a porovnat a jak uplyne čas tak je čekání ukončeno.....
No potom ve smyčce ji znovu číst a porovnat a jak uplyne čas tak je čekání ukončeno.....
3,6kWp
| 2x MUST PV18-3024 VHM, 3kW/24V | 16kWh 


-
- Příspěvky: 16
- Registrován: pát bře 25, 2022 3:38 pm
- Reputace: 0
Re: kód postupného rozsvecovania LED a ich okamžitého zhasnutia
Skúsil som tento kód (dával som ho na predošlú stranu ako posledný):
Upraviť aby to aj pri zhodení HIGH na vstupe do LOW a následnom nahodení znovu do HIGH počítal správne sekundy. To znamená rozsvecovalo LED v poradí a s postupnostou ako pri prvom spustení. No chcel som to urobiť sám a takýto neštastný je výsledok, ale lepšie to neviem 
Pribudlo tam:
Myslím že je dobré sledovať pomocou last_update čas z millis bez ohladu na vykonanie podmienky. Potom som ho zapisoval do previousMillis1 ak bolo millis väčšie než currentMillis1. Aby sa podmienka nevykonávala automaticky ale až uplynie znovu čas +1001.
Ale je tam nejaka chyba, nejde to ani skompilovať a asi celkovo to nie je dobre!? 
Kód: Vybrat vše
// Definícia pinu pre pripojenie LED
const int ledPin1 = 12; // Pripojenie LED pre pin 2
const int ledPin2 = 13; // Pripojenie LED pre pin 3
const int ledPin3 = 11; // Pripojenie LED pre pin 3
const int ledPin4 = 10; // Pripojenie LED pre pin 3
// Definícia pinu pre sledovanie stavu
const int inputPin1 = 2; // Pripojenie pre vstup na pin 2
const int inputPin2 = 3; // Pripojenie pre vstup na pin 3
unsigned long previousMillis1 = 0;
unsigned long previousMillis2 = 0;
const long interval1 = 1000; // Interval v milisekundách (1 sekunda) pre prvé LED
const long interval2 = 2000; // Interval v milisekundách pre druhé LED
void setup() {
// Nastavenie pinov LED ako výstupov
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
// Nastavenie pinov pre vstup
pinMode(inputPin1, INPUT);
pinMode(inputPin2, INPUT);
}
void loop() {
// Čítanie hodnoty digitálneho pinu 2
int value1 = digitalRead(inputPin1);
// Kontrola, či je hodnota HIGH na pine 2
if (value1 == HIGH) {
// Rozsvietenie LED na pine 12
digitalWrite(ledPin1, HIGH);
// Získanie aktuálneho času
unsigned long currentMillis1 = millis(); //čas z millis uloží do currentMillis1
// Ak uplynulo 1 sekunda, prejdeme na druhú LED
if (currentMillis1 - previousMillis1 >= interval1) { //od currentMillis1 odčíta previousMillis1, ak je výsledok väčší alebo rovný interval1, vykoná sa podmienka
digitalWrite(ledPin3, HIGH);
previousMillis1 = currentMillis1; //čas z currentMillis1 uloží do previousMillis1
}
// Získanie aktuálneho času
unsigned long currentMillis2 = millis();
// Ak uplynulo 1 sekunda, vypneme druhú LED
if (currentMillis2 - previousMillis2 >= interval2) {
digitalWrite(ledPin4, HIGH);
previousMillis2 = currentMillis2;
}
} else {
// Zhasnutie LED
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
digitalWrite(ledPin2, LOW);
}
// Čítanie hodnoty digitálneho pinu 3
int value2 = digitalRead(inputPin2);
// Kontrola, či je hodnota HIGH na pine 3
if (value2 == HIGH && value1 == HIGH) {
// Rozsvietenie LED na pine 13
digitalWrite(ledPin2, HIGH);
} else {
// Zhasnutie LED na pine 13
digitalWrite(ledPin2, LOW);
}
}

Kód: Vybrat vše
// Definícia pinu pre pripojenie LED
const int ledPin1 = 12; // Pripojenie LED pre pin 2
const int ledPin2 = 13; // Pripojenie LED pre pin 3
const int ledPin3 = 11; // Pripojenie LED pre pin 3
const int ledPin4 = 10; // Pripojenie LED pre pin 3
// Definícia pinu pre sledovanie stavu
const int inputPin1 = 2; // Pripojenie pre vstup na pin 2
const int inputPin2 = 3; // Pripojenie pre vstup na pin 3
unsigned long previousMillis1 = 0;
unsigned long previousMillis2 = 0;
unsigned long last_update = 0;
const long interval1 = 1000; // Interval v milisekundách (1 sekunda) pre prvé LED
const long interval2 = 2000; // Interval v milisekundách pre druhé LED
void setup() {
// Nastavenie pinov LED ako výstupov
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
// Nastavenie pinov pre vstup
pinMode(inputPin1, INPUT);
pinMode(inputPin2, INPUT);
}
void loop() {
unsigned long last_update = millis();
// Čítanie hodnoty digitálneho pinu 2
int value1 = digitalRead(inputPin1);
// Kontrola, či je hodnota HIGH na pine 2
if (value1 == HIGH) {
// Rozsvietenie LED na pine 12
digitalWrite(ledPin1, HIGH);
if (last_update + 1001 > currentMillis1) {
unsigned long previousMillis1 = last_update;
}
// Získanie aktuálneho času
unsigned long currentMillis1 = millis(); //čas z millis uloží do currentMillis1
// Ak uplynulo 1 sekunda, prejdeme na druhú LED
if (currentMillis1 - previousMillis1 >= interval1) { //od currentMillis1 odčíta previousMillis1, ak je výsledok väčší alebo rovný interval1, vykoná sa podmienka
digitalWrite(ledPin3, HIGH);
previousMillis1 = currentMillis1; //čas z currentMillis1 uloží do previousMillis1
}
if (last_update + 2001 > currentMillis2) {
unsigned long previousMillis2 = last_update;
}
// Získanie aktuálneho času
unsigned long currentMillis2 = millis();
// Ak uplynulo 1 sekunda, vypneme druhú LED
if (currentMillis2 - previousMillis2 >= interval2) {
digitalWrite(ledPin4, HIGH);
previousMillis2 = currentMillis2;
}
} else {
// Zhasnutie LED
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
digitalWrite(ledPin2, LOW);
}
// Čítanie hodnoty digitálneho pinu 3
int value2 = digitalRead(inputPin2);
// Kontrola, či je hodnota HIGH na pine 3
if (value2 == HIGH && value1 == HIGH) {
// Rozsvietenie LED na pine 13
digitalWrite(ledPin2, HIGH);
} else {
// Zhasnutie LED na pine 13
digitalWrite(ledPin2, LOW);
}
}
Kód: Vybrat vše
void loop() {
unsigned long last_update = millis();
Myslím že je dobré sledovať pomocou last_update čas z millis bez ohladu na vykonanie podmienky. Potom som ho zapisoval do previousMillis1 ak bolo millis väčšie než currentMillis1. Aby sa podmienka nevykonávala automaticky ale až uplynie znovu čas +1001.
Kód: Vybrat vše
if (last_update + 1001 > currentMillis1) {
unsigned long previousMillis1 = last_update;

-
- Příspěvky: 4031
- Registrován: pon úno 07, 2022 10:11 pm
- Reputace: 240
- Lokalita: Zlaté Hory / Olomouc
- Systémové napětí: 24V
- Výkon panelů [Wp]: 3600
- Kapacita baterie [kWh]: 16
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
- Bydliště: Zlaté Hory
Re: kód postupného rozsvecovania LED a ich okamžitého zhasnutia
A co takto.....?
Kód: Vybrat vše
// Definícia pinu pre pripojenie LED
const int ledPin1 = 12; // Pripojenie LED pre pin 2
const int ledPin2 = 13; // Pripojenie LED pre pin 3
const int ledPin3 = 11; // Pripojenie LED pre pin 3
const int ledPin4 = 10; // Pripojenie LED pre pin 3
// Definícia pinu pre sledovanie stavu
const int inputPin1 = 2; // Pripojenie pre vstup na pin 2
const int inputPin2 = 3; // Pripojenie pre vstup na pin 3
unsigned long last_update = 0;
const unsigned long interval1 = 1000; // Interval v milisekundách (1 sekunda) pre prvé LED
const unsigned long interval2 = 2000; // Interval v milisekundách pre druhé LED
void setup() {
// Nastavenie pinov LED ako výstupov
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
// Nastavenie pinov pre vstup
pinMode(inputPin1, INPUT);
pinMode(inputPin2, INPUT);
}
void loop() {
// nepotřebuješ vytěžovat CPU na 100%
// stačí reakce co 10ms
delay(10);
// Čítanie hodnoty digitálneho pinu 2
int value1 = digitalRead(inputPin1);
// Od tohoto casu budeme pocitat ale pouze od vypnutí světla
if (value1==LOW) unsigned long last_update = millis();
// Kontrola, či je hodnota HIGH na pine 2
if (value1 == HIGH) {
// Rozsvietenie LED na pine 12
digitalWrite(ledPin1, HIGH);
unsigned long aktualni_millis=millis();
if ((last_update + interval1) < aktualni_millis) digitalWrite(ledPin3, HIGH);
if ((last_update + interval2) < aktualni_millis) digitalWrite(ledPin4, HIGH);
} else {
// Zhasnutie LED
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
digitalWrite(ledPin2, LOW);
}
// Čítanie hodnoty digitálneho pinu 3
int value2 = digitalRead(inputPin2);
// Kontrola, či je hodnota HIGH na pine 3
if (value2 == HIGH && value1 == HIGH) {
// Rozsvietenie LED na pine 13
digitalWrite(ledPin2, HIGH);
} else {
// Zhasnutie LED na pine 13
digitalWrite(ledPin2, LOW);
}
}
3,6kWp
| 2x MUST PV18-3024 VHM, 3kW/24V | 16kWh 


-
- Příspěvky: 16
- Registrován: pát bře 25, 2022 3:38 pm
- Reputace: 0
Re: kód postupného rozsvecovania LED a ich okamžitého zhasnutia
Soban, prvý krát ak som mal od resetu arduina na imputPin1 úroveň HIGH tak sa rozsvietia postupne. Ale ak tam bolo LOW a HIGH dám neskôr alebo ho dávam druhý krát, tak sa všetky LED rozsvietia naraz
a tá samostatná LED, ledPin2, tak nefunguje vôbec
Bohužial ten kód nebeží 



-
- Příspěvky: 4031
- Registrován: pon úno 07, 2022 10:11 pm
- Reputace: 240
- Lokalita: Zlaté Hory / Olomouc
- Systémové napětí: 24V
- Výkon panelů [Wp]: 3600
- Kapacita baterie [kWh]: 16
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
- Bydliště: Zlaté Hory
Re: kód postupného rozsvecovania LED a ich okamžitého zhasnutia
Tak teď by to mělo být snad ok
Jinak nezakmitávají tě tam ty vstupy? Skus zvětšit to delay(10) na začátku třeba na 100.
Kód: Vybrat vše
// Definícia pinu pre pripojenie LED
const int ledPin1 = 12; // Pripojenie LED pre pin 2
const int ledPin2 = 13; // Pripojenie LED pre pin 3
const int ledPin3 = 11; // Pripojenie LED pre pin 3
const int ledPin4 = 10; // Pripojenie LED pre pin 3
// Definícia pinu pre sledovanie stavu
const int inputPin1 = 2; // Pripojenie pre vstup na pin 2
const int inputPin2 = 3; // Pripojenie pre vstup na pin 3
unsigned long last_update = 0;
unsigned long interval1 = 1000; // Interval v milisekundách (1 sekunda) pre prvé LED
unsigned long interval2 = 2000; // Interval v milisekundách pre druhé LED
void setup() {
// Nastavenie pinov LED ako výstupov
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
// Nastavenie pinov pre vstup
pinMode(inputPin1, INPUT);
pinMode(inputPin2, INPUT);
}
void loop() {
// nepotřebuješ vytěžovat CPU na 100%
// stačí reakce co 10ms
delay(10);
// Čítanie hodnoty digitálneho pinu 2
int value1 = digitalRead(inputPin1);
// Kontrola, či je hodnota HIGH na pine 2
if (value1 == HIGH) {
// Rozsvietenie LED na pine 12
digitalWrite(ledPin1, HIGH);
unsigned long aktualni_millis=millis();
unsigned long interval_millis=last_update + interval1;
if (interval_millis < aktualni_millis) digitalWrite(ledPin3, HIGH);
interval_millis=last_update + interval2;
if (interval_millis < aktualni_millis) digitalWrite(ledPin4, HIGH);
} else {
// Zhasnutie LED
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
digitalWrite(ledPin2, LOW);
last_update = millis();
}
// Čítanie hodnoty digitálneho pinu 3
int value2 = digitalRead(inputPin2);
// Kontrola, či je hodnota HIGH na pine 3
if (value2 == HIGH && value1 == HIGH) {
// Rozsvietenie LED na pine 13
digitalWrite(ledPin2, HIGH);
} else {
// Zhasnutie LED na pine 13
digitalWrite(ledPin2, LOW);
}
}
3,6kWp
| 2x MUST PV18-3024 VHM, 3kW/24V | 16kWh 


-
- Příspěvky: 16
- Registrován: pát bře 25, 2022 3:38 pm
- Reputace: 0
Re: kód postupného rozsvecovania LED a ich okamžitého zhasnutia
Soban, vau, ďakujem za pomoc! Už to funguje
Som fakt rád. Keby ta zaujímalo do čoho to je tak ti pošelm do správy fotku dosiek ktoré to bude riadiť
Večer ten kód skúsim poriadne naštudovať a pozrieť.


-
- Příspěvky: 4031
- Registrován: pon úno 07, 2022 10:11 pm
- Reputace: 240
- Lokalita: Zlaté Hory / Olomouc
- Systémové napětí: 24V
- Výkon panelů [Wp]: 3600
- Kapacita baterie [kWh]: 16
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
- Bydliště: Zlaté Hory
Re: kód postupného rozsvecovania LED a ich okamžitého zhasnutia
Podle mě tam dochází k zakmitávání kontaktu, a další zrada mohla být ve špatném počítání unsigned long v if
Samozřejmě ještě třeba ošetřit to zakmitávání kontaktů a pak přetečení proměnné millis které není ošetřené.
Samozřejmě ještě třeba ošetřit to zakmitávání kontaktů a pak přetečení proměnné millis které není ošetřené.
3,6kWp
| 2x MUST PV18-3024 VHM, 3kW/24V | 16kWh 


-
- Příspěvky: 16
- Registrován: pát bře 25, 2022 3:38 pm
- Reputace: 0
Re: kód postupného rozsvecovania LED a ich okamžitého zhasnutia
Ono zakmitávajú len tlačítka a tu nikde tlačítko nebude, všade budú optočleny a relé... Ani teraz pri testovaní som nepoužil tlačítko.
Na to pretečenie som sa tiež chcel opýtať. Po akej dlhej dobe k nemu dojde pri ATmega328? Nedá sa to riešiť nejakym resetom MCU pri každom spúštaní "zariadenia"? Alebo sa to rieši ukladaním premenných do nejakej vnútornej pamäte tesne pred pretečením? Ako sa to potom prejaví až dojde k pretečeniu? Všetko sa vypne a pobeží to odznovu?
Na to pretečenie som sa tiež chcel opýtať. Po akej dlhej dobe k nemu dojde pri ATmega328? Nedá sa to riešiť nejakym resetom MCU pri každom spúštaní "zariadenia"? Alebo sa to rieši ukladaním premenných do nejakej vnútornej pamäte tesne pred pretečením? Ako sa to potom prejaví až dojde k pretečeniu? Všetko sa vypne a pobeží to odznovu?
-
- Příspěvky: 2803
- Registrován: stř úno 02, 2022 10:30 am
- Reputace: 293
- Lokalita: okolí Mělníka
- Systémové napětí: 48V
- Výkon panelů [Wp]: 13000
- Kapacita baterie [kWh]: 15
Re: kód postupného rozsvecovania LED a ich okamžitého zhasnutia
preteceni nemusis resit resetem. staci spravne udelat aritmetiku kolem tech timestampu.
Tu je priklad hned na zacatku clanku. Prvni kus kodu ma problem a druhy ne
https://www.norwegiancreations.com/2018 ... nd-micros/
Tezi to z toho, ze je promena s casem unsigned long. A kdyz dojde k preteceni interniho millis counteru, nic se nestane a vysledek je dobre
Tu je priklad hned na zacatku clanku. Prvni kus kodu ma problem a druhy ne
https://www.norwegiancreations.com/2018 ... nd-micros/
Tezi to z toho, ze je promena s casem unsigned long. A kdyz dojde k preteceni interniho millis counteru, nic se nestane a vysledek je dobre
-
- Příspěvky: 4031
- Registrován: pon úno 07, 2022 10:11 pm
- Reputace: 240
- Lokalita: Zlaté Hory / Olomouc
- Systémové napětí: 24V
- Výkon panelů [Wp]: 3600
- Kapacita baterie [kWh]: 16
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
- Bydliště: Zlaté Hory
Re: kód postupného rozsvecovania LED a ich okamžitého zhasnutia
Tak pokud jsem tu ochranu proti přetečení pochopil tak by to mělo být nějak takhle:
Kód: Vybrat vše
// Definícia pinu pre pripojenie LED
const int ledPin1 = 12; // Pripojenie LED pre pin 2
const int ledPin2 = 13; // Pripojenie LED pre pin 3
const int ledPin3 = 11; // Pripojenie LED pre pin 3
const int ledPin4 = 10; // Pripojenie LED pre pin 3
// Definícia pinu pre sledovanie stavu
const int inputPin1 = 2; // Pripojenie pre vstup na pin 2
const int inputPin2 = 3; // Pripojenie pre vstup na pin 3
unsigned long last_update = 0;
int interval1 = 1000; // Interval v milisekundách (1 sekunda) pre prvé LED
int interval2 = 2000; // Interval v milisekundách pre druhé LED
void setup() {
// Nastavenie pinov LED ako výstupov
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
// Nastavenie pinov pre vstup
pinMode(inputPin1, INPUT);
pinMode(inputPin2, INPUT);
}
void loop() {
// nepotřebuješ vytěžovat CPU na 100%
// stačí reakce co 10ms
delay(10);
// Čítanie hodnoty digitálneho pinu 2
int value1 = digitalRead(inputPin1);
// Kontrola, či je hodnota HIGH na pine 2
if (value1 == HIGH) {
// Rozsvietenie LED na pine 12
digitalWrite(ledPin1, HIGH);
if (millis() - last_update > interval1) digitalWrite(ledPin3, HIGH);
if (millis() - last_update > interval2) digitalWrite(ledPin4, HIGH);
} else {
// Zhasnutie LED
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
digitalWrite(ledPin2, LOW);
last_update = millis();
}
// Čítanie hodnoty digitálneho pinu 3
int value2 = digitalRead(inputPin2);
// Kontrola, či je hodnota HIGH na pine 3
if (value2 == HIGH && value1 == HIGH) {
// Rozsvietenie LED na pine 13
digitalWrite(ledPin2, HIGH);
} else {
// Zhasnutie LED na pine 13
digitalWrite(ledPin2, LOW);
}
}
3,6kWp
| 2x MUST PV18-3024 VHM, 3kW/24V | 16kWh 


-
- Příspěvky: 7800
- Registrován: sob črc 19, 2014 8:56 pm
- Reputace: 952
- Lokalita: severně od Brna
- Systémové napětí: 48V
- Výkon panelů [Wp]: 8kWp
- Kapacita baterie [kWh]: 12kWh
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
Re: kód postupného rozsvecovania LED a ich okamžitého zhasnutia
celekm dobrý, ale každejch cca 7 dní ti přeteče časovač milis, a počítá od nuly, a zblbne se to, protože currentmillis bude menší než previousmillis
tady je ten zakopanej pes:
je několik řešení tohoto problému, třeba http://www.xpablo.cz/?p=421#more-421
což je dobrý i pro složitější programy, kde se nemusí na nic čekat a program vždycky vykoná jenom to co je "expired" , tj každou sekundu měří, každý 3s přepíše displej a každou minutu odešle data...
a nebo přidat podmínky na zápornej čas: If (millis() <previousmillis) then... všechny millis nastav na currentmillis - se mi to nechce vypisovat. Jinak budeš každej tejden koukat na zaseknutý ledky a říkat si, že ten čínskej klon atmegy stojí za ... a ona je chyba v programátorovi, ne v HW...
tady je ten zakopanej pes:
Kód: Vybrat vše
if (currentMillis1 - previousMillis1 >= interval1)
což je dobrý i pro složitější programy, kde se nemusí na nic čekat a program vždycky vykoná jenom to co je "expired" , tj každou sekundu měří, každý 3s přepíše displej a každou minutu odešle data...
a nebo přidat podmínky na zápornej čas: If (millis() <previousmillis) then... všechny millis nastav na currentmillis - se mi to nechce vypisovat. Jinak budeš každej tejden koukat na zaseknutý ledky a říkat si, že ten čínskej klon atmegy stojí za ... a ona je chyba v programátorovi, ne v HW...
ostrov skoro 8kWp neustále ve stádiu zrodu: smartshunt(ex WBJR), MPPT150/45, MPPT 250/100(ex midnitesolar 150 clasic lite), 16S a různě P cca 340Ah Winston, MP II 5000,( ex Powerjack 8kW, ex samodomo cca 4kW). 48V DC rozvody a spotřebiče.
-
- Příspěvky: 2803
- Registrován: stř úno 02, 2022 10:30 am
- Reputace: 293
- Lokalita: okolí Mělníka
- Systémové napětí: 48V
- Výkon panelů [Wp]: 13000
- Kapacita baterie [kWh]: 15
Re: kód postupného rozsvecovania LED a ich okamžitého zhasnutia
kodl: ale ono mu to bude fungovat v unsigned long.
soban: ano, mel bys to ted mit dobre ... mala ukazka
unsigned long je 0 to 4,294,967,295
a kdyz udela 10 - 4,294,967,295 tak to spravne ukaze 10
soban: ano, mel bys to ted mit dobre ... mala ukazka
unsigned long je 0 to 4,294,967,295
a kdyz udela 10 - 4,294,967,295 tak to spravne ukaze 10
Kód: Vybrat vše
void loop() {
unsigned long y = 4294967295;
Serial.print(millis());
Serial.print(" + ");
Serial.print(y);
Serial.print(" = ");
Serial.println(millis() - y);
delay(1000);
}
0 + 4294967295 = 1
1000 + 4294967295 = 1001
2000 + 4294967295 = 2002
3002 + 4294967295 = 3004
4002 + 4294967295 = 4004
5004 + 4294967295 = 5006
6004 + 4294967295 = 6006
7006 + 4294967295 = 7008
8006 + 4294967295 = 8008
-
- Příspěvky: 4031
- Registrován: pon úno 07, 2022 10:11 pm
- Reputace: 240
- Lokalita: Zlaté Hory / Olomouc
- Systémové napětí: 24V
- Výkon panelů [Wp]: 3600
- Kapacita baterie [kWh]: 16
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
- Bydliště: Zlaté Hory
Re: kód postupného rozsvecovania LED a ich okamžitého zhasnutia
Díky, já ten HW nemám takže to nemůžu otestovat na všechny stavy, určitě by to ještě chtělo ošetřit vstup, protože i když tam nejsou tlačítka tak rušení je svinstvo a stačí aby to na vstupu spadlo na chvíli do LOW a můžou ty ledky blikat....
3,6kWp
| 2x MUST PV18-3024 VHM, 3kW/24V | 16kWh 


-
- Příspěvky: 16
- Registrován: pát bře 25, 2022 3:38 pm
- Reputace: 0
Re: kód postupného rozsvecovania LED a ich okamžitého zhasnutia
pardon, pár dní som riešil iné veci ale som rád že sa to tu tak rozbehloSoban píše: ↑pon led 22, 2024 9:22 pmTak pokud jsem tu ochranu proti přetečení pochopil tak by to mělo být nějak takhle:
Kód: Vybrat vše
// Definícia pinu pre pripojenie LED const int ledPin1 = 12; // Pripojenie LED pre pin 2 const int ledPin2 = 13; // Pripojenie LED pre pin 3 const int ledPin3 = 11; // Pripojenie LED pre pin 3 const int ledPin4 = 10; // Pripojenie LED pre pin 3 // Definícia pinu pre sledovanie stavu const int inputPin1 = 2; // Pripojenie pre vstup na pin 2 const int inputPin2 = 3; // Pripojenie pre vstup na pin 3 unsigned long last_update = 0; int interval1 = 1000; // Interval v milisekundách (1 sekunda) pre prvé LED int interval2 = 2000; // Interval v milisekundách pre druhé LED void setup() { // Nastavenie pinov LED ako výstupov pinMode(ledPin1, OUTPUT); pinMode(ledPin2, OUTPUT); pinMode(ledPin3, OUTPUT); pinMode(ledPin4, OUTPUT); // Nastavenie pinov pre vstup pinMode(inputPin1, INPUT); pinMode(inputPin2, INPUT); } void loop() { // nepotřebuješ vytěžovat CPU na 100% // stačí reakce co 10ms delay(10); // Čítanie hodnoty digitálneho pinu 2 int value1 = digitalRead(inputPin1); // Kontrola, či je hodnota HIGH na pine 2 if (value1 == HIGH) { // Rozsvietenie LED na pine 12 digitalWrite(ledPin1, HIGH); if (millis() - last_update > interval1) digitalWrite(ledPin3, HIGH); if (millis() - last_update > interval2) digitalWrite(ledPin4, HIGH); } else { // Zhasnutie LED digitalWrite(ledPin1, LOW); digitalWrite(ledPin3, LOW); digitalWrite(ledPin4, LOW); digitalWrite(ledPin2, LOW); last_update = millis(); } // Čítanie hodnoty digitálneho pinu 3 int value2 = digitalRead(inputPin2); // Kontrola, či je hodnota HIGH na pine 3 if (value2 == HIGH && value1 == HIGH) { // Rozsvietenie LED na pine 13 digitalWrite(ledPin2, HIGH); } else { // Zhasnutie LED na pine 13 digitalWrite(ledPin2, LOW); } }

7 dní sa mi sice čakať nechce. Aj keď niekedy to skúsiť môžem... Ale nahral som tam aj verziu kódu kde by k pretečeniu nemalo dojsť a každopadne funkcie fungujú

Web toho PablaX si pamätám ešte z roku 2007, ježiš...

-
- Příspěvky: 16
- Registrován: pát bře 25, 2022 3:38 pm
- Reputace: 0
Re: kód postupného rozsvecovania LED a ich okamžitého zhasnutia
Tak som nahrával kód do finalneho HW a jedna vec nefunguje ako by mala. Skúšal som dva posledné kódy od Sobran-a.
Táto posledná podmienka kódu:
"ledPin2, HIGH" by sa malo vykonať až po tom čo platia a vykonajú sa prvé 3 podmienky kódu. Teda toto:
Chápem že to nie je viazané na uplynutie millis a rozsvietenie LED ale len na value1 (inputPin1) a value2 (inputPin2). Blbé je že tie začnú platiť ešte skôr než ubehnú millis a rozsvietia sa LEDky...
Skúšal som to logicky prepísať z if (value2 == HIGH && value1 == HIGH) { na if (ledPin3 == HIGH && ledPin4 == HIGH) { Ale to nebeží. Ako to teda urobiť? Mám skúsiť úroveň HIGH/LOW zapisovať do premennej a do tej podmienky dať hodnotu premennej na miesto rovno hodnoty LOW/HIGH na LED? Ďakujem.
EDIT: tak skúšam vytvoriť tie premenné asi takto:
Ale nebeží to
Tak som skúsil priradiť premenným počiatočné hodnoty LOW takto:
tak ma napadlo či by sa tým premenným nemala hodnota priradiť inak, nejako takto?
Ale to tiež nefunguje a nejde ani skompilovať 
Táto posledná podmienka kódu:
Kód: Vybrat vše
if (value2 == HIGH && value1 == HIGH) {
// Rozsvietenie LED na pine 13
digitalWrite(ledPin2, HIGH);
} else {
// Zhasnutie LED na pine 13
digitalWrite(ledPin2, LOW);
"ledPin2, HIGH" by sa malo vykonať až po tom čo platia a vykonajú sa prvé 3 podmienky kódu. Teda toto:
Kód: Vybrat vše
int value1 = digitalRead(inputPin1);
// Kontrola, či je hodnota HIGH na pine 1
if (value1 == HIGH) {
// Rozsvietenie LED na pine 12
digitalWrite(ledPin1, HIGH);
if (millis() - last_update > interval1) digitalWrite(ledPin3, HIGH);
if (millis() - last_update > interval2) digitalWrite(ledPin4, HIGH);
Chápem že to nie je viazané na uplynutie millis a rozsvietenie LED ale len na value1 (inputPin1) a value2 (inputPin2). Blbé je že tie začnú platiť ešte skôr než ubehnú millis a rozsvietia sa LEDky...
Skúšal som to logicky prepísať z if (value2 == HIGH && value1 == HIGH) { na if (ledPin3 == HIGH && ledPin4 == HIGH) { Ale to nebeží. Ako to teda urobiť? Mám skúsiť úroveň HIGH/LOW zapisovať do premennej a do tej podmienky dať hodnotu premennej na miesto rovno hodnoty LOW/HIGH na LED? Ďakujem.
EDIT: tak skúšam vytvoriť tie premenné asi takto:
Kód: Vybrat vše
// Definícia pinu pre pripojenie LED
const int ledPin1 = 3; // Pripojenie LED pre pin 1 //
const int ledPin2 = 6; // Pripojenie LED pre pin 2 //
const int ledPin3 = 10; // Pripojenie LED pre pin 3 //
const int ledPin4 = 9; // Pripojenie LED pre pin 4 //
// Definícia pinu pre sledovanie stavu
const int inputPin1 = 1; // Pripojenie pre vstup na pin 1 //
const int inputPin2 = 5; // Pripojenie pre vstup na pin 2 //
unsigned long last_update = 0;
int interval1 = 1000; // Interval v milisekundách (1 sekunda) pre prvé LED
int interval2 = 2000; // Interval v milisekundách pre druhé LED
int valueA; //vytvoril som si premennú A
int valueB; //vytvoril som si premennú B
void setup() {
// Nastavenie pinov LED ako výstupov
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
// Nastavenie pinov pre vstup
pinMode(inputPin1, INPUT);
pinMode(inputPin2, INPUT);
}
void loop() {
// nepotřebuješ vytěžovat CPU na 100%
// stačí reakce co 10ms
delay(10);
// Čítanie hodnoty digitálneho pinu 1
int value1 = digitalRead(inputPin1);
// Kontrola, či je hodnota HIGH na pine 1
if (value1 == HIGH) {
// Rozsvietenie LED na pine 12
digitalWrite(ledPin1, HIGH);
if (millis() - last_update > interval1) digitalWrite(ledPin3, HIGH);
int valueA = HIGH;
if (millis() - last_update > interval2) digitalWrite(ledPin4, HIGH);
int valueB = HIGH;
} else {
// Zhasnutie LED
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
digitalWrite(ledPin2, LOW);
last_update = millis();
}
// Čítanie hodnoty digitálneho pinu 2
int value2 = digitalRead(inputPin2);
// Kontrola, či je hodnota HIGH na pine 2
if (valueA == HIGH && valueB == HIGH) {
// Rozsvietenie LED na pine 13
digitalWrite(ledPin2, HIGH);
} else {
// Zhasnutie LED na pine 13
digitalWrite(ledPin2, LOW);
}
}

Kód: Vybrat vše
// Definícia pinu pre pripojenie LED
const int ledPin1 = 3; // Pripojenie LED pre pin 1 //
const int ledPin2 = 6; // Pripojenie LED pre pin 2 //
const int ledPin3 = 10; // Pripojenie LED pre pin 3 //
const int ledPin4 = 9; // Pripojenie LED pre pin 4 //
// Definícia pinu pre sledovanie stavu
const int inputPin1 = 1; // Pripojenie pre vstup na pin 1 //
const int inputPin2 = 5; // Pripojenie pre vstup na pin 2 //
unsigned long last_update = 0;
int interval1 = 1000; // Interval v milisekundách (1 sekunda) pre prvé LED
int interval2 = 2000; // Interval v milisekundách pre druhé LED
int valueA = LOW; //vytvoril som si premennú A a priradil jej počiatočnú hodnotu LOW
int valueB = LOW; //vytvoril som si premennú B a priradil jej počiatočnú hodnotu LOW
void setup() {
// Nastavenie pinov LED ako výstupov
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
// Nastavenie pinov pre vstup
pinMode(inputPin1, INPUT);
pinMode(inputPin2, INPUT);
}
void loop() {
// nepotřebuješ vytěžovat CPU na 100%
// stačí reakce co 10ms
delay(10);
// Čítanie hodnoty digitálneho pinu 1
int value1 = digitalRead(inputPin1);
// Kontrola, či je hodnota HIGH na pine 1
if (value1 == HIGH) {
// Rozsvietenie LED na pine 12
digitalWrite(ledPin1, HIGH);
if (millis() - last_update > interval1) digitalWrite(ledPin3, HIGH);
int valueA = HIGH;
if (millis() - last_update > interval2) digitalWrite(ledPin4, HIGH);
int valueB = HIGH;
} else {
// Zhasnutie LED
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
digitalWrite(ledPin2, LOW);
last_update = millis();
}
// Čítanie hodnoty digitálneho pinu 2
int value2 = digitalRead(inputPin2);
// Kontrola, či je hodnota HIGH na pine 2
if (valueA == HIGH && valueB == HIGH) {
// Rozsvietenie LED na pine 13
digitalWrite(ledPin2, HIGH);
} else {
// Zhasnutie LED na pine 13
digitalWrite(ledPin2, LOW);
int valueA = LOW;
int valueB = LOW;
}
}
Kód: Vybrat vše
// Definícia pinu pre pripojenie LED
const int ledPin1 = 3; // Pripojenie LED pre pin 1 //
const int ledPin2 = 6; // Pripojenie LED pre pin 2 //
const int ledPin3 = 10; // Pripojenie LED pre pin 3 //
const int ledPin4 = 9; // Pripojenie LED pre pin 4 //
// Definícia pinu pre sledovanie stavu
const int inputPin1 = 1; // Pripojenie pre vstup na pin 1 //
const int inputPin2 = 5; // Pripojenie pre vstup na pin 2 //
unsigned long last_update = 0;
int interval1 = 1000; // Interval v milisekundách (1 sekunda) pre prvé LED
int interval2 = 2000; // Interval v milisekundách pre druhé LED
int valueA = LOW; //vytvoril som si premennú A a priradil jej počiatočnú hodnotu LOW
int valueB = LOW; //vytvoril som si premennú B a priradil jej počiatočnú hodnotu LOW
void setup() {
// Nastavenie pinov LED ako výstupov
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
// Nastavenie pinov pre vstup
pinMode(inputPin1, INPUT);
pinMode(inputPin2, INPUT);
}
void loop() {
// nepotřebuješ vytěžovat CPU na 100%
// stačí reakce co 10ms
delay(10);
// Čítanie hodnoty digitálneho pinu 1
int value1 = digitalRead(inputPin1);
// Kontrola, či je hodnota HIGH na pine 1
if (value1 == HIGH) {
// Rozsvietenie LED na pine 12
digitalWrite(ledPin1, HIGH);
if (millis() - last_update > interval1) digitalWrite(ledPin3, HIGH && valueA, HIGH);
if (millis() - last_update > interval2) digitalWrite(ledPin4, HIGH && valueB, HIGH);
} else {
// Zhasnutie LED
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
digitalWrite(ledPin2, LOW);
last_update = millis();
}
// Čítanie hodnoty digitálneho pinu 2
int value2 = digitalRead(inputPin2);
// Kontrola, či je hodnota HIGH na pine 2
if (valueA == HIGH && valueB == HIGH) {
// Rozsvietenie LED na pine 13
digitalWrite(ledPin2, HIGH);
} else {
// Zhasnutie LED na pine 13
digitalWrite(ledPin2, LOW);
int valueA = LOW;
int valueB = LOW;
}
}

Naposledy upravil(a) nichicon dne pát úno 02, 2024 7:41 pm, celkem upraveno 2 x.
-
- Příspěvky: 4031
- Registrován: pon úno 07, 2022 10:11 pm
- Reputace: 240
- Lokalita: Zlaté Hory / Olomouc
- Systémové napětí: 24V
- Výkon panelů [Wp]: 3600
- Kapacita baterie [kWh]: 16
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
- Bydliště: Zlaté Hory
Re: kód postupného rozsvecovania LED a ich okamžitého zhasnutia
No tak proměnnou kterou nastavíš jak se první světlo rozsvítí naplno a vynuluješ při zhasnutí světla.
3,6kWp
| 2x MUST PV18-3024 VHM, 3kW/24V | 16kWh 


-
- Příspěvky: 16
- Registrován: pát bře 25, 2022 3:38 pm
- Reputace: 0
Re: kód postupného rozsvecovania LED a ich okamžitého zhasnutia
Dalo by sa to prosím trochu viac vysvetliť/rozpísať?
Ja to potrebujem práve nie až sa rozsvieti prvé svetlo (tak to funguje teraz) ale až sa rozsvieti to posledné (teda tým posledným myslím LED čo sa rozsvieti po 2000mS)
Mne sa zdalo že to dáva zmysel takto:
Ale kedže to nebeží tak asi nie 

Mne sa zdalo že to dáva zmysel takto:
Kód: Vybrat vše
// Definícia pinu pre pripojenie LED
const int ledPin1 = 3; // Pripojenie LED pre pin 1 //
const int ledPin2 = 6; // Pripojenie LED pre pin 2 //
const int ledPin3 = 10; // Pripojenie LED pre pin 3 //
const int ledPin4 = 9; // Pripojenie LED pre pin 4 //
// Definícia pinu pre sledovanie stavu
const int inputPin1 = 1; // Pripojenie pre vstup na pin 1 //
const int inputPin2 = 5; // Pripojenie pre vstup na pin 2 //
unsigned long last_update = 0;
int interval1 = 1000; // Interval v milisekundách (1 sekunda) pre prvé LED
int interval2 = 2000; // Interval v milisekundách pre druhé LED
int valueA = LOW; //vytvoril som si premennú A a priradil jej počiatočnú hodnotu LOW
int valueB = LOW; //vytvoril som si premennú B a priradil jej počiatočnú hodnotu LOW
void setup() {
// Nastavenie pinov LED ako výstupov
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
// Nastavenie pinov pre vstup
pinMode(inputPin1, INPUT);
pinMode(inputPin2, INPUT);
}
void loop() {
// nepotřebuješ vytěžovat CPU na 100%
// stačí reakce co 10ms
delay(10);
// Čítanie hodnoty digitálneho pinu 1
int value1 = digitalRead(inputPin1);
// Kontrola, či je hodnota HIGH na pine 1
if (value1 == HIGH) {
// Rozsvietenie LED na pine 12
digitalWrite(ledPin1, HIGH);
if (millis() - last_update > interval1) digitalWrite(ledPin3, HIGH);
valueA = HIGH;
if (millis() - last_update > interval2) digitalWrite(ledPin4, HIGH);
valueB = HIGH;
} else {
// Zhasnutie LED
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
digitalWrite(ledPin2, LOW);
valueA = LOW;
valueB = LOW;
last_update = millis();
}
// Čítanie hodnoty digitálneho pinu 2
int value2 = digitalRead(inputPin2);
// Kontrola, či je hodnota HIGH na pine 2
if (valueA == HIGH && valueB == HIGH) {
// Rozsvietenie LED na pine 13
digitalWrite(ledPin2, HIGH);
} else {
// Zhasnutie LED na pine 13
digitalWrite(ledPin2, LOW);
valueA = LOW;
valueB = LOW;
}
}

-
- Příspěvky: 4031
- Registrován: pon úno 07, 2022 10:11 pm
- Reputace: 240
- Lokalita: Zlaté Hory / Olomouc
- Systémové napětí: 24V
- Výkon panelů [Wp]: 3600
- Kapacita baterie [kWh]: 16
- Chci prodávat energii: NE
- Chci/Mám dotaci: NE
- Bydliště: Zlaté Hory
Re: kód postupného rozsvecovania LED a ich okamžitého zhasnutia
Kód: Vybrat vše
if (millis() - last_update > interval2) {
digitalWrite(ledPin4, HIGH);
valueB = HIGH;
}
Kód: Vybrat vše
// Kontrola, či je hodnota HIGH na pine 2
if (value2 == HIGH && valueB == HIGH) {
// Rozsvietenie LED na pine 13
digitalWrite(ledPin2, HIGH);
} else {
// Zhasnutie LED na pine 13
digitalWrite(ledPin2, LOW);
}
3,6kWp
| 2x MUST PV18-3024 VHM, 3kW/24V | 16kWh 


-
- Příspěvky: 16
- Registrován: pát bře 25, 2022 3:38 pm
- Reputace: 0
Re: kód postupného rozsvecovania LED a ich okamžitého zhasnutia
ďakujem
funguje to

Kdo je online
Uživatelé prohlížející si toto fórum: BLEX [Bot], Claudebot [Bot] a 0 hostů