Ciao a tutti avrei bisogno del vostro aiuto.
Ho recuperato dalla rete questo sketch che permette di azionare una serie di relè in una determinata sequenza memorizzata nella EEPROM.
Praticamente tramite l'uso della libreria "keypad" ad ogni colonna (selezionabile tramite uno switch a tre vie) corrisponde una funzione diversa dei tasti:
La colonna numero uno permette di selezionare la sequenza dei relè.
La colonna numero due salva e assegna alla sequenza il tasto che scegliamo.
La colonna numero tre legge la sequenza dei relè memorizzata nella EEPROM.
La mia domanda è se fosse possibile aggiungere una funzione di bank up e bank down per poter incrementare il numero di sequenze relè disponibili.
Ho cercato anche di inserire il tutto in uno sketch con già presenti dei bank up e down ma non ho ottenuto nessun risultato.
Grazie in anticipo a tutti coloro che proveranno ad aiutarmi ![]()
#include <Keypad.h>
#include <EEPROM.h>
const byte rows = 3;
const byte cols = 3;
char keys[rows][cols] = {
{'a','d','g'},
{'b','e','h'},
{'c','f','i'},
};
byte rowPins[rows] = {2, 3, 4};
byte colPins[cols] = {7, 8, 9};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, rows, cols);
boolean state;
int relayPin1 = 24;
int relayPin2 = 25;
int relayPin3 = 26;
int ledPin1 = 30;
int ledPin2 = 31;
int ledPin3 = 32;
void setup()
{
pinMode(relayPin1, OUTPUT);
pinMode(relayPin2, OUTPUT);
pinMode(relayPin3, OUTPUT);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
//for (int i = 0; i < 512; i++) // erase eeprom (optional)
//EEPROM.write(i, 0);
Serial.begin(9600);
}
void loop()
{
char key = keypad.getKey();
if(key) // Check for a valid key.
{
state = ~state;
switch (key)
{
case 'a': // a to e = select wich relay is HIGH/LOW
digitalWrite(relayPin1, ~state);
digitalWrite(ledPin1, ~state);
digitalWrite(relayPin1, state);
digitalWrite(ledPin1, state);
break;
case 'b':
digitalWrite(relayPin2, ~state);
digitalWrite(ledPin2, ~state);
digitalWrite(relayPin2, state);
digitalWrite(ledPin2, state);
break;
case 'c':
digitalWrite(relayPin3, ~state);
digitalWrite(ledPin3, ~state);
digitalWrite(relayPin3, state);
digitalWrite(ledPin3, state);
break;
//--------------------------- store presets mode
case 'd':
EEPROM.write(10, digitalRead(relayPin1));
EEPROM.write(11, digitalRead(relayPin2));
EEPROM.write(12, digitalRead(relayPin3));
resetLeds();
delay(100);
digitalWrite(ledPin1, HIGH);
delay(100);
digitalWrite(ledPin1, LOW);
delay(100);
digitalWrite(ledPin1, HIGH);
delay(700);
resetAll();
break;
case 'e': // store presets case
EEPROM.write(20, digitalRead(relayPin1));
EEPROM.write(21, digitalRead(relayPin2));
EEPROM.write(22, digitalRead(relayPin3));
resetLeds();
delay(100);
digitalWrite(ledPin2, HIGH);
delay(100);
digitalWrite(ledPin2, LOW);
delay(100);
digitalWrite(ledPin2, HIGH);
delay(700);
resetAll();
break;
case 'f': // store presets case
EEPROM.write(30, digitalRead(relayPin1));
EEPROM.write(31, digitalRead(relayPin2));
EEPROM.write(32, digitalRead(relayPin3));
resetLeds();
delay(100);
digitalWrite(ledPin3, HIGH);
delay(100);
digitalWrite(ledPin3, LOW);
delay(100);
digitalWrite(ledPin3, HIGH);
delay(700);
resetAll();
break;
//------------------------------- read presets mode
case 'g':
digitalWrite(relayPin1,EEPROM.read(10));
digitalWrite(relayPin2,EEPROM.read(11));
digitalWrite(relayPin3,EEPROM.read(12));
digitalWrite(ledPin1,HIGH);
digitalWrite(ledPin2,LOW);
digitalWrite(ledPin3,LOW);
break;
case 'h': // read presets case
digitalWrite(relayPin1,EEPROM.read(20));
digitalWrite(relayPin2,EEPROM.read(21));
digitalWrite(relayPin3,EEPROM.read(22));
digitalWrite(ledPin2,HIGH);
digitalWrite(ledPin1,LOW);
digitalWrite(ledPin3,LOW);
break;
case 'i': // read presets case
digitalWrite(relayPin1,EEPROM.read(30));
digitalWrite(relayPin2,EEPROM.read(31));
digitalWrite(relayPin3,EEPROM.read(32));
digitalWrite(ledPin3,HIGH);
digitalWrite(ledPin1,LOW);
digitalWrite(ledPin2,LOW);
break;
}
//tests for debugging
Serial.print("relayPins are ");
Serial.print(digitalRead(10));
Serial.print(digitalRead(11));
Serial.print(digitalRead(12));
Serial.print(digitalRead(13));
Serial.println(digitalRead(14));
Serial.println("-----------------");
Serial.println("memory address 10 is ");
Serial.print(EEPROM.read(10));
Serial.print(EEPROM.read(11));
Serial.print(EEPROM.read(12));
Serial.print(EEPROM.read(13));
Serial.println(EEPROM.read(14));
Serial.print("memory 15 is ");
Serial.println(EEPROM.read(15));
Serial.println("-----------------");
}
}
void resetAll()
{
digitalWrite(ledPin1,LOW);
digitalWrite(ledPin2,LOW);
digitalWrite(ledPin3,LOW);
digitalWrite(relayPin1,LOW);
digitalWrite(relayPin2,LOW);
digitalWrite(relayPin3,LOW);
}
void resetLeds()
{
digitalWrite(ledPin1,LOW);
digitalWrite(ledPin2,LOW);
digitalWrite(ledPin3,LOW);
}