Stránka 3 z 3

Re: Arduino - jednoduché aplikace pro malá kolejiště.

PříspěvekNapsal: pon 11 čer, 2018 7:38 am
od fulda
Kajinek11 píše:Díky, ano to mi nedošlo. Spínače polohy výhybek jsou jasné. Tam musím dát např: V1==HIGH.

Poradím ti jednu vychytávku pro nás programátorské amatéry. Namísto "if (a==3) .." piš "if (3==a) ..". Je to taková prasárna, která ma za následek to, že pokud se uklepneš a napíšeš "if (3=a) ..", tak ti to překladač vyhodí jako chybu že do konstanty nelze přiřadit proměnnou.

Re: Arduino - jednoduché aplikace pro malá kolejiště.

PříspěvekNapsal: pon 11 čer, 2018 7:43 am
od belgarat
Kajinek11 píše:To znamená, že za každé tlačítko musím tedy dát odpor 45k Ohm? Pokud nechci připojit odpory a chci použít interní tak musím tlačítka společně připojit na GND? Chápu to dobře?

Omlouvam se, jsem elektro-lama. Toliko vim, ze nozicka nema "zustat ve vzduchu" (rozpojene tlacitko, noha nespojena nikam). V zapojenich napr. Fuldy se pouzivaji odpory 47k, 22k. Arduino ma interni odpory proti VCC ("pull up"), pak ale pouzij "pinMode(xxx, INPUT_PULLUP).

Současně by měla být zmáčknutá maximálně 2.
Může nastat více stavů najednou. Ale neměli by se navzájem ovlivňovat. Zkusím to popsat.

Rozmysli, zda "mela by byt" plati vzdy, napr. v pripade decek, co se o panel budou tahat (jestli je to Tvuj pripad). Na krouzku mi dokazali najednou zmacknout tlacitek 6 a vubec nechapu jak se jim tam vlezly ruce. A zda se takove stavy "musi resit" nebo holt muzou na navestidlech problikavat ruzne svetylka pripadne se prehazovat vyhybky.

Vzhledem k mnozstvi podminek budu kod prolezat az podle casu / v noci / ...

Re: Arduino - jednoduché aplikace pro malá kolejiště.

PříspěvekNapsal: pon 11 čer, 2018 8:11 am
od sidlo
Povídání o Arduinu a tlačítkách je tady https://www.arduino.cc/en/Tutorial/Button

Snímací pin Arduina musí být přes odpor připojen buď na zem nebo +5V odporem 10k - 22k - 47k, na hodnotě moc nezáleží.
Obrázek

Výše uvedený příklad je velmi triviální. V aplikaci bychom měli ještě řešit zákmity, jako třeba tady https://www.arduino.cc/en/Tutorial/Debounce

Re: Arduino - jednoduché aplikace pro malá kolejiště.

PříspěvekNapsal: pon 11 čer, 2018 8:15 am
od sidlo
fulda píše:
Kajinek11 píše:Díky, ano to mi nedošlo. Spínače polohy výhybek jsou jasné. Tam musím dát např: V1==HIGH.

Poradím ti jednu vychytávku pro nás programátorské amatéry. Namísto "if (a==3) .." piš "if (3==a) ..". Je to taková prasárna, která ma za následek to, že pokud se uklepneš a napíšeš "if (3=a) ..", tak ti to překladač vyhodí jako chybu že do konstanty nelze přiřadit proměnnou.


IDE Arduino - okno Vlastnosti se dá zapnout volba Zobrazit více informací výstupu během: kompilace a překladač potom sám upozorňuje na místa ke se použilo přiřazení a pravděpodobně by tam mělo být porovnání.

Re: Arduino - jednoduché aplikace pro malá kolejiště.

PříspěvekNapsal: pon 11 čer, 2018 8:30 am
od Kajinek11
Počkej, u Fuldy teda odpory 47k, nebo 22k?

Ano děti mám, vím co dovedou. Ale s tím se nedá nic dělat. Pokud zmáčknou všechna tlačítka na Arduinu, tak nevím co to udělá, ale nestane si nic jiného, než se se problikají návěstidla a zůstane tam nějaký režim. Mohu do programu vložit kód, který při současném zmáčknutí vícero tlačítek neudělá nic. Funkčně se budou mačkat jen dvě tlačítka najednou Po (posun) + příslušné návěstidlo. Výhybky před Arduino ovládané nejsou, takže to je v pohodě. Zatím děkuju za pomoc a moc ocením když se na to podíváš hlouběji. Budu totiž ještě kupovat druhé Arduino Mega a programovat skryťák.

Re: Arduino - jednoduché aplikace pro malá kolejiště.

PříspěvekNapsal: pon 11 čer, 2018 8:58 am
od belgarat
Kajinek11 píše:Počkej, u Fuldy teda odpory 47k, nebo 22k?

Je to dost jedno, cokoliv kde proud neprekroci povoleny na portu (a pripadne soucet proudu uvolnenych tlacitek neprekroci celkovy povoleny proud). Ja pouzivam 47k, ale od zapojeni jsou zde jini ;) ja se citim "na vysi" v sw.

Kajinek11 píše: Mohu do programu vložit kód, který při současném zmáčknutí vícero tlačítek neudělá nic. Funkčně se budou mačkat jen dvě tlačítka najednou Po (posun) + příslušné návěstidlo.

"Neresit" je Tvoje volba, a veci to obvykle zjednodusi

Re: Arduino - jednoduché aplikace pro malá kolejiště.

PříspěvekNapsal: pon 11 čer, 2018 10:31 am
od fulda
Kajinek11 píše:Počkej, u Fuldy teda odpory 47k, nebo 22k?

Jestli je to otázka mna mne, tak odpovím, že čím menší hodnota, tím větší odolnost proti rušení, ale zároveň větší spotřeba a větší proudová zátěž pro tlačítko.
Já používám 10k, protože na kolejišti je rušení poměrně velké. Ale je to empirická hodnota.

Re: Arduino - jednoduché aplikace pro malá kolejiště.

PříspěvekNapsal: pon 11 čer, 2018 11:22 am
od hopeter
Skoro všude v příkladech tlačítka je použitý 10k. Používám taky 10k co jsem měl v setu arduina a v pohodě. Když jsem jednou zapoměl odpor k tlačítku zapojit , dělalo si to co chtělo... :wink:

Re: Arduino - jednoduché aplikace pro malá kolejiště.

PříspěvekNapsal: pon 11 čer, 2018 11:55 am
od Kajinek11
Ok odpory k tlačítkům vyřešeny. 10k mám doma skladem. Dám je tam..

Re: Arduino - jednoduché aplikace pro malá kolejiště.

PříspěvekNapsal: úte 12 čer, 2018 5:59 pm
od look23
sidlo píše:Povídání o Arduinu a tlačítkách je tady https://www.arduino.cc/en/Tutorial/Button

Snímací pin Arduina musí být přes odpor připojen buď na zem nebo +5V odporem 10k - 22k - 47k, na hodnotě moc nezáleží.
https://www.arduino.cc/en/uploads/Tutorial/button_schem.png

Výše uvedený příklad je velmi triviální. V aplikaci bychom měli ještě řešit zákmity, jako třeba tady https://www.arduino.cc/en/Tutorial/Debounce


Já používám na tlačítka analogy. Šetří to digitální vstupy a navíc můžu přes analogRead() volit jemnost stisku tlačítka.
Podmínkou je rychlý proces co čte tlačítka. Na analogu nejdou vyvolávat přerušení, to je tak jediná nevýhoda.
https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/

Re: Arduino - jednoduché aplikace pro malá kolejiště.

PříspěvekNapsal: úte 12 čer, 2018 7:11 pm
od belgarat
look23 píše:Podmínkou je rychlý proces co čte tlačítka. Na analogu nejdou vyvolávat přerušení, to je tak jediná nevýhoda.
https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/


Neni to tak uplne pravda, muzes prepnout AD prevodnik, aby udelal preruseni ve chvili, kdy nameri. Prerusi, ty vezmes data, a on pak rovnou meri dal.

Re: Arduino - jednoduché aplikace pro malá kolejiště.

PříspěvekNapsal: úte 12 čer, 2018 10:15 pm
od look23
belgarat píše:
look23 píše:Podmínkou je rychlý proces co čte tlačítka. Na analogu nejdou vyvolávat přerušení, to je tak jediná nevýhoda.
https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/


Neni to tak uplne pravda, muzes prepnout AD prevodnik, aby udelal preruseni ve chvili, kdy nameri. Prerusi, ty vezmes data, a on pak rovnou meri dal.


Mohl bys uvést příklad. Třeba se mi rozšíří obzory. Ještě nikdy jsem to nepotřeboval, ale kdo ví, třeba se to někdy bude hodit. Díky

Re: Arduino - jednoduché aplikace pro malá kolejiště.

PříspěvekNapsal: úte 12 čer, 2018 10:35 pm
od belgarat
look23 píše:
Mohl bys uvést příklad. Třeba se mi rozšíří obzory. Ještě nikdy jsem to nepotřeboval, ale kdo ví, třeba se to někdy bude hodit. Díky


http://yaab-arduino.blogspot.com/2015/0 ... input.html
https://github.com/svatoun/Reflexshield ... d.ino#L254

Re: Arduino - jednoduché aplikace pro malá kolejiště.

PříspěvekNapsal: čtv 14 čer, 2018 3:14 pm
od belgarat
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 :-D) 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".