web-dev-qa-db-fra.com

Arduino HIGH LOW

J'ai un Arduino et je me demande exactement ce que signifient HAUT et BAS en ce qui concerne les valeurs réelles ... Sont-ils des entiers signés? Des ints non signés? Caractères non signés ??? Quelles sont leurs valeurs? Je suppose que HIGH et LOW sont probablement des entiers non signés avec tous les bits définis respectivement à 1 et 0, mais je ne suis pas sûr. J'aimerais pouvoir effectuer des opérations au niveau du bit en utilisant HIGH et LOW ou transmettre des valeurs autres que HIGH ou LOW à digitalWrite. De plus, comment pourrais-je convertir un entier en HAUT ou BAS pour que je puisse faire cela?

22
Void Star

Si vous souhaitez passer d'autres valeurs à digitalWrite (), vous pouvez jeter un œil au prototype de la fonction

void digitalWrite(uint8_t, uint8_t);

Donc, toute valeur entière (enfin, 0 à 255) fonctionnerait. Aucune idée du comportement de digitalWrite () si vous lui transmettiez une valeur autre que HIGH et LOW.

Étant donné que HIGH et LOW sont simplement des constantes définies, vous ne pouvez pas leur attribuer un entier (et cette opération n'aurait pas de sens). Il semble que vous puissiez utiliser un entier partout où HAUT et BAS était attendu.

En fait, c'est une mauvaise idée, pour de nombreuses raisons - les définitions de HAUT et BAS pourraient changer (peu probable mais possible) et cela n'a pas de sens du point de vue du type. Au lieu de cela, vous devez utiliser la logique dans votre programme pour déterminer si HIGH ou LOW doit être passé à l'appel de fonction, puis passer réellement la constante.

17
Ivan

Jettes un coup d'oeil à hardware/arduino/cores/arduino/Arduino.h (au moins dans le logiciel Arduino 1.0.1), lignes 18 et 19:

 #define HIGH 0x1
 #define LOW  0x0

Cela signifie que ces définitions étant des valeurs entières hexadécimales, vous pouvez faire toutes les opérations au niveau du bit que vous souhaitez avec elles - combien de sens cela aura, cependant, n'est pas vraiment clair pour moi pour le moment. Gardez également à l'esprit que ces valeurs pourraient être modifiées ultérieurement - ce qui rendrait les opérations sur les bits encore plus imprudentes.

39
codeling

Pour ajouter mes deux cents à réponse de codeling :

Lignes 18 à 25 de Arduino.h (1.0) sont:

#define HIGH 0x1
#define LOW  0x0

#define INPUT 0x0
#define OUTPUT 0x1

#define true 0x1
#define false 0x0

Donc, HIGH <==> OUTPUT <==> true <==> 0x1 et LOW <==> INPUT <==> false <==> 0x0. Ensuite, HIGH <==> !LOW et LOW <==> !HIGH...

17
Alvaro

Le premier argument de digitalWrite () est un numéro de broche.

Le deuxième argument de digitalWrite ():

  1. écrire un HIGH (3,3 ou 5 V) ou LOW (0 V) sur une SORTIE BINAIRE ou
  2. activer (HIGH) ou désactiver (LOW) le pullup interne sur une entrée binaire.

Les opérations au niveau du bit pour l'un ou l'autre argument n'ont aucun sens. Vous devez peut-être utiliser analogWite ()?

Voir la documentation: digitalWrite ()Constantes

1
Derek Johnson