Hi,
this is my first time here.
I'd like to know if somebody could give me a hand with the following.
I'm using a Arduino Uno board with two push-buttons (digital pins 3 & 4) to control 2 pairs of relays (a 4 module relay) (digital pins 10-13).
In addition I'm sending the button state, though Firmata to PD.
Sometimes it works Ok. But sometime not. It's too unstable. It suddenly begins to change the button state even if I'm not pushing any button.
Below I include a drawing of the schematic and the code.
Any hint will be really helpful.
Thanks in advance,
Alexis
//#include <Firmata.h>
//#include "utility/SerialFirmata.h"
const int buttonPin1 = 3; // Botón para optoacopladores 1 y 2
const int buttonPin2 = 4; // Botón para optoacopladores 3 y 4
const int opto1Pin = 10; // Pin del primer optoacoplador
const int opto2Pin = 11; // Pin del segundo optoacoplador
const int opto3Pin = 12; // Pin del tercer optoacoplador
const int opto4Pin = 13; // Pin del cuarto optoacoplador
byte optoStates[4] = {LOW, LOW, LOW, LOW}; // Estados de los optoacopladores
byte prevButtonState1 = LOW; // Estado previo del botón 1
byte prevButtonState2 = LOW; // Estado previo del botón 2
byte myArray[6]; // Array para almacenar los estados de los optoacopladores
void setup() {
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(opto1Pin, OUTPUT);
pinMode(opto2Pin, OUTPUT);
pinMode(opto3Pin, OUTPUT);
pinMode(opto4Pin, OUTPUT);
Serial.begin(9600);
// Firmata.begin(57600);
}
void loop() {
// Firmata.update(); // Actualizar la comunicación Firmata
byte buttonState1 = digitalRead(buttonPin1);
byte buttonState2 = digitalRead(buttonPin2);
// Cambiar estado de optoacopladores 1 y 2 con el botón 1
if (buttonState1 != prevButtonState1) {
if (buttonState1 == HIGH) {
optoStates[0] = !optoStates[0];
optoStates[1] = !optoStates[1];
}
prevButtonState1 = buttonState1;
}
// Cambiar estado de optoacopladores 3 y 4 con el botón 2
if (buttonState2 != prevButtonState2) {
if (buttonState2 == HIGH) {
optoStates[2] = !optoStates[2];
optoStates[3] = !optoStates[3];
}
prevButtonState2 = buttonState2;
}
digitalWrite(opto1Pin, optoStates[0]);
digitalWrite(opto2Pin, optoStates[1]);
digitalWrite(opto3Pin, optoStates[2]);
digitalWrite(opto4Pin, optoStates[3]);
// Almacenar estados de optoacopladores en el array
for (int i = 0; i < 4; i++) {
myArray[i] = optoStates[i];
}
// Enviar array a través de Serial.write
Serial.write(myArray, sizeof(myArray));
delay(100); // Pequeña pausa para evitar rebotes de los botones
}