Rekoh da se malo odmorim od onog mog lifta jer mi glava jos uvek ide gore-dole, a uredjaj nije trenutno ni ukljucen, resih da probam nesto drugo sto sam hteo jos pre i zbog cega sam hteo tu probu sa motorom sto pre da zavrsim...
Prepravio sam jedan skec sa ovog YT kanala https://www.youtube.com/watch?v=dkESWpdDBYk da bih imao vise od 8 relea kao sto je prikazano u videu, ok mi radi tako, testirao sam sa 16 relea (samo kroz serial monitor, 2 u realnosti).
Potrebna mi je pomoc, resenje za ova 2 pitanja...
Realno mi treba mozda 10-12 relea, to mi nije prob. da limitiram, ali ne znam kako da dodam da mi neki od tastera u matrici koje ne bili korisceni ugasi sve relee. Ako npr upalim 7-8 relea a ostali su ugaseni, sada mora svaki da se ponovo pritisne da bih sve iskljucio. Malo mi glupo da koristim reset dugme za ovo.
Drugo pitanje bi bilo da jednim tasterom ukljucim-iskljucim predefinisanu grupu relea. Logika ovde ne dozvoljava da ako je jedan taster pritisnut da se pritisne neki drugi, da nije tako, mozda bih mogao da fizicki napravim neku prepravku koja bi jednim externim tasterom pritisnula vise linija odjednom.
Za oba pitanja, nije mi bitno da bash mora biti neki taster u matrici, mogu i eksterni tasteri, probu radim na mega koji ima malo vishe pinova od uno ili nano, pa mi to nije prob.
Ako se ovo ne moze da se uradi sa ovim skecom, i ta informacija bi mi znacila, jer ne uspevam ni ovo prvo da uradim.

Evo moj prepravljeni kod koji ukljucuje i iskljucuje 16 relea sa 4x4 matricom.
#include <Keypad.h>
//keypad settings
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
char keys[ROWS][COLS] = {
{'1', '2', '3', ':'},
{'4', '5', '6', ';'},
{'7', '8', '9', '<'},
{'@', '?', '>', '='}
};
byte rowPins[ROWS] = {2, 3, 4, 5}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {6, 7, 8, 9}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
//relay settings
const int relayPin[] = {22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37}; // output pins where 16 relays will be connected
String relayNames[] = {"CH1", "CH2", "CH3", "CH4", "CH5", "CH6", "CH7", "CH8", "CH9", "CH10", "CH11", "CH12", "CH13", "CH14", "CH15", "CH16"}; // Just put name for 16 relays
int pushed[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // status of each buttons
int relayStatus[] = {HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH, HIGH}; // initial status of relay
void setup() {
Serial.begin(9600);
for (int i = 0; i < 16; i++)
{
pinMode(relayPin[i], OUTPUT); // set relay pins as output
digitalWrite(relayPin[i], HIGH);// initial relay status to be OFF
}
Serial.println("16 channel relay keypad");
}
void loop() {
int val;
int knum;
char key = keypad.getKey();
// just print the pressed key
if (key) {
knum = (int)key - 49; // convert char to integer (one less)
if (knum >= 0 && knum < 16) {
//Serial.println(knum);
if (relayStatus[knum] == LOW) {
pushed[knum] = 1 - pushed[knum];
delay(50);
}
controlRelay(knum);// turn relay ON or OFF
}
} else {
val = LOW;
}
if (knum >= 0 && knum < 16) {
relayStatus[knum] = val;
}
delay(50);
}
//controlRelay
void controlRelay(int number)
{
if (pushed[number] == 1)
{
digitalWrite(relayPin[number], HIGH);// Turn OFF relay
Serial.print(relayNames[number]);
Serial.println(" OFF");
} else {
digitalWrite(relayPin[number], LOW); // turn ON relay
Serial.print(relayNames[number]);
Serial.println(" ON");
}
}
slika za ilustraciju:
