Comparaison de chiffre binaire et agir en fonction

Signaler
Messages postés
63
Date d'inscription
mardi 13 mai 2008
Statut
Membre
Dernière intervention
22 juin 2011
-
Messages postés
63
Date d'inscription
mardi 13 mai 2008
Statut
Membre
Dernière intervention
22 juin 2011
-
Bonsoir à tous,

J'ai realisé un prog qui permet de lire et de convertir la valeur du port de décimale en binaire (bit de donnés de DO à D7) toutes les 500ms.
J'effectue une première lecture et j'enregistre sa valeur (en binaire) puis 500ms plus tard je relis la valeur du port que j'enregistre également puis je fais une comparaison entre ces deux valeurs et ainsi de suite.

Mon problème est que je voudrais comparer ces deux valeurs binaires, de façon à "détecter" le ou les bits qui aurait changés pendant les 500ms et agir en fonction mais je ne sais pas comment m'y prendre ??

Par exemple  :
11111110  #(different de) 11111111
alors le bit D0 a été modifié 
Est-ce possible "d'adresser" chaque bit ci-dessus dans une variable comme par exemple le bit DO a, le bit D1 b....puis d'effectuer ensuite une comparaison de ces variables afin de retrouver quel bit a bougé ?

J'espère que ce que je raconte est compréhensible

Merci.

6 réponses

Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
14
Salut,

Regarde ce petit exemple ^^ :

Private Sub Command1_Click()


Dim sSource As String
Dim sCompare As String
Dim iboucle As Integer


sSource = "11111111"
sCompare = "11111110"


For iboucle = 1 To Len(Text1.Text)


    ' test compare
     If Mid$(sSource, iboucle, 1) <> Mid$(sCompare, iboucle, 1) Then
        MsgBox "Changement de valeur à la position : " & iboucle
        Exit For
     End If


Next iboucle


 


End Sub


A+
Exploreur

 Linux a un noyau, Windows un pépin
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
14
Re,

Enlève le : Exit For, comme çà tu parcoures toutes la chaine ^^

A+
Exploreur

 Linux a un noyau, Windows un pépin
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Dim a As Long, b As Long

LECTURE DANS a SANS CONVERSION STRING
ensuite idem dans b

Connaitre les bits différents:
diff = a XOR b

diff aura ses bits à 1 pour tous ceux différents de a et b.

Je n'ai aucune idée de l'existence du XOR en VB mais j'espère que si.

ciao...
BruNews, MVP VC++
Messages postés
27
Date d'inscription
mardi 11 mars 2008
Statut
Membre
Dernière intervention
6 juin 2008

Salut Exploreur,

L'exemple que tu m'a fournit est vraiment ce que je voulais et je t'en remercie fortement,mais un autre problème se pose j'aimerais savoir s'il serait possible de "detecter" seulement un passage de 0 à 1 et de laisser de côté le passage de 1 à 0 ou inversement ?

Par exemple :

00000000 -> 00000001 Msgbox "le bit DO à été modifié" mais lorsque
00000001 -> 00000000 rien ne se passe ou inversement

Le but serait en fait de detecter seulement les fronts montant ou descendant du changement de bit.

Est ce que tu aurais une idée sur la façon dont je peut m'y prendre ?
Merci.
Messages postés
63
Date d'inscription
mardi 13 mai 2008
Statut
Membre
Dernière intervention
22 juin 2011
3
Salut Exploreur,

Je voulais savoir s'il serait possible de "détecter" la valeur du bit lors du changement de valeur à la position x. (par exemple le bit est à la valeur 0 ou 1) et agir en fonction.

Car mon problème est que je modifie cette valeur à l'aide d'un bouton poussoir, lorsque que j'appuie sur le bouton il y a 1 changement de bit (par ex bit n°1 passe de 1 à 0 et reste a zéro tant que je reste appuyé) et lorsque je relache il y a un deuxième changement (le passage du même bit de 0 à 1 qui revient à son état initial), mais je voudrais que mon prog ne voit qu'un seul changement et non deux mais je ne sais pas comment m'y prendre.

Est- ce quelqu'un aurait une idée ??

Merci d'avance.
Messages postés
63
Date d'inscription
mardi 13 mai 2008
Statut
Membre
Dernière intervention
22 juin 2011
3
Re salut,

Voila en fait ce que je voudrais mais je ne sais pas comment l'écrire : 
Par exemple :

Comparaison des deux valeurs binaires

J'appuie sur le bouton poussoir :

Ssource = 11111111
Scompare = 11111110

Alors changement à la position 8
Le bit N°8 est maintenant à la valeur 0 alors action  (tant que je suis appuyé sur le bouton)

Je relache le bouton poussoir

Ssource = 11111111
Scompare = 11111111

Alors changement à la position 8
Le bit N°8 est maintenant revenu à la valeur 1 et la je ne fais rien

Est-ce que quelqu'un aurait une idée svp ?
Merci d'avance
Jack.