Error en el compilador o lo que sea?
Circuito simplificado hay 2 LEDs y 1 entrada analógica.
El LED conectado al pin PB1 se enciende muy débil cuando la salida es alta.
Parece que la salida se ha configurado en modo de alta impedancia.
Eso sucede si dentro de setup()
la entrada analógica A1 (pin 7, PB2) se configura después de la salida digital PB1.
Si se cambia el orden de configuración de pin, todo está bien.
¿Es ese error del compilador?
/* ____
D5 PB5 1|o |8 Vcc
D3 PB3 2| |7 PB2 A1 Voltage measurement, potentiometer
D4 PB4 3| |6 PB1 D1 --|>--|
GND 4|____|5 PB0 D0 --|>--|
*/
byte led0 = PB0;
byte led1 = PB1;
byte potentiometer = A1;
int voltage;
/* It is important in which order pin configuration has been set.
Wrong order causes PB1 to high impedance, low current, output.
This must be compiler bug, I think.
If port BP1 setup has been made using straight to register there is no problem in order.
Any other analog input port and digital port combination works correctly.
*/
void setup()
{
pinMode(led0, OUTPUT);
pinMode(led1, OUTPUT); // Doesn't work if this is before pinMode(potentiometer, INPUT);
//DDRB &= ~(1 << DDB2); // Alternative working setup for analog input A1
pinMode(potentiometer, INPUT);
//pinMode(led1, OUTPUT); // Works if this led1 setup is after pinMode(potentiometer, INPUT);
}
void analog_input()
{
voltage = analogRead(potentiometer);
if (voltage < 500) {
digitalWrite(led0, HIGH);
digitalWrite(led1, LOW);
}
else
{
digitalWrite(led0, LOW);
digitalWrite(led1, HIGH);
}
}
void loop()
{
analog_input();
}