Ciao a tutti,
sto realizzando un programma per una macchina di taglio automatico con lcd e stepper motor.
nella realizzazione dell'iterfaccia utente e di programmazione sto trovando difficoltà a editare un valore tramite KeyPad.
vorrei capire in che modo posso visualizzare su lcd un parametro e contemporaneamente editarlo.
Il codice seguente e in fase di creazione, vorrei editare la variabile step_cm
#include <Wire.h>
#include <EEPROM.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
#include <Keypad.h>
const byte numRows= 4;
const byte numCols= 4;
char keys[numRows][numCols]= {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'} };
byte rowPins[numRows] = {23,25,27,29}; //Rows 0 to 3
byte colPins[numCols]= {31,33,35,37}; //Columns 0 to 3
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, numRows,numCols );
//*************************** in/out ************
int fine_corsa_sx = 50;
int fine_corsa_dx = 49 ;
int program = 48 ;
int dir = 47;
int step_m = 46;
// ******************* variabili programma ************
int ciclo_taglio= 0;; // ciclo attuale
int prog = 0;// programmazione in corso se = 1
int para_prog = 0;// parametri editabili in programmazione
//****************** variabili EEProm *****************
int step_cm;
int accelerazione;
int n_tagli; // ripetizione tagli da utente
int taglio_lung; //lunghezza di taglio da utente
int speed_av; // velocità avanzamento stepper da utente
int delay_t ; // delay fra avanzamento e inizio taglio
void setup()
{
lcd.init();
lcd.backlight();
pinMode(fine_corsa_sx, INPUT_PULLUP);
pinMode(fine_corsa_dx, INPUT_PULLUP);
pinMode(program, INPUT_PULLUP);
pinMode(dir, OUTPUT);
pinMode(step_m, OUTPUT);
readeprom();// **********leggo parametri eeprom******
}
void loop(){
if (digitalRead(program) == 1){programmazione();} // entra in programmazione
}
void readeprom(){
step_cm = EEPROM.read(1);
accelerazione = EEPROM.read(2);
n_tagli = EEPROM.read(3);
taglio_lung = EEPROM.read(4);
speed_av = EEPROM.read(5);
delay_t = EEPROM.read(6);
}
void writeeprom(){
EEPROM.write (1,step_cm);
EEPROM.write (2,accelerazione);
EEPROM.write (3,n_tagli);
EEPROM.write (4,taglio_lung);
EEPROM.write (5,speed_av);
EEPROM.write (6,delay_t);
}
void programmazione(){
if (prog == 0){lcd.clear();}
prog = 1;
char customKey = kpd.getKey();
lcd.setCursor(0,0);
lcd.print("Step x Cm ");
lcd.print(step_cm);
lcd.setCursor(0,1);
lcd.print("Acceleraz. ");
lcd.print(accelerazione);
lcd.setCursor(0,2);
lcd.print("Delay ms ");
lcd.print(delay_t);
if (para_prog == 0 ){ lcd.setCursor(19,0);lcd.print("*");}else {lcd.setCursor(19,0);lcd.print(" ");}
if (para_prog == 1 ){ lcd.setCursor(19,1);lcd.print("*");}else {lcd.setCursor(19,1);lcd.print(" ");}
if (para_prog == 2 ){ lcd.setCursor(19,2);lcd.print("*");}else {lcd.setCursor(19,2);lcd.print(" ");}
if (customKey == 'A'){para_prog =para_prog +1;if(para_prog >=3){para_prog =0;}}
if (para_prog == 0 ){ step_cm = customKey;} // <<< non riesco ad inserire
}