Hola, quiero crear una botonadura de tres botones para un proyecto de Arduino. el caso es que he visto una muy simple con varias resistencias en serie (de 3K Ohm en mi caso) conectadas a tres pulsadores, con el terminal comun de todos los pulsadores al Pin analógico 0 y el comun de todas las resistencias conectado a GND. Es muy sencillo de hacer y con el scketch de prueba que adjunto funciona perfectamente con un proyecto que usa un LCD1602, un modulo SD y un modulo serie, sin estar activados por software. Pero el problema viene al intentar integrarlo en un sketch mucho más complejo, donde se activan todos los módulos anteriores en dicho sketch, entonces la botonadura se vuelve muy variable en resultados al pulsarla, los valores del pin analógico 0 se vuelven muy erráticos. La botonadura es esta:
El scketch de testeo que uso es este:
//Botonadura hecha con 3 resistencias de 3k en serie uniendo
//cada pata de cada boton y terminando en GND. La otra pata
// de todos los botones a Pin A0
// Example 25.3
#include <LiquidCrystal.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
int a=0;
int b,c = 0;
void setup()
{
lcd.begin(16, 2);
pinMode(A0, INPUT_PULLUP); // sets analog pin for input
}
int readButtons(int pin)
// returns the button number pressed, or zero for none pressed
// int pin is the analog pin number to read
{
//int b,c = 0;
c=analogRead(pin); // get the analog value
if (c>1000)
{
b=0; // buttons have not been pressed
}
else
if (c>200 && c<230)//204-219
{
b=1; // button 1 pressed
}
else
if (c>150 && c<180)//157-161
{
b=2; // button 2 pressed
}
else
if (c<140)//92-95
{
b=3; // button 5 pressed
}
return b;
}
void loop()
{
a=readButtons(0);
lcd.clear();
if (a==0) // no buttons pressed
{
lcd.setCursor(0,0);
lcd.print("Press a button");
lcd.setCursor(0,1);
lcd.print(c);
}
else
if (a>0) // someone pressed a button!
{
lcd.setCursor(0,0);
lcd.print("Pressed button ");
lcd.print(a);
lcd.setCursor(0,1);
lcd.print(c);
}
delay(1000); // give the human time to read LCD
}
He visto esquemas de botonaduras mas complejos que usan la alimentación de 5v y resistencias de varios valores para hacerlos. El caso es que usando la que tiene mi keypadshield 1602 genérico de 5 botones, funciona perfectamente el sketch, pero claro, usando otro código más complejo. Me gustaría usar una botonadura simple de 3 botones con mi LCD1602, que a la vez es un conjunto mucho más fácil de encapsular en una caja. El sistema es un discriminador de llamadas telefónicas que tengo casi terminado.