Sentencia if no funciona en programa de Arduino

Saludos. Estoy tratando de enviar datos en serie a un convertidor digital analógico LTC1457 de 12bits.

Pero no me realiza la acción —> if(tx_dato & 2048 == HIGH ){ digitalWrite(tx_dato, HIGH); }
else{digitalWrite(tx_dato, LOW); }


He probado de varias formas y nada. Desconozco si hay que hacerlo de otra manera.
Pego el sketch por si me podéis ayudar. Gracias.
PHP:
const int clock1 = 12; // the number of the pushbutton pin
const int tx_dato = 13;
const int selec = 11 ;
unsigned int dato1 = 0;

void setup() {
pinMode(clock1, OUTPUT); pinMode(tx_dato, OUTPUT); pinMode(selec, OUTPUT);

}

void loop() {
digitalWrite(clock1, LOW);
delay(1) ;
digitalWrite(selec, HIGH);
delay(1) ;
digitalWrite(selec, LOW);
delay(1) ;
dato1 = 500 ;

for(byte x = 0 ; x <= 11 ; x++){
if(tx_dato & 2048 == HIGH ){ digitalWrite(tx_dato, HIGH); }
else{digitalWrite(tx_dato, LOW); }

digitalWrite(clock1, HIGH);
delay(1) ;
digitalWrite(clock1, LOW);
delay(1) ;

digitalWrite(tx_dato, LOW);
dato1 = dato1 << 1 ;

}
digitalWrite(selec, HIGH);
digitalWrite(clock1, HIGH);

}

:confused:
 
Última edición por un moderador:
Declaraste const int tx_dato = 13;

Si haces if(tx_dato & 2048 == HIGH ) se traduce en
if(13 & 2048 == 1

que pasa a
if(0 == 1 ) lo que da falso

Para enviar en serial usa shiftOut()
 
Última edición:
Muchas gracias me tenia loco y como estoy empezando con arduino pensaba ya que los accesos a bit seria solo para variables de tipo byte. Voy a probar la libreria que me has indicado. :):)
 
No son para tipo byte únicamente, pero declaraste como constante con valor 13 y el otro numero en 2048 eso seria hacer AND de
0000 0000 1101
1000 0000 0000

Y el resultado es cero.
 
Atrás
Arriba