casomiera na smykacku
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
casomiera na smykacku
Ahojte, prosim o pomoc, som v arduinu novy a chcem vytvorit casomieru na smykacku, cokolvek som nasiel neriesi zakladny problem a to ze na smykacku moze vojst dalsie dieta kym prve este neukoncilo "jazdu" a teda nema ukoncene meranie casu.
napadly mi teda dve alternativy a to bud sa spusti cas ktory bezi v cykle a teda pri vstupe na smykacku (aktivacia btn1) prvym dietatom sa ulozi do premennej n cas v ktorom voslo, cize btn1 pressed = nejaky cas t
ked sa stlaci tlacidlo btn 2 (vystup zo smykacky) ulozi sa tento cas do t1
neskor sa odcita a dieta s indexom n ma vysledny cas.
Lenze ak vojde dalsie dieta kym prve nevyslo potrebujem aby aj jemu pocitalo cas.
tak mi napadlo ze by vzdy pri stlaceni btn1 (vstup na smykacku) sa zaznamenala hodnota aktualneho casu a pri kazdom sa zmenil index dieta cize n+1
tak isto aj pri stlaceni btn2 by sa zaznamenavala hodnota a bolo by to t+1 vzdy by sa to vyminusilo a zobrazilo (zatial staci vystup print na monitore portu) cize nx - tx
lenze toto neviem ako naprogramovat
ale mam aj inu alternativu ktoru neviem naprogramovat a to je vzdy pri stlaceni btn1 by sa vytvoril novy task ktory by cakal na stlacenie btn2 v tomto tasku by bola samostatna funkcia na pocitanie casu a zobrazenie. po stlaceni btn 2 by zobrazilo cas a ukoncilo task zatial co by dalsie pripadne tasky bezali
to uz vobec neviem ako naprogramovat.
viete mi prosim niekto pomoct ale ako uplnemu zaciatocnikovi.
Rad samozrejme aj poslem nieco na pivo/kavu a podobne lebo uz som precital vsetko mozne a bud nerozumiem alebo to neni to co hladam.
dakujem velmi pekne
jozo
napadly mi teda dve alternativy a to bud sa spusti cas ktory bezi v cykle a teda pri vstupe na smykacku (aktivacia btn1) prvym dietatom sa ulozi do premennej n cas v ktorom voslo, cize btn1 pressed = nejaky cas t
ked sa stlaci tlacidlo btn 2 (vystup zo smykacky) ulozi sa tento cas do t1
neskor sa odcita a dieta s indexom n ma vysledny cas.
Lenze ak vojde dalsie dieta kym prve nevyslo potrebujem aby aj jemu pocitalo cas.
tak mi napadlo ze by vzdy pri stlaceni btn1 (vstup na smykacku) sa zaznamenala hodnota aktualneho casu a pri kazdom sa zmenil index dieta cize n+1
tak isto aj pri stlaceni btn2 by sa zaznamenavala hodnota a bolo by to t+1 vzdy by sa to vyminusilo a zobrazilo (zatial staci vystup print na monitore portu) cize nx - tx
lenze toto neviem ako naprogramovat
ale mam aj inu alternativu ktoru neviem naprogramovat a to je vzdy pri stlaceni btn1 by sa vytvoril novy task ktory by cakal na stlacenie btn2 v tomto tasku by bola samostatna funkcia na pocitanie casu a zobrazenie. po stlaceni btn 2 by zobrazilo cas a ukoncilo task zatial co by dalsie pripadne tasky bezali
to uz vobec neviem ako naprogramovat.
viete mi prosim niekto pomoct ale ako uplnemu zaciatocnikovi.
Rad samozrejme aj poslem nieco na pivo/kavu a podobne lebo uz som precital vsetko mozne a bud nerozumiem alebo to neni to co hladam.
dakujem velmi pekne
jozo
Re: casomiera na smykacku
Tady je takový rychlý nástřel kódu.
Časy startů a v cíli jsou v milisekundách od zapnutí Arduina.
Rozdíl časů v cíli je také v milisekundách.
Není tam ošetřeno přetečení funkce millis() po 50 dnech provozu.
Program je nastaven tak, že maximální počet dětí, které mohou být v jednom okamžiku někde na trati mezi startem a cílem je 10.
Časy startů a v cíli jsou v milisekundách od zapnutí Arduina.
Rozdíl časů v cíli je také v milisekundách.
Není tam ošetřeno přetečení funkce millis() po 50 dnech provozu.
Program je nastaven tak, že maximální počet dětí, které mohou být v jednom okamžiku někde na trati mezi startem a cílem je 10.
Kód: Vybrat vše
#define pin_start 2 // startovaci tlacitko
#define pin_stop 3 // stopovaci tlacitko
unsigned long pole_startu[10]; // maximalni teoreticky pocet deti na skluzavce
byte index_start; // pocet stisku startovaciho tlacitka
byte index_stop; // pocet stisku stopovaciho tlacitka
boolean minuly_stav_start; // znacka pro zjisteni, ze prave doslo ke stisku tlacitka start
boolean minuly_stav_stop; // znacka pro zjisteni, ze prave doslo ke stisku tlacitka stop
void setup(void)
{
pinMode(pin_start,INPUT_PULLUP); // nastaveni smeru pinu s tlacitky
pinMode(pin_stop,INPUT_PULLUP);
Serial.begin(9600);
minuly_stav_start = true; // znacky, ze jsou obe tlacitka rozepnuta
minuly_stav_stop = true;
index_start = 0; // poradove cislo ditete na startu
index_stop = 0; // poradove cislo ditete v cili
}
void loop(void)
{
if (digitalRead(pin_start) == LOW and minuly_stav_start == true) // prave doslo ke stisku tlacitka start
{
index_start ++; // pocitani deti na startu
if( index_start == 10) index_start = 1; // po 10 detech se pocitadlo nuluje
pole_startu[index_start] = millis(); // aktualni cas startu ulozit do pole
Serial.print("Dite "); // vypis informaci o startu do serioveho monitoru
Serial.print(index_start);
Serial.print(" proslo startem v case:");
Serial.println(pole_startu[index_start]);
minuly_stav_start = false; // tlacitko start aktualne stisknute
delay(20); // debounce startovaciho tlacitka
}
if (digitalRead(pin_start) == HIGH) // startovaci tlacitko je uvolneno, jeho dalsi stisk znamena dalsi dite
{
minuly_stav_start = true;
}
if (digitalRead(pin_stop) == LOW and minuly_stav_stop == true) // prave doslo ke stisku tlacitka stop
{
index_stop ++; // pocitani deti v cili
if( index_stop == 10) index_stop = 1; // po 10 detech se pocitadlo nuluje
unsigned long cas_v_cili = millis(); // cas v cili do promenne
Serial.print("Dite "); // vypis informaci o cili do serioveho monitoru
Serial.print(index_stop);
Serial.print(" proslo cilem v case:");
Serial.print(cas_v_cili);
Serial.print(". Rozdil casu je: ");
Serial.println(cas_v_cili - pole_startu[index_stop] );
minuly_stav_stop = false; // tlacitko STOP je aktualne sepnute
delay(20); // debounce stopovaciho tlacitka
}
if (digitalRead(pin_stop) == HIGH) // stopovaci tlacitko je uvolneno, jeho dalsi stisk znamena dalsi dite v cili
{
minuly_stav_stop = true;
}
}
Re: casomiera na smykacku
Wau ty si uplne geanialny. Veeelmi pekne ďakujem.
Skusim to pripadne aj upraviť na ir cidla. Ale mam sa od coho odrazit. Urcite dlzim minimalne pivo
Skusim to pripadne aj upraviť na ir cidla. Ale mam sa od coho odrazit. Urcite dlzim minimalne pivo
Re: casomiera na smykacku
Ještě jedna verze programu.
Tentokrát s využitím interruptu (tlačítka musí být na pinech D2 a D3).
Tohle je trochu přehlednější, ale zase se tam trochu složitěji ošetřují zákmity tlačítek.
Tentokrát s využitím interruptu (tlačítka musí být na pinech D2 a D3).
Tohle je trochu přehlednější, ale zase se tam trochu složitěji ošetřují zákmity tlačítek.
Kód: Vybrat vše
// verze programu s vyuzitim preruseni (interruptu)
#define pin_start 2 // startovaci tlacitko
#define pin_stop 3 // stopovaci tlacitko
volatile unsigned long pole_startu[10]; // maximalni teoreticky pocet deti na skluzavce
volatile byte index_start = 0; // pocet stisku startovaciho tlacitka
volatile byte index_stop = 0; // pocet stisku stopovaciho tlacitka
volatile unsigned long minuly_cas_start_interruptu = 0; // kvuli odruseni zakmitu tlacitka START pri interruptu
volatile unsigned long minuly_cas_stop_interruptu = 0; // kvuli odruseni zakmitu tlacitka STOP pri interruptu
void setup(void)
{
pinMode(pin_start,INPUT_PULLUP); // nastaveni smeru pinu s tlacitky
pinMode(pin_stop,INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(pin_start), fce_START, FALLING );
attachInterrupt(digitalPinToInterrupt(pin_stop) , fce_STOP , FALLING );
Serial.begin(9600);
}
// ------------- podprogram pro stisk tlacitka START ---------
void fce_START(void)
{
// tahle podminka je kvuli odruseni zakmitu tlacitka pri rychlem snimani interruptu
if (millis() - minuly_cas_start_interruptu > 500 ) // kdyz je mezi nasledujicimi stisky tlacitka kratsi interval nez 0.5s, preruseni se ignoruje
{ // (nepredpoklada se, ze by deti vyjizdely v kratsich intervalech, nez 0.5s)
minuly_cas_start_interruptu = millis();
index_start ++; // pocitani deti na startu
if( index_start == 10) index_start = 1; // po 10 detech se pocitadlo nuluje
pole_startu[index_start] = millis(); // aktualni cas startu ulozit do pole
Serial.print("Dite "); // vypis informaci o startu do serioveho monitoru
Serial.print(index_start);
Serial.print(" proslo startem v case:");
Serial.println(pole_startu[index_start]);
}
}
// ------------- podprogram pro stisk tlacitka STOP ---------
void fce_STOP(void)
{
// tahle podminka je kvuli odruseni zakmitu tlacitka pri rychlem snimani interruptu
if (millis() - minuly_cas_stop_interruptu > 30 ) // kdyz je mezi nasledujicimi stisky tlacitka kratsi interval nez 30ms, preruseni se ignoruje
{ // (v cili uz by se mohlo stat, ze deti dojedou hodne brzo po sobe)
minuly_cas_stop_interruptu = millis();
index_stop ++; // pocitani deti v cili
if( index_stop == 10) index_stop = 1; // po 10 detech se pocitadlo nuluje
unsigned long cas_v_cili = millis(); // cas v cili do promenne
Serial.print("Dite "); // vypis informaci o cili do serioveho monitoru
Serial.print(index_stop);
Serial.print(" proslo cilem v case:");
Serial.print(cas_v_cili);
Serial.print(". Rozdil casu je: ");
Serial.println(cas_v_cili - pole_startu[index_stop] );
}
}
void loop(void)
{
}
Re: casomiera na smykacku
si super dakujem.
ja tam chcem pripojit infra snimanie, takze tam asi zakmit musim osetrit.
inak na tu smykacku vojdu max traja, mooozno 4, viac by uz asi bol vlacik
ja tam chcem pripojit infra snimanie, takze tam asi zakmit musim osetrit.
inak na tu smykacku vojdu max traja, mooozno 4, viac by uz asi bol vlacik
Re: casomiera na smykacku
Este sa opytam, mozno uplne trivialnu otazku ale nechcem odpalit arduino :/
spinanie pinu je je len voci zemi alebo je tam lepsie pouzit schemu z debounce a teda s 10k pripojenym na zem a spinanym voci 5V?
musim vymysliet nieco lepsie ako IR snimac lebo ten bere naozaj velmi casto vstup (skusal som len voci GND) cim pri stope urobi ze dalsie dieto uz doslo aj ked este neslo:D
ale asi tam dam nulovanie ak sa nespusti do 2min start vynuluje vzdy index dietata.
Akurat skusam dopisat este jednoduche svietenie ledky, ak je niekto na smykacke (spustil sa start) tak bude svietit cervena ak nie tak zelena (ak po spusteni sa ukoncil stopom. Predpokladam, ze to len pridam pin HIGH pre cervenu a low pre zelenu na zaciatok po starte a na uplny koniec, tzn ide loop naspat tak pridam pin low pre cervenu a high pre zelenu.
spinanie pinu je je len voci zemi alebo je tam lepsie pouzit schemu z debounce a teda s 10k pripojenym na zem a spinanym voci 5V?
musim vymysliet nieco lepsie ako IR snimac lebo ten bere naozaj velmi casto vstup (skusal som len voci GND) cim pri stope urobi ze dalsie dieto uz doslo aj ked este neslo:D
ale asi tam dam nulovanie ak sa nespusti do 2min start vynuluje vzdy index dietata.
Akurat skusam dopisat este jednoduche svietenie ledky, ak je niekto na smykacke (spustil sa start) tak bude svietit cervena ak nie tak zelena (ak po spusteni sa ukoncil stopom. Predpokladam, ze to len pridam pin HIGH pre cervenu a low pre zelenu na zaciatok po starte a na uplny koniec, tzn ide loop naspat tak pridam pin low pre cervenu a high pre zelenu.
Re: casomiera na smykacku
U pinu si zadavas, jestli ma byt LOW (cili 0) nebo HIGH (cili 5V). proud dokaze prohnat stejny obema stavy, takze proti zemi, nebo proti plusu je to celkem jedno.
Pro cteni pinu zase mas moznost cist jak stav, kdy je nahore, tak stav kdy je dole.
Casto se pouziva toho, ze jdou zapnout vnitrni pullupy (INPUT_PULLUP misto INPUT) a pak je vstup tazeny prez nejakych 30k-50k nahoru k 5V a zvenku staci dat spinac proti zemi. Pokud das jen INPUT a zvenku nejakych 30-50k proti zemi, tak muzes snimat tlacitkem proti napajeni.
Az na ten pull-up, kdy uvnitr je jen k 5V a k zemi musis dat vnejsi, to je vlastne symetricke.
Takze vesele spinam proti cemu mi to zrovna vyhovuje konstrukcne lip, klidne kazdy pin jinak, jen pak v programu musim vedet, co znamena HIGH a co LOW (tedy co je sepnuto a co rozepnuto).
Jako pullup/pulldown muzes dat asi tak cokoli od 1k do 200k a bude to fungovat bez problemu pro cteni. Rozsvecet jednu ledku prez takovych 330-500 Ohmu zase proti cemu chces, pokud bys chtel vic ledek, nebo neco vykonejsiho, tak radsi prez nejaky tranzistor a pokud extra silne, tak rele prez tranzistor, nebo nejaky silovy modul.
Svitit diodou (samozrejme prez odpor) je tak jednoduche, jak rikas.
Pro cteni pinu zase mas moznost cist jak stav, kdy je nahore, tak stav kdy je dole.
Casto se pouziva toho, ze jdou zapnout vnitrni pullupy (INPUT_PULLUP misto INPUT) a pak je vstup tazeny prez nejakych 30k-50k nahoru k 5V a zvenku staci dat spinac proti zemi. Pokud das jen INPUT a zvenku nejakych 30-50k proti zemi, tak muzes snimat tlacitkem proti napajeni.
Az na ten pull-up, kdy uvnitr je jen k 5V a k zemi musis dat vnejsi, to je vlastne symetricke.
Takze vesele spinam proti cemu mi to zrovna vyhovuje konstrukcne lip, klidne kazdy pin jinak, jen pak v programu musim vedet, co znamena HIGH a co LOW (tedy co je sepnuto a co rozepnuto).
Jako pullup/pulldown muzes dat asi tak cokoli od 1k do 200k a bude to fungovat bez problemu pro cteni. Rozsvecet jednu ledku prez takovych 330-500 Ohmu zase proti cemu chces, pokud bys chtel vic ledek, nebo neco vykonejsiho, tak radsi prez nejaky tranzistor a pokud extra silne, tak rele prez tranzistor, nebo nejaky silovy modul.
Svitit diodou (samozrejme prez odpor) je tak jednoduche, jak rikas.
Re: casomiera na smykacku
Ahojte, chcel by som velmi pekne poprosit este o pomoc, nakolko sa chybou nenatiahli kable k infra branam, tak by som to chcel aspon na skusku spravit cez wifi, len rozmyslam nad opozdenim, ci by nebolo jednoduchsie, ze by obe arduina (nna zaciatku aj na konci smykacky) boli pripojene cez wifi a bud si synchronizovali RTC a pri kazdom prejdeni cez barieru by mi odoslalo aktualny cas prerusenia niekam do databazy a az v databaze by prebehol vypocet casu.
viete mi s tym nejako pomoct?
alebo mi napada aj moznost len prepojit cez wifi obe arduina a v jednom z nich by prebiehal vypocet, len si neviem predstavit co by robilo oneskorenie pri pouziti wifi.
Vedel by mi s tym niekto prosim pomoct? chcel by som to dokoncit do mikulasa.
dakujem velmi pekne
viete mi s tym nejako pomoct?
alebo mi napada aj moznost len prepojit cez wifi obe arduina a v jednom z nich by prebiehal vypocet, len si neviem predstavit co by robilo oneskorenie pri pouziti wifi.
Vedel by mi s tym niekto prosim pomoct? chcel by som to dokoncit do mikulasa.
dakujem velmi pekne
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 11 hostů