Comencé a construir un transmisor de infrarrojos (comandante). Utilizo 4 pulsadores para izquierda, derecha, arriba, abajo. Estos botones están bajando cuando se presionan. Utilicé resistencias internas pullup. Mi problema es que el arduino está viendo un pin como alto (no se puede cambiar presionando el botón) y el otro como bajo (no se puede cambiar presionando los botones). No está reconociendo los cambios.
He intentado lo siguiente para resolver:
- Primero usé Pulldowns y el resultado fue el mismo. Entonces busqué una alternativa y encontré pullupp. El mismo problema.
- Probé otros pines. Mismo problema.
- Comprobado las conexiones de soldadura. Todo está bien.
- Luego medí los voltajes para el primer pin. Cuando no se presiona nada la tensión entre el pin A0 y tierra es 0V y cuando se presiona, la tensión entre el pin A0 y tierra es 0V.
- Tomé una resistencia externa (1k) en lugar de un pullup interno. Conocer el problema con el que se soluciona solo. Los voltajes cuando se presionan y no se presionan están bien. Pero los pines del controlador no están reconociendo los cambios.
El último punto es muy extraño, esperaba 5V cuando no se presionaba y 0V cuando se presionaba.
Aquí está mi código:
#include <IRremote.h>
#include <IRremoteInt.h>
IRsend irsend;
// The configuration of the output pin will be made by the library
// The output pin is a different one for different arduinos
// Arduino UNO: Output = D3
// Arduino MEGA: Output = D9
// You will find a full list of output pins on the website:
// http://z3t0.github.io/Arduino-IRremote/
#define TASTE_HOCH 19 //A0
#define TASTE_RECHTS 22 //A3
#define TASTE_UNTEN 21 //A2
#define TASTE_LINKS 20 //A1
int aktiveTaste = 0; //Taste die momentan gedrückt ist
void setup()
{
pinMode(TASTE_HOCH, INPUT_PULLUP);
pinMode(TASTE_RECHTS, INPUT_PULLUP);
pinMode(TASTE_UNTEN, INPUT_PULLUP);
pinMode(TASTE_LINKS, INPUT_PULLUP);
Serial.begin(9600);
}
// main program loop
void loop() {
Serial.print("TASTE_HOCH: ");
Serial.println(digitalRead(TASTE_HOCH), DEC);
Serial.print("TASTE_RECHTS: ");
Serial.println(digitalRead(TASTE_RECHTS), DEC);
Serial.print("TASTE_UNTEN: ");
Serial.println(digitalRead(TASTE_UNTEN), DEC);
Serial.print("TASTE_LINKS: ");
Serial.println(digitalRead(TASTE_LINKS), DEC);
delay(3000);
if(digitalRead(TASTE_HOCH) == LOW){
aktiveTaste = 1;
}
else if(digitalRead(TASTE_RECHTS) == LOW){
aktiveTaste = 2;
}
else if(digitalRead(TASTE_UNTEN) == LOW){
aktiveTaste = 3;
}
else if(digitalRead(TASTE_LINKS) == LOW){
aktiveTaste = 4;
}
if(aktiveTaste > 0){
// The transmitter sends in this example the signal A90 (hex. dezimal form) in the encoding "RC5"
// It will be transmitted 3 times after that it will make a 5 second break
for (int i = 0; i < 3; i++) {
irsend.sendRC5(aktiveTaste, 12); // [0xA90] signal | [12] Bit-length signal (hex A90=1010 1001 0000)
delay(40);
}
aktiveTaste = 0; //Keine Taste gedrückt
}
}
Y esta es la salida de la impresión en serie:
¿Cuál es la causa para no reconocer los cambios?