keypad con mcp23017 e openGLCD: conflitto??

Salve ragazzi,
sto tentando di fare funzionare un keypad 4x4 tramite expander mpc23017 abbinato ad un display grafico con libreria openglcd.
Il mio problema è il seguente: il solo codice relativo al keypad funziona bene, riesco a vedere i caratteri sul seriale, ma appena inserisco quelle 4 righe relative al “GLCD” non funziona piu nulla. Quelle stesse 4 righe in un altro sketch separato funzionano…non capisco se ci possa essere un problema di conflitto…spero mi possiate illuminare. Di seguito il codice…
Grazie a tutti

#include <openGLCD.h>
#include <Keypad_MC17.h>
#include <Wire.h>
#define I2CADDR 0x20
int ok;
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
char keys[ROWS][COLS] = {
  {'1', '2', '3', 'A'}, 
  {'4', '5', '6', 'B'}, 
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {0,1,2,3}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {4,5,6,7}; //connect to the column pinouts of the keypad

Keypad_MC17 keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS, I2CADDR);

void setup(){
  keypad.begin( );
  Serial.begin(9600);
       GLCD.Init();
       GLCD.SelectFont(System5x7);
       GLCD.CursorTo(0, 1);
       GLCD.print("ciao");      
}
  
void loop(){
  char key = keypad.getKey();
  if (key){
    Serial.println(key); 
    }
}

nessuno puo' darmi qualche suggerimento? :(

Un display grafico. Quale ?

ciao nad, è un Display Grafico 128x64 - KS0108

Come è collegato ? Quali pin usa ?

Ecco la lista dei pin che ho collegato:

GND Connect to GND +5 volts Connect to +5v (Vo) Contrast in Connect to Wiper (middle pin) of contrast pot D_I A3 R_W A2 EN A4 D0 PIN 8 D1 PIN 9 D2 PIN 10 D3 PIN 11 D4 PIN 4 D5 PIN 5 D6 PIN 6 D7 PIN 7 CSEL1 A0 CSEL2 A1 Reset in Connect to +5v (Vee/Vout) Contrast out connect to 1 leg of Contrast pot Backlight Anode +5v (See datasheet for resistor value) Backlight Cathode GND

Grazie

Ovvio il problema. Il bus I2C usa SDA e SCL che sono i pin A4 e A5 (Arduino Uno) Sulla scheda Arduino Uno vedi dei pin SDA/SCL ma sono solo un "doppione" di A4 e A5. Non puoi usare A4 per il display e per il MCP.

scusami nad, non ho ben capito. Il fatto è che con questo collegamento (adesso non ricordo se è esattamente questo perche ho preso spunto da una guida online che seguii a suo tempo) il mio display funziona. Smette di funzionare non appena abbino il codice relativo al keypad collegato sui pin dell'expander...supponendo di voleve separare i codici per display e keypad ottengo due codici funzionanti.

Tu stai usando lo stesso pin A4 per due scopi diversi e questo NON è possibile.

O lo usi per il display o lo usi per il bus I2C (dove, oltretutto, A4 ed A5 sono fissi).

Guglielmo

Grazie Guglielmo per la risposta, ora è chiaro. Visto che A4 è fisso per I2C, ho la possibilità di cambiare il pin del display “EN” ?

Vedo che liberi tu hai ancora i pin 2, 3, 12, 13 ... vedi se, magari modificando qualche cosa nella libreria, o in qualche chiamata di inizializzazione, puoi riassegnare quel pin ad uno di quelli che attualmente non stai usando.

Purtroppo, non avendola mai usata, non la conosco e di più non so dirti.

Guglielmo

In teoria nella libreria c'e' il file: PinConfig_ks0108-Uno.h Modifica la riga: #define glcdPinEN A4

nid69ita: In teoria nella libreria c'e' il file: PinConfig_ks0108-Uno.h Modifica la riga: #define glcdPinEN A4

Provo e vi faccio sapere, grazie mille ragazzi

Sarebbe bello se poi scrivessi se funziona.

In ogni caso, secondo me sarebbe meglio usare l'mpc per il display e connettere i tasti direttamente all'Adruino.

Altra soluzione sarebbe cambiare display: altri display equivalenti al tuo hanno il bus SPI.

Questione risolta! ho cambiato al connessione del pin EN: da A4 a D3, funziona perfettamente. Avevo provato anche A6 o A7 ma non va perchè deve essere necessariamente digitale....

Grazie a tutti