Hola, buenas
Necesito de su ayuda. Estoy trabajando con un arduino due y necesito hacer lo siguiente: Previamente configurados los pines de salida, necesito arrojar un número binario de 12 bits a la salida, y que con una función se sepa automáticamente que del número de 12 bits, la posición 1 corresponda a la salida X, la posición 2 corresponda a la salida Y, la posición 3 corresponda a la salida Z, y así sucesivamente. Espero haberme explicado bien. En vez de poner "digitalWrite" 12 veces para cada componente del número de 12 bits, quiero hacer que, quiero solamente escribir el número completo y que con una función se sepa que cada posición del número corresponde a un puerto de salida y se vaya por ahí.
No espero que me den la solución directamente, pero que me ayuden con algún link, ya que he dado vuelta google y no pillo nada.
Quedo atento a sus comentarios.
Saludos!!
Este tema ya se trató y no hace mucho más de un mes.
Encontrar lo que pides es dificil porque no sabes como buscarlo
Porque no comienzas definiendo tus pines en un array.
Luego es muy facil, tu número binario es de 12 bits o sea del tipo
0b0000 1111 1111 1111 en binario de 16 bits
entonces que haces pues muy simple
supongamos escribes todo como caracteres via puerto serie y solamente 12 ya que eso te interesa
index = 0;
while (Serial.available() > 0) {
char str = Serial.read();
if (str = '\n')
break;
digitalWrite(salida[index++], str-'0'); // '0' convierte caracter en número entre 0 o 1 y eso activa/desactiva
}
debes definir
const byte salida[12] = { tus pines};
Claro, como bien dices, no se cómo buscarlo. Y, si, la forma en que lo hago es poniendo todos en un vector como dices tú. Lo que yo quería saber es si había una función específica para ello. Sabes si la hay? Gracias
En otros lenguajes hay una función que entrega el resto de una división, eso sería el 1 de nuestro número binario. Mis conocimientos de C no son tan grandes como para saber eso.
Por supuesto, si yo hago N dividido entre 2 me va a dar un resto de 0 o de 1. Si el resto es 1 hay que seguir dividiendo, si el resto es 0, hasta ahí llegamos.
P.D.: ¿Se nota que mi primer lenguaje de programación estructurada que aprendí fue Pascal?
Las instrucciones especificas que estas buscando son DDR y PORT, el inconveniente que tienen es que no puedes elegir los pines y el código difiere en cada tipo de Arduino
En caso de querer separar bit por bit las instrucciones para manipular bit son right shift y left Shift ( << , >> ).
Saludos
define un array asi
byte salidas[11] = {2,3,4,5,6,7,8,9,10,11,12,13]; // aca definí todas las salidas menos 0 y 1 que las dejo para monitor serie
luego en el setup()
for (byte i; i<11; i++) {
pinMode(salidas[i], OUPUT); // defino cada pin como salida
}
y en el loop lo que te expliqué antes.
Por ejemplo en un arduino mega si se quiere escribir el numero binario 0B0000001111111001 en los pines 22 a 29 y 37 a 30 (en este ultimo el orden esta invertido) con DDR y PORT el código es simplemente
void setup() {
DDRA= B11111111; //22 a29
DDRC=B11111111; //37 a 30
}
void loop() {
int b =0B0000001111111001;
PORTA=b;
PORTC=(b >> 8);
}
saludos