Arduino schéma - arduino.sk

Klávesnica Matrix 4*4

Programovanie arduina
Príspevky: 89
Registrovaný: Uto 03. Jún 2014 21:48:35
Bydlisko: Košice Slovakia

Klávesnica Matrix 4*4

Poslaťod kosice4 » Uto 03. Jún 2014 22:16:14

Vedel by mi niekto poradiť ako spraviť aby som mohol použiť Matrix klávesnicu ako 16 tlačítok, ktoré by zopínali výstupy funkciou, 1. stisknutie (príklad tlačítko A) zopne PIN36, 2. stisknutie (príklad tlačítko A) vypne príklad PIN 36.
Niečo som skúšal, no nedarí sa mi to už pár dní. Čísla a písmena mi ide vypísať na sériový monitor, ale nič viac.
Ďakujem za každý nápad.
Ďakujem za pomoc posjirka, Diego, Xeram a barado :)

Príspevky: 89
Registrovaný: Uto 03. Jún 2014 21:48:35
Bydlisko: Košice Slovakia

Re: Klávesnica Matrix 4*4

Poslaťod kosice4 » Ned 08. Jún 2014 0:37:33

// Neviete kde môže byť problém, že mi to neide ?
#include <Keypad.h>
const byte ROWS = 4;
const byte COLS = 4;
char hexaKeys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {A8, A9, A10, A11};
byte colPins[COLS] = {A12, A13, A14, A15};
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
int A = 36;
int B = 34;
void setup(){
Serial.begin(9600);
pinMode(34, OUTPUT);
pinMode(36, OUTPUT);
}
boolean svetlo = false;
void loop(){
char customKey = customKeypad.getKey();
if (customKey){
Serial.println(customKey);
{
if (digitalRead(customKey))
{
if (svetlo) svetlo = false; else svetlo = true;
digitalWrite(34, svetlo);
while (digitalRead(customKey)) delay(50);
}
if (digitalRead(customKey))
{
if (svetlo) svetlo = false; else svetlo = true;
digitalWrite(36, svetlo);
while (digitalRead(customKey)) delay(50);
}}}}
Ďakujem za pomoc posjirka, Diego, Xeram a barado :)

Príspevky: 41
Registrovaný: Štv 21. Feb 2013 10:59:11

Re: Klávesnica Matrix 4*4

Poslaťod xeram » Pon 09. Jún 2014 11:21:28

Túto knižnicu síce nepoužívam, ale pozri sem: http://playground.arduino.cc/Main/KeypadTutorial je tam pekný príklad. Kód píšem len tak z hlavy, možno po nejakom odladení by to mohlo fungovať.
Kód: Vybrať všetko
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

// setup() zostáva + treba zadefinovať premennú "svetlo2"!!!

void loop(){
   char key = kpd.getKey();
   if(key){
      switch (key){
      case 'A': //stlačenie tlačidla "A"
         svetlo = !svetlo; //negovanie stavu
         digitalWrite(34,svetlo);
         break;
      case 'B':   //stlačenie tlačidla "B"
         svetlo2 = !svetlo2;
         digitalWrite(36,svetlo2);
         break;
   Serial.println(key);
        delay(500);
      }
   }
}

Príspevky: 89
Registrovaný: Uto 03. Jún 2014 21:48:35
Bydlisko: Košice Slovakia

Re: Klávesnica Matrix 4*4

Poslaťod kosice4 » Pon 09. Jún 2014 21:08:02

xeram ďakujem veľmi pekne za radu a náčrt :)
Naposledy upravil kosice4 dňa Pon 09. Jún 2014 22:10:30, celkovo upravené 1
Ďakujem za pomoc posjirka, Diego, Xeram a barado :)

Príspevky: 89
Registrovaný: Uto 03. Jún 2014 21:48:35
Bydlisko: Košice Slovakia

Re: Klávesnica Matrix 4*4

Poslaťod kosice4 » Pon 09. Jún 2014 22:09:32

Xeram Ď A K U J E M !!!
Veľmi mi pomohol aj link čo si mi dal http://playground.arduino.cc/Main/KeypadTutorial

Takto to ide skvelo, presne podľa mojich predstáv. Čiže pomocou 4*4 Matrix klávesnice, ktorej stačí iba 8 žíl môžeme ovládať 16 relé :)

#include <Keypad.h>
boolean svetlo = false;
const byte ROWS = 4; // Four rows
const byte COLS = 4; // Three columns
// Define the Keymap
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = { A8, A9, A10, A11 };
byte colPins[COLS] = { A12, A13, A14, A15 };
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup()
{
pinMode(34, OUTPUT);
pinMode(36, OUTPUT);
Serial.begin(9600);
}

void loop()
{
char key = kpd.getKey();
if(key){
switch (key){
case 'A': //stlačenie tlačidla "A"
svetlo = !svetlo; //negovanie stavu
digitalWrite(34,svetlo);
break;
case 'B': //stlačenie tlačidla "B"
svetlo = !svetlo;
digitalWrite(36,svetlo);
break;
Serial.println(key);
delay(500);
}
}
}
Ďakujem za pomoc posjirka, Diego, Xeram a barado :)

Späť na Software