Re: Modelová železnice
Napsal: 23 kvě 2023, 19:28
Jj, taky jsem to zjistil, ale i po opravě, nedělá co má, period 1 a 2 jsou přehozený, to nevadí, upravím, ale teď to časuje samo furt dokola a IR to ignoruje.
České fórum pro všechny nadšence do Arduina a dalších technologií.
https://forum.hwkitchen.cz/
Kód: Vybrat vše
if (IR1Value==HIGH) { // něco se děje na senzoru
if (vlak == false) { // nepamatuji si že by tam kdy byl vlak - nespínám relé a diodu, chci si jen pamatovat čas a že vlak přijel - sepnu to později
startMillis = currentMillis; // tady akutální čas zjištěný na začátku loopu uložím
vlak = true; // <<-- tady je jediné místo , kde se nastavuje že je vlak true
}
}
Kód: Vybrat vše
boolean vlak = false; // vlak není ve stanici
void loop(){
int IR1Value = digitalRead(IR1);
Serial.println(IR1);
currentMillis = millis(); // tady si zjistím aktuální čas
if (IR1Value==HIGH) { // něco se děje na senzoru
if (vlak == false) { // nepamatuji si že by tam kdy byl vlak - nespínám relé a diodu, chci si jen pamatovat čas a že vlak přijel - sepnu to později
startMillis = currentMillis; // tady akutální čas zjištěný na začátku loopu uložím
vlak = true; // zapamatuji si že tam je vlak
}
}
if (currentMillis - startMillis >= period2) { // pokud je rozdíl mezi aktuálním časem a tím co jsem si uložil, když bylo IR1 HIGH větší nebo roven period2 - tzn stojí tu pět vteřin
if(vlak){ // je tam vůbec vlak
digitalWrite(led1, LOW); // zapnout ledku
digitalWrite(rele1, HIGH); // zapnout relé
}
}
if (currentMillis - startMillis >= period1 + period2) { // pokud je rozdíl mezi aktuálním časem a tím co jsem si uložil, když bylo IR1 HIGH větší nebo roven oboum periodám, tak vlak odjel - 2s na odjezd + 5s stání
if(vlak){ // je tam vůbec vlak
digitalWrite(led1, HIGH); // vypnout ledku
digitalWrite(rele1, LOW); // vypnout relé
vlak = false; // zapomenu na vlak - tohle bych dal do nejdelšího intervalu, pokud nechceš testovat zda-li všechny intervaly uplynuly
}
}
}
Už to vidím ..
Kód: Vybrat vše
int IR1Value = digitalRead(IR1);
Serial.println(IR1);
Kód: Vybrat vše
int IR1Value = digitalRead(IR1);
Serial.println(IR1Value);
Kód: Vybrat vše
void setup()
{
digitalWrite(rele1, LOW); // vypnout relé co nejdříve a ještě než ho nastavím jako výstup
pinMode(rele1,OUTPUT); // relé jako výstup
Serial.begin(9600);
pinMode(led1, OUTPUT);
pinMode(IR1,INPUT);
}