Buenas a todos, soy nuevo en esto de la electrónica y en el mundo del Arduino, llevo solo 1 mes.
Mi pregunta es la siguiente, tengo un 74HC165 conectado a cuatro pulsadores, pero los datos del IC, cuando los muestro en el monitor Serial, me da fluctuaciones de datos. ¿Alguien sabe por que?.
Gracias.
int pinDataIC = 9;
int pinClockIC = 10;
int pinLanchIC = 1;
void setup()
{
pinMode(pinDataIC, INPUT);
pinMode(pinClockIC, OUTPUT);
pinMode(pinLanchIC, OUTPUT);
Serial.begin(9600);
}
void loop()
{
int tempo = 60;
byte button = 0;
byte oldbutton;
int pausenote;
String notearray[] = {"Redonda", "Blanca", "Negra", "Corchea", "Tresillo", "Semicorchea", "Seisillo"};
int numarray[] = {0, 0, 0, 1, 2, 3, 5};
int index = 2;
String note;
int numero;
int i = 0;
int show = 1;
digitalWrite(pinClockIC, HIGH);
digitalWrite(pinLanchIC, HIGH);
delayMicroseconds(20);
digitalWrite(pinLanchIC, LOW);
button = shiftIn(pinDataIC, pinClockIC, MSBFIRST);
Serial.println(button);
if ((oldbutton - button) == 2)
{
tempo ++;
show = 1;
//beat = beat + 30;
}
else if ((oldbutton - button) == 4)
{
tempo --;
show = 1;
//beat = beat - 30;
}
else if ((oldbutton - button) == 8)
{
index ++;
show = 1;
}
else if ((oldbutton - button) == 16)
{
index --;
show = 1;
}
oldbutton = button;
numero = numarray[index];
note = notearray[index];
if (show == 1)
{
Serial.print("TEMPO: ");
Serial.print(tempo);
Serial.print(" NOTE: ");
Serial.println(note);
show = 0;
}
delay (1000);
}
Y como tienes esas entradas ? Hay resistencia pull up o pull down? o no hay nada?
No son ruidos, son rebotes, la misma técnica que se aplica a un pulsador conectado a una entrada de arduin debe usarse con este caso, si tienes rebotes. O sea un debounce.
Lees un dato y lo confirmas x mseg despues, y recién lo validas como tal.
Claro que existen esos circuitos pero usarlos con un microcontrolador es un contrasentido al menos para mi.
Es mas fácil crear una rutina que pregunte si el estado del bit esta en 1 luego de 20 mseg que cablear lo que has puesto. Ademas ahorro todos los componentes, aunque sean 1.3 euros.
A mi me parece un contrasentido también, solo digo alternativas por si las moscas algún usuario le de por satisfecho meterle algo más de electrónica en vez de usar software.
En la sentradas normales su software es este.
int estadoUltimo=0;
int contador=0;
void setup(){
pinMode(4,OUTPUT);
pinMode(8,INPUT);
Serial.begin(9600);
}
void loop(){
estadoActual1=digitalRead(8);
delay(10);
estadoActual2=digitalRead(8);
if (estadoActual1 == estadoActual2) {
if (estadoActual1 != estadoUltimo){
if (estadoActual1 == HIGH) {
contador = contador + 1;
Serial.print ("Ésta es la pulsación nº ");
Serial.println(contador);
}
}
}
estadoUltimo= estadoActual1;
if (contador % 2 == 0 ) {
digitalWrite(4, LOW);
} else {
digitalWrite(4, HIGH);
}
}
Los hay mejores. En temas del 74HC165 es otro cantar, no se si realmente se podrá hacer, espero que si y no tan complicado.