marco2120:
comunque continua ancora a non funzionare e i pin cono collegati in modo corretto
Mah, ma sei sicuro che le connessioni siano corrette? Hai altre cose collegate alla WeMos? Hai anche periferiche con interfacce I2C e SPI? Puoi allegare una foto della WeMos e relativi collegamenti, e magari farci anche uno schemino di tutto (va bene pure un disegnino su carta che poi fotografi e metti qui come allegato).
Per dire, vedo che tu usi D1 ma quello è riservato alla seriale, e questo lo eviterei (quantomeno per poter fare debug col monitor seriale), sposta tutto da D2 in poi.
Io ho ho ancora una WeMos D1 R1, ma non ho un keypad per provare, ma in ogni caso intanto al tuo posto farei uno sketch di prova solo per questo aspetto (come dico sempre, "isolare i problemi uno alla volta"). Poi userei simboli per identificare facilmente righe e colonne, quindi R1, R2, C1, C2, eccetera, rimappandole sui pin Dx corrispondenti (e non è detto che la colonna 1 sia sul pin D1 ad esempio..).
e per MIA convenzione, metto "P_" come prefisso per evidenziare tutti i simboli che rappresentano i pin.
Quindi un piccolo sketch di prova sarebbe questo (devi adattare i pin che usi realmente, oppure connetti il keypad come indicato qui, ma NON collegare nient'altro):
#define P_C1 D2
#define P_C2 D3
#define P_C3 D4
#define P_R1 D5
#define P_R2 D6
#define P_R3 D7
#define P_R4 D8
byte rowPins[ROWS] = {P_R1, P_R2, P_R3, P_R4}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {P_C1, P_C2, P_C3}; //connect to the column pinouts of the keypad
void setup() {
Serial.begin(9600);
pinMode(P_C1, OUTPUT);
digitalWrite(P_C1, HIGH);
pinMode(P_C2, OUTPUT);
digitalWrite(P_C2, HIGH);
pinMode(P_C3, OUTPUT);
digitalWrite(P_C3, HIGH);
pinMode(P_R1, INPUT_PULLUP);
pinMode(P_R2, INPUT_PULLUP);
pinMode(P_R3, INPUT_PULLUP);
pinMode(P_R4, INPUT_PULLUP);
}
void loop()
{
// Test primo pulsante della prima colonna
digitalWrite(P_C1, LOW);
if ( digitalRead(P_R1) == LOW )
Serial.println("PREMUTO!");
digitalWrite(P_C1, HIGH);
delay(200);
}
Se premi il primo tasto della prima colonna (dovrebbe essere l'"1") leggi sulla seriale "1"? Se si, il collegamento di riga 1 e colonna 1 è ok, e se vuoi puoi passare ad esempio alla seconda colonna.
Se non vedi "PREMUTO!" allora hai una mappatura diversa (prova tutti i pulsanti, uno per volta e vedi per quale leggi "PREMUTO!") o hai fatto male qualche collegamento, o il keypad (hai un link?) non funziona bene.
Se quindi funziona, prova questo sketch (sempre adattando le costanti con i pin che hai collegato) e fammi sapere se va:
#define P_C1 D2
#define P_C2 D3
#define P_C3 D4
#define P_R1 D5
#define P_R2 D6
#define P_R3 D7
#define P_R4 D8
#include <Keypad.h>
const byte ROWS = 4;
const byte COLS = 3;
byte rowPins[ROWS] = {P_R1, P_R2, P_R3, P_R4};
byte colPins[COLS] = {P_C1, P_C2, P_C3};
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup() {
Serial.begin(115200);
}
void loop()
{
char key = keypad.getKey();
if (key)
Serial.println(key);
}