Sto zvířat

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

stozvirat01

Testovací zapojení Sto zvířat

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