un grosso ciao e un'aiuto se possibile

domanda perché questa riga si colora di rosso nello sketch ?

Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);

marty75:
Queste sono le prime cose che per logica credo siano necessarie per continuare con il programma:

Dovresti però racchiudere il codice dentro ai tag "code", come richiesto dal REGOLAMENTO, vedi il punto 7.
Modifica il tuo post cliccando in basso a destra su "More..." quindi "Modify", a quel punto seleziona tutto il codice e clicca sul pulsante in alto a sinistra "</>".

Grazie per la precisazione.

marty75:
Grazie per la precisazione.

Prego, però io parlo del tuo post #16, con il codice che stavi provando, non solo l'ultimo... Per cui fallo, non solo perché è richiesto dal regolamento, ma anche fino a che non metti a posto il codice rischi di non ricevere altre risposte...

Fatto docdoc :wink:

marty75:
...Queste sono le prime cose che per logica credo siano necessarie per continuare con il programma:...

#include <SoftwareSerial.h>

#include <DFRobotDFPlayerMini.h>
#include <LiquidCrystal_I2C.h>
#include <Keyboard.h>
#include <Wire.h>
...



...

Penso che le librerie siano da inserire proprio man mano che servono ai vari pezzi di programma. Inserirle senza sapere se saranno usate o no ha poco senso e può essere dannoso.

Per quanto riguarda il tuo primo passo "...un programma prende l'input da tastiera e lo scrive sulla porta seriale..." puoi guardare questo esempio che fornisce la "pappa quasi scodellata". Tu però analizza bene le righe da 12 a 23 per capire a cosa servono e come modificarle per la tua tastiera.

Ciao,
P.

intendi così?
Immagine.jpg

non è un problema non te ne preoccupare, gli errori li vedi solo quando fai la compilazione :wink:

Immagine.jpg

grazie Patrick ho risolto, caricavo le librerie del tastierino sbagliate. Adesso mi trovo nelle condizioni che il tastierino viene riconosciuto e scrive (anche se i tasti non corrispondono ) sul monitor seriale. Vado avanti e ultimo il primo step del programma. Grazie

buon pomeriggio a tutti , bene ho concluso il primo passo cioè il riconoscimento del tastierino 4x4 e la scrittura dei caratteri sulla seriale. Mi trovo a lavorare sul secondo programma , scrivere sull' lcd cio che viene scritto sul monitor seriale. Sull' Lcd che ha due linee da 16 caratteri , scriverei sulla prima a partire dal carattere 0 " credito " subito dopo vorrei inserire una serie di 4 zeri ( cifra che verrà variata in base alla funzione insert coin), sulla seconda linea, sempre a partire dal carattere 0 scriverei "brano" e successivamente una cifra di 4 zeri relativa la selezione del brano ( ovviamente i 4 zeri verranno modificati dal tastierino 4x4). Grazie a tutti per la collaborazione , io nel frattempo anche facendo ricerche sul forum continuerò a trovare soluzioni.

Qui puoi trovare degli esempi che ti possono aiutare. In particolare SerialDisplay per il passaggio da seriale a display (da modificare per ottenere da tastierino a display) e HelloWorld per il posizionamento del cursore e dei caratteri sul display stesso.

Ciao,
P.

Ragazzi, questo è il mio risultato fino ad ora. Faccio fatica ad integrare il serial display a ciò che ho già scritto nel programma. Mi sapete dire come e dove devo intervenire affinché io possa modificare il numero del brano e del credito ( quest'ultimo solo dopo aver installato la gettoniera) grazie!

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>

LiquidCrystal_I2C lcd(0x27,20,4);  // set the LCD address to 0x27 for a 16 chars and 2 line display
 
const byte ROWS = 4; //quattro righe
const byte COLS = 4; //quattro colonne
byte colPins[4] = {9,8,7,6}; // Pin a cui sono connesse le colonne
byte rowPins[4] = {5,4,3,2}; // Pin a cui sono connesse le righe
char Keys[4][4]= //creo la matrice dei tasti della tastiera.
{
{'1','2','3','A'} ,
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
Keypad keyp = Keypad(makeKeymap(Keys), rowPins, colPins,4,4);
 
void setup(){
  Serial.begin(9600);
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("Credito");
  lcd.setCursor(12,0);
  lcd.print("0000");
  lcd.setCursor(0,1);
  lcd.print("Brano");
  lcd.setCursor(12,1);
  lcd.print("0000");
}
 
void loop(){
  char key = keyp.getKey();
  if (key){
    Serial.println(key);
  }
}

Guarda, ti metto un esempio che feci a suo tempo
Devi sostituire i parametri della tua tastiera, perchè io usai un 4x3

#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 2);
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;

const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
char keys[ROWS][COLS] = {
  {'1', '2', '3'},
  {'4', '5', '6'},
  {'7', '8', '9'},
  {'*', '0', '#'}
};
byte rowPins[ROWS] = {7, 2, 3, 5}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {6, 8, 4}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

char customKey ;
char data[5];
byte data_count = 0 ;
int number ;
uint8_t type ;

void setup() {
  mySoftwareSerial.begin(9600);
  Serial.begin(115200);
  lcd.init();
  lcd.backlight();
  lcd.clear();
  lcd.setCursor(0, 1);
  lcd.print("Scegli canz.");
  Serial.println();
  Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)"));
  if (!myDFPlayer.begin(mySoftwareSerial, true, false)) {  //Use softwareSerial to communicate with mp3.
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
     }
  Serial.println(F("DFPlayer Mini online."));
  Serial.print(myDFPlayer.readFileCounts());
  Serial.println(F("  Canzoni disponibili."));
  lcd.setCursor(0, 0);
  lcd.print("Canzoni Tot ");
  lcd.print(myDFPlayer.readFileCounts());
  lcd.setCursor(12, 1);
  lcd.blink();

  myDFPlayer.volume(15);  //Set volume value. From 0 to 30
  // myDFPlayer.play(22);  //Play mp3
}

void loop() {
  customKey = keypad.getKey();
  if (customKey >= '0' && customKey <= '9' && data_count <= 3) {
    data[data_count] = customKey;
    lcd.setCursor(0, 1);
    lcd.print("Scegli canz.");
    lcd.setCursor(data_count + 12, 1);
    lcd.print(data[data_count]);
    Serial.print(customKey);
    data_count++;
  }
  if (customKey == '*' ) {
    Serial.print("  ");
    number = atoi (data );
    Serial.println ( number);
    //data_count = 0 ;
    myDFPlayer.play(number);

    Serial.print(F("Sto' suonando la canzone "));
    Serial.println(myDFPlayer.readCurrentFileNumber()); //read current play file number
    lcd.clear();
    lcd.setCursor(0, 1);
    lcd.print("Scegli canz.");
    lcd.setCursor(0, 0);
    lcd.print(F("Sto suonando "));
    lcd.print(myDFPlayer.readCurrentFileNumber()); //read current play file number
    lcd.setCursor(12, 1);
    lcd.blink();
    clearData() ;
  }
  visua_dati() ;
  // se si vuole passare al brano successivo decommentare le seguenti righe
  //  if ( type == DFPlayerPlayFinished ) {
  //    myDFPlayer.next();
  //  }
}

void visua_dati() {
  if (myDFPlayer.available()) {
    type = myDFPlayer.readType() ;
    printDetail(myDFPlayer.readType(), myDFPlayer.read());
  }
}

void printDetail(uint8_t type, int value) {
  switch (type) {
    case TimeOut:
      Serial.println(F("Time Out!"));
      break;
    case WrongStack:
      Serial.println(F("Stack Wrong!"));
      break;
    case DFPlayerCardInserted:
      Serial.println(F("Card Inserted!"));
      break;
    case DFPlayerCardRemoved:
      Serial.println(F("Card Removed!"));
      break;
    case DFPlayerCardOnline:
      Serial.println(F("Card Online!"));
      break;
    case DFPlayerUSBInserted:
      Serial.println(F("USB Inserted!"));
      break;
    case DFPlayerUSBRemoved:
      Serial.println(F("USB Removed!"));
      break;
    case DFPlayerPlayFinished:
      Serial.print(F("Number:"));
      Serial.print(value);
      Serial.println(F(" Play Finished!"));
      break;
    case DFPlayerError:
      Serial.print(F("DFPlayerError:"));
      switch (value) {
        case Busy:
          Serial.println(F("Card not found"));
          break;
        case Sleeping:
          Serial.println(F("Sleeping"));
          break;
        case SerialWrongStack:
          Serial.println(F("Get Wrong Stack"));
          break;
        case CheckSumNotMatch:
          Serial.println(F("Check Sum Not Match"));
          break;
        case FileIndexOut:
          Serial.println(F("File Index Out of Bound"));
          break;
        case FileMismatch:
          Serial.println(F("Cannot Find File"));
          break;
        case Advertise:
          Serial.println(F("In Advertise"));
          break;
        default:
          break;
      }
      break;
    default:
      break;
  }
}

void clearData() {
  while (data_count != 0) {
    data[data_count--] = 0;
  }
  return;
}

qui ho un errore, perché?

customKey = keypad.getKey();

dalla sfera di cristallo non lo vedo... :smiley:

a me compila regolarmente

se ci dai più informazioni, ad esempio le scritte che appaiono relative all'errore....