Go Down

Topic: problema keypad 4x4  (Read 1 time) previous topic - next topic

Gianky00

Buongiorno a tutti ragazzi,
ho un problema riguardo il keypad 4x4. I collegamenti li ho fatti giusti e quando vado ad eseguire questo semplice sketch:
Code: [Select]
#include <Keypad.h>
const byte riga = 4;    //quattro righe
const byte colonna = 4; //quattro colonne
char keys[riga][colonna] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
byte pinRiga[riga] = {9, 8, 7, 6}; //connect to the row pinouts of the kpd
byte pinColonna[colonna] = {5, 4, 3, 2}; //connect to the column pinouts of the kpd
Keypad keypad = Keypad( makeKeymap(keys), pinRiga, pinColonna, riga, colonna );
void setup()
{
  Serial.begin(9600);
}
void loop()
{
  char key = keypad.getKey();
  if (key) {
    Serial.print("Tasto ");
    Serial.print(key);
    Serial.println(" premuto");
  }
}


 il risultato è quello che ad ogni tasto premuto mi stampa il corrispettivo valore in seriale. Fin qui tutto ok. Il problema sta nel dare una funzione/azione a un tasto.

Avevo intenzione di modificare lo sketch precedente cosi:
Code: [Select]
void loop()
{
  char key = keypad.getKey();
  if (key) {
    Serial.print("Tasto ");
    Serial.print(key);
    Serial.println(" premuto");
    if (key == 3)
    {
      Serial.println("funzione");
    }
  }
}


ma vedo che al premere del tasto 3 mi stampa solo questo:
Code: [Select]
Tasto 3 premuto

senza scrivere 'funzione' e quindi penso non entri nell'if e quindi non fare alcuna azione...come mai?

Grazie!

SukkoPera

Metti il 3 tra apici singoli.
"Code is read much more often than it is written, so plan accordingly. Design for readability."

Guida rapida a ESP8266: https://goo.gl/kzh62E

Gianky00

#2
Mar 25, 2017, 03:07 pm Last Edit: Mar 25, 2017, 07:38 pm by Gianky00
ottimo, +karma grazie mille ho risolto :D


EDIT: altro problema. Ho una tastiera con 16 pulsanti capacitivi come QUESTA però non ho capito come sviluppare lo sketch...ho cercato qualcosa online ma i risultati sono stati tanti buchi nell'acqua..
Il modulo ha 12 pin di cui 8 di output, 2 per l'alimentazione e altri 2 per la comunicazione I2C quindi SDA e SCL. Il problema sta nel fare lo sketch..non so da dove cominciare :S

brunello22

eppure vedo che ci sono anche librerie link

Gianky00

Purtroppo librerie di cui il file d'esempio è sbagliato:
Code: [Select]

#include <TTP229.h>

const int SCL_PIN = 2;  // The pin number of the clock pin.
const int SDO_PIN = 3;  // The pin number of the data pin.

TTP229 ttp229(SCL_PIN, SDO_PIN); // TTP229(sclPin, sdoPin)

void setup()
{
Serial.begin(115200);
Serial.println("Start Touching One Key At a Time!");
}

void loop()
{
uint8_t key = TTP229.ReadKey16(); // Blocking
if (key) Serial.println(key);

//uint8_t key = ttp229.GetKey16(); // Non Blocking
//Serial.println(key);
}



 nella compilazione mi da questo errore:
Code: [Select]
KeyToSerial:65: error: 'class TTP229' has no member named 'GetKey16'

  uint8_t key = ttp229.GetKey16(); // Non Blocking

                       ^

exit status 1
expected primary-expression before '.' token

brunello22

hai installato male la libreria.
Aprendo lo zip, c'e' una sottocartella TTP229, devi copiare questa

Gianky00

#6
Mar 26, 2017, 11:17 am Last Edit: Mar 29, 2017, 02:47 pm by Gianky00
Ok brunello avevi ragione...però adesso penso di avere un problema hardware nei collegamenti..quando vado a premere il tasto 1 in seriale mi stampa 9 fino ad arrivare al numero 8 che quindi mi stampa 16..

i collegamenti che ho fatto sono:
GND -> GND
Vcc  -> 5V

out1 -> 4 (pin digitale arduino)
out2 -> 5
...
...
out8 -> 12
SDO -> 3
SCL  -> 2


e questo è lo sketch d'esempio:
Code: [Select]

#include <TTP229.h>

const int SCL_PIN = 2;  // The pin number of the clock pin.
const int SDO_PIN = 3;  // The pin number of the data pin.

TTP229 ttp229(SCL_PIN, SDO_PIN); // TTP229(sclPin, sdoPin)

void setup()
{
Serial.begin(115200);
Serial.println("Start Touching One Key At a Time!");
}

void loop()
{
uint8_t key = ttp229.ReadKey16(); // Blocking
if (key) Serial.println(key);

// uint8_t key = ttp229.GetKey16(); // Non Blocking
// Serial.println(key);
}


Qualche suggerimento? Gazie!

Gianky00


Go Up