Jeden zákazník se na mě obrátil s dotazem, jak počítat pomocí procesoru Picaxe zvířata, která procházejí trubkou. Cituji z dotazu:
„Příklad: do trubky mi vejde postupně 7 zvířat (čidlo na začátku) a rozsvítí mi kontrolku obsazení trubky a až z trubky těchto 7 zvířat vyjde (na konci) tak světlo obsazení trubky zhasne a rozsvítí se mi jiné světlo, že prošla všechna zvířata.“
Program bude používat dva vstupy od čidel – začátek a konec trubky. Výstupem budou dvě LED – trubka obsazena a trubka volná. Hlavní smyčka programu bude dostatečně často testovat a vyhodnocovat oba vstupy čidel, předpokládejme, že bude stačit po 100ms. Snad nám skrz rouru nebudou běhat gepardi.
U obou čidel budeme testovat náběžnou hranu – v proměnné budeme uchovávat předchozí i současný stav čidla a pokud bude předchozí stav neaktivní a současný aktivní, detekovali jsme náběžnou hranu, tedy příchod nebo odchod zvířete. A aby byl program snadno modifikovatelný pro různá čidla, zavedeme symbol pro aktivní úroveň každého čidla samostatně. Další komentáře jsou přímo v programu.
Testovací zapojení bylo realizováno pomocí Picaxe-08M2, AXEboardu, nepájivého pole, dvou tlačítek a dvou AXEled
Program lze stáhnout zde StoZvirat.bas , nutno smazat příponu _.txt a ponechat pouze .bas
' ' Counting animals ' #picaxe 08m2 ' ' Pins ' symbol sen1pin=pin3 ' vstupni senzor symbol sen2pin=pin4 ' vystupni senzor symbol ledoccu=1 ' led obsazeno symbol ledfree=2 ' led volno ' ' Variables ' symbol sen1old=bit15 ' vstupni senzor predchozi stav symbol sen2old=bit14 ' vystupni senzor predchozi stav symbol sen1new=bit13 ' vstupni senzor soucasny stav symbol sen2new=bit12 ' vystupni senzor soucasny stav symbol animals=b27 ' pocet zvirat v trubce ' ' Constants ' symbol SEN1ACT=0 ' vstupni senzor aktivni uroven symbol SEN2ACT=0 ' vystupni senzor aktivni uroven symbol WTIME=100 ' doba cekani v ms ' ' Program ' Setup: pullup ON sen1old=sen1pin sen2old=sen2pin pause WTIME Main: do 'nacteme soucasny stav cidel sen1new=sen1pin sen2new=sen2pin 'testujeme nabeznou hranu vstupniho senzoru if sen1old<>SEN1ACT and sen1new=SEN1ACT then inc animals endif 'testujeme nabeznou hranu vystupniho senzoru if sen2old<>SEN1ACT and sen2new=SEN1ACT then if animals>0 then dec animals endif endif 'zkopirujeme soucasny stav cidel do promennych predchoziho stavu sen1old=sen1new sen2old=sen2new 'rozsvitime LED podle poctu zvirat v trubce if animals>0 then high ledoccu low ledfree else low ledoccu high ledfree endif 'prodleva mezi testovanim pause WTIME loop