Takze ... co bych doporucil je zavistlosti, kdy z pozice vyhybek shazujes konfliktni navestidla na cervenou dat dopredu. Zaroven bych zavedl pomocne promenne, neco jako Kolej2L = true tehdy a jen tehdy, je-li postavena cesta levym zhlavim na kolej 2 (tzn. vyhybky 14,12, 10). Ty pak muzes vyuzit v dalsi rozhodovaci casti a usetrit si spoustu && podminek na vyhybky.
Pak bych doplnil nahozeni odjezdovych navestidel podle nastavenych cest a tlacitek, je-li cesta. Pak shozeni navestidel na cervenou. A az uplne nakonec vjezdove navestidlo podle cesty a odjezdoveho (to je uz tou dobou nastavene, opet si usetris podminky na vyhybky ktere uz se pretavily do navestnich znaku).
Shazovani na cervenou podle vyhybek mas IMHO nekompletni -- napr. L1 se shodi na cervenou (L1b) jen pokud je V12 LOW, ale co V14 ? Da se to resit konfiguraci (zaverova tabulka
) nebo napr.
- Kód: Vybrat vše
boolean Cesta1L = true;
boolean Cesta2L = true;
boolean Cesta3L = true;
// vyhodnoceni vyhybek na cesty
if (V14 == LOW) {
Cesta1L = Cesta2L = false;
} else {
Cesta3L = false;
}
if (V12 == LOW) {
Cesta2L = false;
} else {
Cesta1L = false;
}
// shozeni navestidel
if (!Cesta1L) {
digitalWrite(L1a, LOW);
digitalWrite(L1b, HIGH);
digitalWrite(L1c, LOW);
digitalWrite(L1d, LOW);
}
if (!Cesta2L) {
digitalWrite(L2a, LOW);
digitalWrite(L2b, HIGH);
digitalWrite(L2c, LOW);
digitalWrite(L2d, LOW);
}
// a tak dale
ve Tvych podminkach na odjezdy pak jde namisto
- Kód: Vybrat vše
if ((digitalRead(L)) &&(V1 = LOW) && (V2 = LOW)&& (V3 = HIGH)&& (V12 = HIGH) && (V14 = HIGH)&&(V15 = HIGH) &&(S13 = LOW) && (L1a = HIGH)){
psat
- Kód: Vybrat vše
if ((digitalRead(L)) && Cesta1L && Cesta1R && (V15 = HIGH) &&(S13 = LOW) && (L1a = HIGH)){
Dale, pokud by sis zavedl princip, ze odjezdova navestidla jsou 4 znakova, a obsazuji vzdy 4 po sobe nasledujici piny ... tak si muzes usetrit psani
- Kód: Vybrat vše
void cervena(int pin) {
digitalWrite(pin++, LOW);
digitalWrite(pin++, HIGH);
digitalWrite(pin++, LOW);
digitalWrite(pin++, LOW);
}
// shozeni celeho L2
cervena(L2a);
Analogicky pro nastaveni zelene/zlute na odjezdovku
Pak si myslim, ze pokud maji tlacitka Lx prepinat "odjezd / stuj" (odjezd samozrejme v zavislosti na vyhybkach), tak musis po zpracovani tlacitla Lx VZDY nejakou dobu (do uvolneni tlacitka) pockat - resp. tlacitko zcela ignorovat. Jinak se Ti pri prvnim pruchodu cyklem navestidlo nastavi (treba) na zelenou a pri bezprostredne nasledujicim pruchodu, zatimco jeste tlacitko nestihnes pustit se Ti prenastavi zpet na cervenou. Proto je lepsi necpat vsude primo digitalRead, ale udelat si nejakou cteci pomucku, ktera precte/vyignoruje a pak jen pouzivat vysledky.
Edit: pojd na to zalozit samostatne diskusni tema - mam takovy pocit, ze vysledny kod bude zajimat i dalsi a tohle diskusni vlakno melo byt spis "odkaznik".