Bonjour,
Je bute sur un problème de type de variable que je veux visualiser sur un écran LCD .
Voici mon code:
/* Lecture LCD toutes les 1s */
if(millis() - DebutChronoLcdMs >= 1000)//permet de ne pas saturer la boucle loop() et rend le mouvement des servos plus fluide
{
static int StringToPrint;
lcd.setCursor(0,0);lcd.print(F("[Speed engines 1&2]"));
lcd.setCursor(0,1);lcd.print(F("S1 = "));lcd.print(vitesse1);lcd.print(F(" tr/mn"));
lcd.setCursor(0,2);lcd.print(F("S2 = "));lcd.print(vitesse2);lcd.print(F(" tr/mn"));
lcd.setCursor(0,3);
switch(StringToPrint)
{
case 0:lcd.print("Aux.: " + readAuxType() + " ");break;
case 1:lcd.print("Sync.: " + (synchroIsActive == true)?"Yes":"No ");break;
case 2:lcd.print("Secu.: " + (SecurityIsON == true)? "Yes":"No ");break;
}
(StringToPrint <= 2)?StringToPrint++:StringToPrint=0;
DebutChronoLcdMs=millis(); /* Restart the Chrono for the LCD */
}
String readAuxType()
{
String AuxType[4]={"(o)","(\\/)","(\\|/)","(<>)"};
if (auxChannel == 1) return AuxType[0];//Aux non connecte
if (auxChannel == 2) return AuxType[2];//Aux connecte a inter 3 positions
if (auxChannel == 3 || auxChannel == 5 ||auxChannel == 6) return AuxType[1];//Aux connecte a inter 2 positions
if (auxChannel == 4) return AuxType[3];//Aux connecte a direction
}
Je ne vois pas correctement les deux lignes:
case 1:lcd.print("Sync.: " + (synchroIsActive == true)?"Yes":"No ");
case 2:lcd.print("Secu.: " + (SecurityIsON == true)? "Yes":"No ");
Je ne vois que Yes et No
Le but étant de changer d'info toutes les 1s sur la 3eme ligne du LCD!
Par contre, ma function readAuxType définie en String ne fonctionne pas:
Elle doit retourner un 'char':
char* readAuxType()
{
char* AuxType[4]={"(o)","(\\/)","(\\|/)","(<>)"};
if (auxChannel == 1) return AuxType[0];//Aux non connecte
if (auxChannel == 2) return AuxType[2];//Aux connecte a inter 3 positions
if (auxChannel == 3 || auxChannel == 5 ||auxChannel == 6) return AuxType[1];//Aux connecte a inter 2 positions
if (auxChannel == 4) return AuxType[3];//Aux connecte a direction
}
peux tu tester ce code
attention, à l'affectation des pinoches du LCD
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
long DebutChronoLcdMs;
boolean synchroIsActive=true;
boolean SecurityIsON=false;
int auxChannel=3;
int vitesse1=111;
int vitesse2=222;
String retour="";
void setup() {
lcd.begin(20, 4); // initialise le LCD
Serial.begin(57600);
}
void loop() {
/* Lecture LCD toutes les 1s /
if(millis() - DebutChronoLcdMs >= 2000)//permet de ne pas saturer la boucle loop() et rend le mouvement des servos plus fluide
{
static int StringToPrint;
lcd.setCursor(18,3);lcd.print(StringToPrint);
lcd.setCursor(0,0);lcd.print(F("[Speed engines 1&2]"));
lcd.setCursor(0,1);lcd.print(F("S1 = "));lcd.print(vitesse1);lcd.print(F(" tr/mn"));
lcd.setCursor(0,2);lcd.print(F("S2 = "));lcd.print(vitesse2);lcd.print(F(" tr/mn")); //lcd.clear();
lcd.setCursor(0,3);
lcd.print(" ");lcd.setCursor(0,3);
switch(StringToPrint)
{
case 0:lcd.print("Aux.: "); retour=readAuxType();lcd.print(retour);lcd.print(" ");break;
case 1:lcd.print("Sync.: ");if (synchroIsActive == true){lcd.print("Yes");}else{lcd.print("No ");}break;
case 2:lcd.print("Secu.: ");if (SecurityIsON == true) {lcd.print("Yes");}else{lcd.print("No ");}break;
}
//if (StringToPrint <= 1){StringToPrint++;}else{StringToPrint=0;}
(StringToPrint <= 1)?StringToPrint++:StringToPrint=0; //lcd.setCursor(18,3);lcd.print(StringToPrint);
DebutChronoLcdMs=millis(); / Restart the Chrono for the LCD */
}
}
String readAuxType()
{
String AuxType[4]={"(o)","(\/)","(\|/)","(<>)"};
if (auxChannel == 1) return AuxType[0];//Aux non connecte
if (auxChannel == 2) return AuxType[2];//Aux connecte a inter 3 positions
if (auxChannel == 3 || auxChannel == 5 ||auxChannel == 6) return AuxType[1];//Aux connecte a inter 2 positions
if (auxChannel == 4) return AuxType[3];//Aux connecte a direction
Il me reste un problème avec le caractère \ qui me pose un problème !
Le code suivant fonctionne bien pour (o) et pour (<>) !
char* readAuxType()
{
// char* AuxType[4]={"(o)","(\\/)","(\\|/)","(<>)"};
char* AuxType[4]={"(o)","(\\/)","(\\|/)","(<>)"};
if (auxChannel == 1) return AuxType[0];//Aux non connecte
if (auxChannel == 2) return AuxType[2];//Aux connecte a inter 3 positions
if (auxChannel == 3 || auxChannel == 5 ||auxChannel == 6) return AuxType[1];//Aux connecte a inter 2 positions
if (auxChannel == 4) return AuxType[3];//Aux connecte a direction
}
(\/) et (\|/) passent bien dans la console série , le premier \ protégeant le deuxième \ !
Mais mon but est de visualiser sur le LCD (/) ou (|/) ...
Comment faire svp !!!
allez encore un test
attention aux pinoches du lcd
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
long DebutChronoLcdMs;
boolean synchroIsActive=true;
boolean SecurityIsON=false;
int auxChannel=2; //mettre de 1 à 4 pour test
void loop() {
/* Lecture LCD toutes les 1s /
if(millis() - DebutChronoLcdMs >= 2000)//permet de ne pas saturer la boucle loop() et rend le mouvement des servos plus fluide
{
static int StringToPrint;
lcd.setCursor(18,3);lcd.print(StringToPrint);
lcd.setCursor(0,0);lcd.print(F("[Speed engines 1&2]"));
lcd.setCursor(0,1);lcd.print(F("S1 = "));lcd.print(vitesse1);lcd.print(F(" tr/mn"));
lcd.setCursor(0,2);lcd.print(F("S2 = "));lcd.print(vitesse2);lcd.print(F(" tr/mn")); //lcd.clear();
lcd.setCursor(0,3);
lcd.print(" ");lcd.setCursor(0,3);
switch(StringToPrint)
{
case 0:lcd.print("Aux.: "); retour=readAuxType();lcd.print(retour);lcd.print(" ");break;
case 1:lcd.print("Sync.: ");if (synchroIsActive == true){lcd.print("Yes");}else{lcd.print("No ");}break;
case 2:lcd.print("Secu.: ");if (SecurityIsON == true) {lcd.print("Yes");}else{lcd.print("No ");}break;
}
//if (StringToPrint <= 1){StringToPrint++;}else{StringToPrint=0;}
(StringToPrint <= 1)?StringToPrint++:StringToPrint=0; //lcd.setCursor(18,3);lcd.print(StringToPrint);
DebutChronoLcdMs=millis(); / Restart the Chrono for the LCD */
}
}
String readAuxType()
{
String AuxType[5]={"(o)","(\/)","(\|/)","(<>)",("")};
if (auxChannel == 1) return AuxType[0];//Aux non connecte
if (auxChannel == 2) {lcd.write(byte(2));lcd.write(byte(2));lcd.write(byte(1));lcd.write(byte(0));return AuxType[5];}
if (auxChannel == 3 || auxChannel == 5 ||auxChannel == 6) {lcd.write(byte(2));lcd.write(byte(2));lcd.write(byte(0));return AuxType[5];}
if (auxChannel == 4) return AuxType[3];//Aux connecte a direction
puis chargement dans l'un des huit emplacements possible:
if(LCDML.getCursorPos()==8) lcd.setCursor(15,0);readAuxTypeLCD();
void readAuxTypeLCD()
{
switch(auxChannel)
{
case 1:lcd.print(F("(o)"));break;//Aux non connecte
case 2:lcd.print(F("("));lcd.write(byte(7));lcd.print(F("|/)"));break;//Aux connecte a inter 3 positions
case 3:
case 5:
case 6:lcd.print(F("("));lcd.write(byte(7));lcd.print(F("/)"));break;//Aux connecte a inter 2 positions
case 4:lcd.print(F("(<>)"));break;//Aux connecte a direction
}
}
as tu testé en dessinant un caractère spécial comprenant le double slash
et un autre comprenant la barre verticale et le back_slash
cela accentuerait l'effet visuel du sélecteur
as tu testé en dessinant un caractère spécial comprenant le double slash
et un autre comprenant la barre verticale et le back_slash
cela accentuerait l'effet visuel du sélecteur
Non, je suis limité en définition de caractères spéciaux car j'utilise un menu qui en définit déjà 5 à lui seul !
LCDMenuLib v2beta2