klávesnice - key down(up) PICAXE

Software potřebné k práci s elektronikou

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
Persink163054
Příspěvky: 29
Registrován: 05 říj 2011, 02:00

klávesnice - key down(up) PICAXE

#1 Příspěvek od Persink163054 »

Dobrý den,

sestavil jsem si tuto specifickou klávesnici kterou zpracovávám následujícím kodem pro procesor PICAXE. Vybrané tlačítko pak odešle na seriovou linku text se znakem příslušné klávesy a to pak následně zpracovávám v Delphi7.

Problém který řeším, je jak upravit stávající kod, tak aby se na sériovou linku odeslal jen jeden text(znak). Tedy stlačím tlačítko, odešlu jeho text(znak) a i když jej stále držím, už se neodešle nic.


Pro další poslání je tedy nutné tlačítko uvolnit a zmáčknout nové.

Předem děkují za cenné rady.

zdrojový kod:
main: rem začatek programu

readadc A.1,b0 ; klávesnice připojena na vstup A.1 (pin 3)

select case b0 ; vybereme správné tlačítko a odešleme na seriovou linku

case > 250
serout 3,N9600, ("L")

case > 193
serout 3,N9600, ("1")

case > 154
serout 3,N9600, ("2")

case > 128
serout 3,N9600, ("3")

case > 110
serout 3,N9600, ("6")

case > 95
serout 3,N9600, ("5")

case > 85
serout 3,N9600, ("4")

case > 75
serout 3,N9600, ("LS")

case > 70
serout 3,N9600, ("PS")

case > 64
serout 3,N9600, ("7")

case > 59
serout 3,N9600, ("8")

case > 54
serout 3,N9600, ("9")

case > 51
serout 3,N9600, ("0")

case > 48
serout 3,N9600, ("P")


end select

low b.1 ; vypínání a zapínání LED, jako optická kontrola
pause 25 ; že došlo k naprogramování a PICAXE odesílá data

high b.1
pause 25
goto main ; návrat na začátek
Přílohy
jen klavesnice.GIF
schéma klávesnice
(7.32 KiB) Staženo 145 x
jen klavesnice.GIF
(7.32 KiB) Staženo 153 x

petrfilipi
Příspěvky: 2551
Registrován: 13 zář 2005, 02:00

#2 Příspěvek od petrfilipi »

Musíš tam mít příznak toho, že jsi data odeslal, tzn. po každém odeslání nastavit příznak do 1 a před odesíláním se ptát na to, zdali je tento příznak =0. A mazat ho tehdy, když není tlačítko stisknuté.

Petr

Uživatelský avatar
Persink163054
Příspěvky: 29
Registrován: 05 říj 2011, 02:00

#3 Příspěvek od Persink163054 »

Díky moc za radu. Vylepšil jsem to takto a funguje to. Odesílá se pouze jeden potřebný znak.

Moc díky.

Zdrojový kod:



main: rem začatek programu


readadc A.1,b0 ; klávesnice připojena na vstup A.1 (pin 3)
; proměnná b0 je stav tlačítek
select case b0 ; proměnná b1 je příznak stisknutí. Je-li b1=0
; je povoleno odeslání na ser.linku. Vzápětí se
case > 250 ; hodnota b1=1
if b1 = 0 then
serout 3,N9600, ("L")
let b1 = 1
end if

case > 193
if b1 = 0 then
serout 3,N9600, ("1")
let b1 = 1
end if

case > 154
if b1 = 0 then
serout 3,N9600, ("2")
let b1 = 1
end if

case > 128
if b1 = 0 then
serout 3,N9600, ("3")
let b1 = 1
end if

case > 110
if b1 = 0 then
serout 3,N9600, ("6")
let b1 = 1
end if

case > 95
if b1 = 0 then
serout 3,N9600, ("5")
let b1 = 1
end if

case > 85
if b1 = 0 then
serout 3,N9600, ("4")
let b1 = 1
end if

case > 75
if b1 = 0 then
serout 3,N9600, ("LS")
let b1 = 1
end if

case > 70
if b1 = 0 then
serout 3,N9600, ("PS")
let b1 = 1
end if

case > 64
if b1 = 0 then
serout 3,N9600, ("7")
let b1 = 1
end if

case > 59
if b1 = 0 then
serout 3,N9600, ("8")
let b1 = 1
end if

case > 54
if b1 = 0 then
serout 3,N9600, ("9")
let b1 = 1
end if

case > 51
if b1 = 0 then
serout 3,N9600, ("0")
let b1 = 1
end if

case > 48
if b1 = 0 then
serout 3,N9600, ("P")
let b1 = 1
end if
readadc A.1,b0 ; klávesnice připojena na vstup A.1 (pin 3)
case = 0 ; b0=0, nestisknuto žádné tlačítko
if b1 = 1 then ; bylo-li b1=1, změní se na b1=0 a počká se
; na stisk
let b1 = 0
end if
end select

low b.1 ; vypínání a zapínání LED, jako optická kontrola
pause 25 ; že došlo k naprogramování a PICAXE odesílá data

high b.1
pause 25
goto main ; návrat na začátek

petrfilipi
Příspěvky: 2551
Registrován: 13 zář 2005, 02:00

#4 Příspěvek od petrfilipi »

Super, gratuluji.
Další vylepšení by mohlo být řešení nějakou vysílací procedurou, do které by vstupoval kód stisknutého znaku. Abys to otrocky nemusel kopírovat pro každou hodnotu.
Pak bys mohl jak hodnoty z analogového vstupu, tak i výstupní kódy uložit do dvou polí. Porovnával bys v cyklu hodnotu z analogového vstupu s jedním polem a pak bys hned měl výsledek v druhém poli. Jde o to, že pak jednoduše můžeš rozšířit množství rozeznávaných hodnot, aniž bys musel měnit vlastní porovnávací proceduru.
Taky pozor na odskok kontaktu při spínání tlačítka.

Petr

Odpovědět

Zpět na „Software“