ho pensato di inibire tramite programmazione gli input troppo brevi (come penso che siano quelli dovuti a induzioni) e di invece far ricevere come comando degli input un po piu lunghi tipo 1 o 1,5 secondi di input.
Dopo aver visto le foto ( anche quelle nell'altro Thread ) non e' che puoi risolvere da software, i problemi son ben altri.
Comunque, se vuoi, puoi sempre provare a vedere cosa succede. Eccoti lo sketch
byte pulsanti[] = { 43, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53 };
byte pulsanti_totali = 16;
byte rele[] = { 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37 };
byte rele_totali = 16;
byte statoLed[17];
byte stato_pulsante = 0;
long prev = 0;
int durata_ritardo = 1000; // tempo che deve essere premuto il pulsante
#include <SoftwareSerial.h> // includo la libreria per la comunicazione seriale
SoftwareSerial mySerial(10, 11); // imposto i pin per la comunicazione seriale
// Collegare i pin: RX=>11 TX=>10
void setup() {
for (int aa = 0; aa < rele_totali; aa++) {
pinMode(rele [aa], OUTPUT );
digitalWrite ( rele[aa], HIGH );
statoLed[aa] = HIGH ;
}
for (int aa = 0; aa < pulsanti_totali; aa ++ ) {
pinMode(pulsanti[aa], INPUT_PULLUP); // Mette i pin in input e abilita il PullUp
}
Serial.begin(9600); // setto la comunicazione seriale
mySerial.begin(9600); // setto la comunicazione bluetooth
Serial.println("dexter"); //scrivo sul monitor seriale
delay(1000);
}
void loop() {
for (int aa = 0; aa < pulsanti_totali; aa++ ) {
stato_pulsante = 0;
if (!digitalRead (pulsanti[aa])) {
prev = millis() ;
stato_pulsante = 1;
while ((millis() - prev ) <= durata_ritardo ) {
if (digitalRead(pulsanti[aa])) {
stato_pulsante = 0;
break;
}
}
}
if (stato_pulsante == 1) {
if ( !statoLed[aa] ) {
statoLed[aa] = HIGH;
}
else {
statoLed[aa] = LOW;
}
digitalWrite( rele[aa], statoLed[aa] );
// delay(250);
}
} // fine ciclo di FOR
//*********************** Bluetooth
while (mySerial.available())
{
char dato = mySerial.read(); // "dato" è il valore che viene ricevuto dalla seriale
switch (dato)
{
case 'a': // Se ricevo la lettera A,
{
digitalWrite(23, HIGH); // attivo il relè collegato al pin12
mySerial.println("Relè 1 ON");
break;
}
case 'A': // Se ricevo la lettera a
{
digitalWrite(23, LOW); // Spengo il relè
mySerial.println("Relè 1 OFF");
break;
}
// E così anche di seguito...
case 'b':
{
digitalWrite(24, HIGH);
mySerial.println("Relè 2 ON");
break;
}
case 'B':
{
digitalWrite(24, LOW);
mySerial.println("Relè 2 OFF");
break;
}
case 'c':
{
digitalWrite(25, HIGH);
mySerial.println("Relè 3 ON");
break;
}
case 'C':
{
digitalWrite(25, LOW);
mySerial.println("Relè 3 OFF");
break;
}
case 'd':
{
digitalWrite(26, HIGH);
mySerial.println("Relè 4 ON");
break;
}
case 'D':
{
digitalWrite(26, LOW);
mySerial.println("Relè 4 OFF");
break;
}
case 'e':
{
digitalWrite(27, HIGH);
mySerial.println("Relè 5 ON");
break;
}
case 'E':
{
digitalWrite(27, LOW);
mySerial.println("Relè 5 OFF");
break;
}
case 'f':
{
digitalWrite(28, HIGH);
mySerial.println("Relè 6 ON");
break;
}
case 'F':
{
digitalWrite(28, LOW);
mySerial.println("Relè 6 OFF");
break;
}
case 'g':
{
digitalWrite(29, HIGH);
mySerial.println("Relè 7 ON");
break;
}
case 'G':
{
digitalWrite(29, LOW);
mySerial.println("Relè 7 OFF");
break;
}
case 'h':
{
digitalWrite(22, HIGH);
digitalWrite(23, HIGH);
digitalWrite(24, HIGH);
digitalWrite(25, HIGH);
digitalWrite(26, HIGH);
digitalWrite(27, HIGH);
digitalWrite(28, HIGH);
digitalWrite(29, HIGH);
digitalWrite(30, HIGH);
digitalWrite(31, HIGH);
digitalWrite(32, HIGH);
digitalWrite(33, HIGH );
digitalWrite(34, HIGH );
digitalWrite(35, HIGH );
digitalWrite(36, HIGH );
digitalWrite(37, HIGH );
mySerial.println("Relè 8 ON");
break;
}
case 'H':
{
digitalWrite(22, LOW);
digitalWrite(23, LOW);
digitalWrite(24, LOW);
digitalWrite(25, LOW);
digitalWrite(26, LOW);
digitalWrite(27, LOW);
digitalWrite(28, LOW);
digitalWrite(29, LOW);
digitalWrite(30, LOW);
digitalWrite(31, LOW);
digitalWrite(32, LOW);
digitalWrite(33, LOW );
digitalWrite(34, LOW );
digitalWrite(35, LOW );
digitalWrite(36, LOW );
digitalWrite(37, LOW );
mySerial.println("Relè 8 OFF");
break;
}
}
}
} // fine Loop