Modelová železnice

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
daavii
Příspěvky: 20
Registrován: 22 kvě 2023, 11:41
Reputation: 0

Re: Modelová železnice

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

daavii
Příspěvky: 20
Registrován: 22 kvě 2023, 11:41
Reputation: 0

Re: Modelová železnice

Příspěvek od daavii » 23 kvě 2023, 19:29

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.

Uživatelský avatar
kiRRow
Příspěvky: 1151
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Modelová železnice

Příspěvek od kiRRow » 23 kvě 2023, 19:31

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

daavii
Příspěvky: 20
Registrován: 22 kvě 2023, 11:41
Reputation: 0

Re: Modelová železnice

Příspěvek od daavii » 23 kvě 2023, 19:34

Je z toho BKO samo to cykluje bez reakce na IR

Uživatelský avatar
kiRRow
Příspěvky: 1151
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Modelová železnice

Příspěvek od kiRRow » 23 kvě 2023, 19:43

Nic ostatního z toho kódu se nespustí dokud vlak nebude true ...

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

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

}
tady bych už asi mrknul na ten senzor ... nevyskočí tam občas jednička ve výpisu ?

daavii
Příspěvky: 20
Registrován: 22 kvě 2023, 11:41
Reputation: 0

Re: Modelová železnice

Příspěvek od daavii » 23 kvě 2023, 19:50

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.

Uživatelský avatar
kiRRow
Příspěvky: 1151
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Modelová železnice

Příspěvek od kiRRow » 23 kvě 2023, 19:53

daavii píše:
23 kvě 2023, 19:50
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.
Už to vidím ..

Kód: Vybrat vše

int IR1Value = digitalRead(IR1);
Serial.println(IR1);
má být

Kód: Vybrat vše

int IR1Value = digitalRead(IR1);
Serial.println(IR1Value);
mělo by to vypisovat 0 pokud tam není vlak a 1 pokud tam vlak je - je-li to obráceně musíš změnit if (IR1Value==HIGH) na LOW

daavii
Příspěvky: 20
Registrován: 22 kvě 2023, 11:41
Reputation: 0

Re: Modelová železnice

Příspěvek od daavii » 23 kvě 2023, 20:04

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.

daavii
Příspěvky: 20
Registrován: 22 kvě 2023, 11:41
Reputation: 0

Re: Modelová železnice

Příspěvek od daavii » 23 kvě 2023, 20:17

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é?

Uživatelský avatar
kiRRow
Příspěvky: 1151
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Modelová železnice

Příspěvek od kiRRow » 23 kvě 2023, 20:26

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

Odpovědět

Kdo je online

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