Interface de réglages pour robotique, domotique

Pour ne pas avoir besoin de brancher un PC pour modifier les paramètres d'un montage, robotique, domotique, je propose ce sous-programme qui fonctionne avec un LCD et un poussoir connecté à une pin (13, polarisé négativement). Le but étant de modifier des valeurs de l'EEPROM ou de choisir un sketch parmi d'autres avec des boucles wile. Le LCD peut aussi être enlevé après réglages.

//pin 13 à - par R; si + par poussoir : en+ si >0.3s; en- si <0.3
#include <Wire.h>// i2c
#include <LiquidCrystal_I2C.h> 
LiquidCrystal_I2C lcd(0x27, 16, 2); // (adresse i2c, nombre de colonnes, nombre de lignes)
// sda -->A4      scl--> A5
char* titre[]={"x ","y ","prgm A ","prgm B ","max x ", "min x ", "max y ", "-", "-"};
  byte tpon;
  #include <EEPROM.h>
void setup(){ 
 lcd.begin(); // initialise l'afficheur LCD 
 lcd.display();  // activer l'affichage
 pinMode(13, INPUT); //poussoir regl
}
void loop(){
  
/////// prgm principal

// version + si bcp param
while (digitalRead(13)==1){
lcd.backlight();  //retroeclairage(ou dans setup
lcd.clear();
delay (1500); /////////          nb param (7
for(byte t=0;t<7;t=t+1){
lcd.clear();
tpon =EEPROM.read(t);
lcd.print(titre[t]); 
lcd.print(tpon);
lcd.setCursor(0, 1); //choix titre (1 ou -1 suivant afficheur
lcd.print("autre param ?");
delay(600);
for(byte x=0;x<60;x=x+1){
if (digitalRead(13)==1)goto suiteTitres;
delay(50);
}
for(byte r=0; r<35; r=r+1){
lcd.setCursor(0, 1); 
lcd.print("reglage : ");
lcd.print(tpon);
lcd.print("    ");   
if (digitalRead(13)==1){
delay(300);
if (digitalRead(13)==1)tpon=tpon+1;
else tpon=tpon-1;  
r=0;
}
delay(80);
} // boucle reglage
EEPROM.update(t, tpon);
suiteTitres:;
delay(200);
} // boucle titres   
}//fin reglages, par Pacien
//lcd.noBacklight(); // option eco energie
lcd.clear();
}//loop

La version courte est encore plus rustique, mais suffisante pour une horloge ou quelques paramètres.

//pin 13 à - par R; si + par poussoir : en+ si >0.3s; en- si <0.3
#include <Wire.h>// i2c
#include <LiquidCrystal_I2C.h> 
LiquidCrystal_I2C lcd(0x27, 16, 2); // (adresse i2c, nombre de colonnes, nombre de lignes)
// sda -->A4      scl--> A5
char* titre[]={"x ","y ","prgm A ","prgm B ","max x ", "min x ", "max y ", "-", "-"};
  byte tpon;
  #include <EEPROM.h>
void setup(){ 
 lcd.begin(); // initialise l'afficheur LCD 
 lcd.display();  // activer l'affichage
 pinMode(13, INPUT); //poussoir regl
}
/////// prgm principal

// version courte 
while (digitalRead(13)==1){
lcd.backlight();  //retroeclairage (ou setup
lcd.clear();
delay (1500);////////       n param (7
for(byte t=0;t<7;t=t+1){
tpon =EEPROM.read(t);  
for(byte r=0; r<33; r=r+1){
lcd.clear();
lcd.print(titre[t]);
lcd.print(tpon);
if (digitalRead(13)==1){
delay(300); 
if (digitalRead(13)==1)tpon=tpon+1;
else tpon=tpon-1;   
r=0;
}
delay(80);
} // boucle reglage
EEPROM.update(t, tpon);
} // boucle titres
}//fin reglages, par Pacien
//lcd.noBacklight(); // option eco energie
lcd.clear();

}// loop

What do you want to do ?
New mail
Copy