domanda perché questa riga si colora di rosso nello sketch ?
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
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 ![]()
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ì?
![]()
non è un problema non te ne preoccupare, gli errori li vedi solo quando fai la compilazione ![]()
![]()
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... ![]()
a me compila regolarmente
se ci dai più informazioni, ad esempio le scritte che appaiono relative all'errore....