Hola, Foreros!
Estoy desarrollando un proyecto para una materia de la universidad con el Starter Pack de Arduino (Arduino UNO R3) y me ha surgido un problema:
Estoy desarrollando un "piano LED RGB" con los siguientes componentes:
- Arduino Uno R3 (x1)
- Pulsadores (x4)
- Buzzer piezoeléctrico (x1)
- LED RGB (x1)
- Resistores
- 220 ohmios (x4)
- 10k ohmios (x2)
- 1M ohmios (x1)
- Cables (los necesarios para realizar las conexiones de Arduino – Placa Prototipado y los materiales en la Placa de Prototipado)
El problema ocurre cuando, al accionar un pulsador y este añadir intensidad al LED RGB en el color rojo, no sé por qué, pero hace que el buzzer tenga problemas. Este emite un sonido raro (nada melódico, más parecido al ruido de un aparato estropeado). Y mientras el LED RGB, tenga alguna intensidad del color rojo este problema sigue ocurriendo. Si al accionar un pulsador trabajo con los demás colores (azul o verde) esto no ocurre; al contrario, todo funciona correctamente.
¿Tienes idea de porqué ocurre esto? ¿A alguno le ocurrido algo parecido?
He probado a cambiar el resistor de la pestaña Red del LED RGB, añadirle uno de mayor resistencia (de 220 a 1k), por si era un tema de la tensión que le llega, pero igual, el color rojo sigue afectando al sonido.
A demás, he probado a colocar un condensador entre las conexiones de energía y tierra del buzzer, para darle más energía, pero nada.
Adjunto el código:
// array de las notas
int notes[] = { 262, 294, 330, 440 };
//constantes con el numero de pin de los colores del LED RGB
const int redLEDPin = 11;
const int blueLEDPin = 10;
const int greenLEDPin = 9;
//variables que almacenan la intensidad de los colores
int blueValue = 0;
int redValue = 0;
int greenValue = 0;
//variables de tiempo
int cuarto = 1000 / 4; // 1/4 de segundo
double pausa = 1.30; // pausa del 30%
void setup() {
//iniciamos la comunicación serial
Serial.begin(9600);
//los pines del LED RGB están en modo salida
pinMode(redLEDPin,OUTPUT);
pinMode(blueLEDPin,OUTPUT);
pinMode(greenLEDPin,OUTPUT);
}
void loop() {
// create a local variable to hold the input on pin A0
int keyVal = analogRead(A0);
// send the value from A0 to the Serial Monitor
printInfo(keyVal);
// play the note corresponding to each value on A0
if (keyVal >= 1020 && keyVal <= 1030) {
// play the first frequency in the array on pin 8
tone(8, notes[0], cuarto);
//digitalWrite(redLedPin, HIGH);
if(redValue < 255 && redValue >= 0){
redValue++;
}
} else if (keyVal >= 990 && keyVal <= 1010) {
// play the second frequency in the array on pin 8
tone(8, notes[1], cuarto);
if(blueValue < 255 && blueValue >= 0){
blueValue++;
}
} else if (keyVal >= 505 && keyVal <= 525) {
// play the third frequency in the array on pin 8
tone(8, notes[2], cuarto);
if(greenValue < 255 && greenValue >= 0){
greenValue++;
}
} else if (keyVal >= 5 && keyVal <= 20) {
// play the fourth frequency in the array on pin 8
tone(8, notes[3], cuarto);
if(blueValue < 255 && blueValue >= 0){
blueValue++;
}
if(greenValue < 255 && greenValue >= 0){
greenValue++;
}
} else {
// if the value is out of range, play no tone
noTone(8);
if(redValue <= 255 && redValue > 0){
redValue--;
}
if(greenValue <= 255 && greenValue > 0){
greenValue--;
}
if(blueValue <= 255 && blueValue > 0){
blueValue--;
}
}
analogWrite(redLEDPin, redValue);
analogWrite(blueLEDPin, blueValue);
analogWrite(greenLEDPin, greenValue);
delay(cuarto*pausa);
}
void printInfo(int keyVal){
Serial.println(keyVal);
Serial.print("Red Value : ");
Serial.print(redValue);
Serial.print(", \t Blue Value : ");
Serial.print(blueValue);
Serial.print(", \t Green Value : ");
Serial.println(greenValue);
}
Adjunto capturas del prototipo:
¡Gracias de antemano por la ayuda!
Un saludo.