Pour une fois, j'ai tenté de faire un code potable.
Plus compact et adaptable.
Il fonctionne avec ça:
Le code:
C'est l'ami Besqueut qui va être content: Même pas un goto !
Plus compact et adaptable.
Il fonctionne avec ça:
Le code:
Code:
'Clavier matricé V4
'Lignes 1 à 4 en entrée (C.0 C.3)
'Colonnes 1 à 3 en sortie (B.3 B.5)
'Rappel des numéros de ports:
'0 à 7 pour B
'8 à 14 pour C (utile, ici, pour ScruteClav). Merci, Michel.
'Code deux chiffres plus validation (* ou #)
'G.TREELS 12/2018
'dernière version du 05/03/2019
'ATTENTION: Les modules Radiometrix TX3H-869.50-10 du lot RI021804MU sont pourris (Le FET du PA dégage au bout d'une dizaines d'envois)..
#picaxe 14M2
Let dirsC=%010000' C.0 A DROITE !
Let dirsB=%111111' B.0 A DROITE ! (andouille que je suis !)
Symbol EnTX=C.4
Symbol DataTX=b.1
Symbol BUZ=B.2
Symbol Valeur=b5
Symbol Lig=b4
Symbol Col=b3
Do
Gosub ScruteClav
If Valeur=10 Or Valeur=12 Then 'Validation du code, pour envoi
If b0<1 Or b1<1 Then 'si code moins de deux chiffres
Gosub Erreur 'erreur
b0=0
b1=0
Valeur=0
Else
Gosub Envoi 'Transmission code
End If
Else
If valeur>0 Then 'Positionnement
If b0=0 Then 'deux chiffres
b0=Valeur 'du code
Else
b1=Valeur
End If
End If
End if
Valeur=0
Loop
ScruteClav:
Low Col
For col=3 To 5 'Utilisation des N° physiques
High Col 'des ports
Pause 10
If pinC.0=1 then 'B.3 à B.5
Lig=4 'et determination N° ligne
Exit
Elseif PinC.1=1 then
Lig=3
Exit
Elseif PinC.2=1 Then
Lig=2
Exit
Elseif PinC.3=1 Then
Lig=1
Exit
Else
Low Col
Pause 10
Lig=0
End If
Next Col
If PinC.0=1 Then
Do
Loop Until PinC.0=0
High BUZ 'Attente relache
Pause 100
Low BUZ
End If
If PINC.1=1 Then
Do
Loop Until PinC.1=0
High BUZ
Pause 100
Low BUZ
End If
If PinC.2=1 Then
Do
Loop Until PinC.2=0
High BUZ
Pause 100
Low BUZ
End if
If PinC.3=1 Then
Do
Loop Until PinC.3=0
High BUZ
Pause 100
Low BUZ
End if
Low Col
Pause 10
If Col=5 Then
Col=Col-4
End If
If Col=4 Then
Col=Col-2
End If
Select Case Lig 'Valeurs fst lignes-colonnes
Case 1
If Col=1 Then
Valeur=1
Elseif Col=2 Then
Valeur=2
Elseif Col=3 Then
Valeur=3
End If
Case 2
If Col=1 Then
Valeur=4
Elseif Col=2 Then
Valeur=5
Elseif Col=3 Then
Valeur=6
End If
Case 3
If Col=1 Then
Valeur=7
Elseif Col=2 Then
Valeur=8
Elseif Col=3 Then
Valeur=9
End If
Case 4
If Col=1 Then
Valeur=10
Elseif Col=2 Then
Valeur=11
Elseif Col=3 Then
Valeur=12
Else
Valeur=0
End If
End select
'debug
Return
Envoi: 'Ici, en liaison HF
High Buz
pause 100 'mais, on en fait ce que l'on veut.
Low Buz
High ENTX
for b24=1 to 20 'Init TX cf doc Radiometrix
High DATATX
pause 10
Low DATATX
Pause 10
next b24
For b24=1 to 20 'ou moins, selon environnement
RFout DATATX,(1,1,1,1,1,1,b0,b1) 'Seul deux octets significatif
Next b24
Low ENTX
Valeur=0
b0=0
b1=0
Return
Erreur:
For b24=1 to 5
High BUZ
pause 100
Low BUZ
Pause 100
Next b24
Valeur=0
b0=0
b1=0
Return