Gestion de clavier matricé: V4

jojojo

Senior Member
Pour une fois, j'ai tenté de faire un code potable.
Plus compact et adaptable.
Il fonctionne avec ça:
Clavier_matricé_V2_V4.jpg

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
C'est l'ami Besqueut qui va être content: Même pas un goto ! :)
 
Top