Modelová železnice
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Re: Modelová železnice
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.
Re: Modelová železnice
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.
Re: Modelová železnice
Zkus ten poslední kód znovu, myslím, že jsem v něm nestihnul editovat chybu, kterou jsem tam udělal při kopírování - zas mi tam zůstalo to zapnutí relé a diody při najetí vlaku do stanice a né až v tom jednom intervalu
Re: Modelová železnice
Je z toho BKO samo to cykluje bez reakce na IR
Re: Modelová železnice
Nic ostatního z toho kódu se nespustí dokud vlak nebude true ...
vlak true se nastaví jedině pokud je IR1Value HIGH a zároveň vlak byl false ... momentálně poslední kód by měl být tenhle (doufám, že tam zas nemám chybu ... )
tady bych už asi mrknul na ten senzor ... nevyskočí tam občas jednička ve výpisu ?
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
}
}
}
Re: Modelová železnice
Ve výpisu nic není, když odpojím OUT ze senzoru tak je to vše na HIGH ale necykluje, zkusím tam dát odpor ke GND.
Re: Modelová železnice
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);
Re: Modelová železnice
Přepsal jsem HIGH a LOW kde bylo potřeba a asi to chodí, je pravda že to IRko na digi pinu chodí divně, zkoušel jsem i druhé. Zkusím ho dát na analog.
Ale asi úspěch a zatím moc děkujiii.
Ale asi úspěch a zatím moc děkujiii.
Re: Modelová železnice
Ještě malá vada na kráse, po startu je relé zapnuto, funguje až po prvním cyklu, led funguje OK. Musím někde nastavit výchozí stav relé?
Re: Modelová železnice
jak divně ? projeď si ten výpis, pokud se tam objevuje něco jako 0100011011101111, tak je problém v kmitání výstupu toho čidla - dá se to ošetřit programem, nebo hardwarově pomocí RC filtru
k tomu relé -
k tomu relé -
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);
}
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host