2012-09-14 20 views
14

Tengo un Arduino y me pregunto exactamente qué significa ALTO y BAJO en cuanto a los valores reales ... ¿Están suscritos? ¿Ints sin firmar? Caracteres sin signo ??? ¿Cuáles son sus valores? Supongo que ALTO y BAJO probablemente sean entradas sin firmar con todos los bits establecidos en 1 y 0 respectivamente, pero no estoy seguro. Me gustaría poder realizar operaciones en modo bit usando HIGH y LOW o pasar valores que no sean HIGH o LOW a digitalWrite. Además, ¿cómo podría convertir un número entero en ALTO o BAJO para poder hacer esto?Arduino ALTO BAJO

Respuesta

10

Si desea pasar a otros valores digitalWrite() se puede echar un vistazo al prototipo de función

void digitalWrite(uint8_t, uint8_t); 

Por lo que cualquier valor entero (bueno, de 0 a 255) funcionaría. No tengo idea de cuál sería el comportamiento de digitalWrite() si le pasaras un valor distinto de ALTO y BAJO.

Dado que ALTO y BAJO son constantes simplemente definidas, no puede convertirlas en un entero (ni esa operación tendría sentido). Parece que podría usar un número entero en cualquier lugar que se esperara ALTO y BAJO.

En realidad, hacer esto es una mala idea, aunque por muchas razones: las definiciones de ALTO y BAJO podrían cambiar (poco probable pero posible) y no tiene sentido desde la perspectiva del tipo. En su lugar, debe usar lógica en su programa para determinar si ALTO o BAJO se debe pasar a la llamada de función, y luego pasar realmente la constante.

+1

realidad. VERDADERO y FALSO no están definidos en ningún lado para Arduino hasta donde yo sé, solo ALTO y BAJO y verdadero y falso ... (ALTO = verdadero, BAJO = falso) – codeling

+0

Error, disculpa eso. – Ivan

+0

Respuesta arriba estados constantes definidas. –

30

Tenga una mirada en hardware/arduino/cores/arduino/Arduino.h (al menos en Arduino 1.0.1 del software), las líneas 18 y 19:

#define HIGH 0x1 
#define LOW 0x0 

Significado, estas define valores enteros hexadecimales, puede hacer lo que las operaciones bit a bit que desea con ellos - cuánto sentido tendrá, sin embargo, no es muy claro para mí en este momento. También tenga en cuenta que estos valores podrían estar sujetos a cambios en un momento posterior, lo que haría que las operaciones a nivel de bit sean aún más imprudentes.

14

Para agregar mi respuesta 2c a nyarlathotep. Líneas 18--25 de Arduino.h (1.0) son:

#define HIGH 0x1 
#define LOW 0x0 

#define INPUT 0x0 
#define OUTPUT 0x1 

#define true 0x1 
#define false 0x0 

Por lo tanto, HIGH<==>OUTPUT<==>true<==>0x1 y LOW<==>INPUT<==>false<==>0x0. Luego, HIGH<==>!LOW y LOW<==>!HIGH ...

+1

Es tan raro que INPUT/OUTPUT se invierta por completo (de un desarrollo "normal" usando AVR-GCC, de todos modos).Una de mis cosas favoritas sobre AVR mcu era que "1" parecía una "I" (para entrada), y "0" parecía una "O" para la salida, lo que hacía que fuera muy fácil de recordar. – BrainSlugs83

1

El primer argumento para digitalWrite() es un número de pin.

El segundo argumento de digitalWrite(), o bien:

1) escribir una ALTA (3,3 o 5 V) o bajo (0 V) con una salida binaria o
2) permitir (ALTO) o deshabilitar (LOW) el pullup interno en una ENTRADA BINARIA.

Las operaciones a nivel de bit para cualquiera de los argumentos no tienen sentido. ¿Quizás necesites usar analogWite()?

Consulte la documentación: digitalWrite()Constants

+0

ALTO, BAJO son solo números (1 y 0) respectivamente. Las operaciones a nivel de bit en ellos tienen total sentido. - En cuanto al comportamiento de digitalWrite, el segundo argumento es un entero de 8 bits sin signo que se trata como un booleano, por lo que todo lo que no sea cero se debe tratar como ALTO. – BrainSlugs83