Bonjour a tous alors moi c'est Alf , sa fait un moment que je connais et utilise des arduino mais je suis toujours débutant dans la programmation
ce projet étant un peut plus compliquer que a mon habitude je me permet de crée de post pour demander quelque information
la base du projet est une copie d'un projet existant mais modifier a ma sauce
"Creative lab RT soldering station"
mais je veux modifier l’écran et rajouter un encodeur rotatif et donc pour le moment tout se passe "relativement" bien
#include <ClickEncoder.h>
#include <TimerOne.h>
#include <openGLCD.h>
#include <bitmaps/neutlogo.h>
ClickEncoder *encoder;
const byte pinStandby =A5 ;
const int Temp1Ini = 250;
const int Temp2Ini = 300;
const int Temp3Ini = 350;
const int standbyTemp = 50;
const int maxTemp = 420;
const int mainLoopDelay = 5;
const int targetTempIni = 350;
const int actualTempIni = 375;
gText Temp1 ;
gText Temp2 ;
gText Temp3 ;
gText Target ;
gText actualTempD ;
gText celsius ;
int targetTemp;
int actualTemp;
int targetTempPb;
int TemP1 ;
int TemP2 ;
int TemP3 ;
void setup(){
encoder = new ClickEncoder(11, 10, 12);
Timer1.initialize(1000);
Timer1.attachInterrupt(timerIsr);
pinMode(pinStandby, INPUT_PULLUP);
LCD_ini();
TemP1 = Temp1Ini;
TemP2 = Temp2Ini;
TemP3 = Temp3Ini;
targetTemp = targetTempIni;
targetTempPb = targetTempIni;
actualTemp = actualTempIni;
}
void loop(){
LCD_update(); // function to update the display (see below)
pushbutton_control();
Stanby(); // funct. to increment and decr. the temperature
delay(mainLoopDelay);
}
void pushbutton_control() {
targetTempPb += encoder->getValue();
if (targetTempPb != targetTemp){
if (targetTempPb > maxTemp) targetTempPb = maxTemp;
if (targetTempPb < 25) targetTempPb = 25;
}
ClickEncoder::Button b = encoder->getButton();
if (b != ClickEncoder::Open) {
targetTemp = targetTempPb ;
}
}
void Stanby (){
if (digitalRead(pinStandby) == LOW) targetTemp = standbyTemp ;
}
void LCD_update() {
if (TemP1 < 100) Temp1.CursorToXY(GLCD.Width-110, GLCD.Height-61);
else Temp1.CursorToXY(GLCD.Width-119, GLCD.Height-61);
Temp1.print(TemP1);
if (TemP2 < 100) Temp2.CursorToXY(GLCD.Width-69, GLCD.Height-61);
else Temp2.CursorToXY(GLCD.Width-77, GLCD.Height-61);
Temp2.print(TemP2);
if (TemP3 < 100) Temp3.CursorToXY(GLCD.Width-25, GLCD.Height-61);
else Temp3.CursorToXY(GLCD.Width-33, GLCD.Height-61);
Temp3.print(TemP3);
if (actualTemp < 100) actualTempD.CursorToXY(GLCD.Left+71, GLCD.CenterY-1);
else actualTempD.CursorToXY(GLCD.Left+63, GLCD.CenterY-1);
actualTempD.print(actualTemp);
if (targetTemp <100) Target.CursorToXY(GLCD.Width-110, GLCD.Height-18);
else Target.CursorToXY(GLCD.Width-119, GLCD.Height-18);
Target.print(targetTemp);
}
void LCD_ini() {
GLCD.Init();
GLCD.ClearScreen();
GLCD.DrawBitmap(neutlogo, GLCD.Width/2 - 32, 0);
delay(1500);
GLCD.ClearScreen();
GLCD.SelectFont(Cooper19);
GLCD.print("NEUTRON");
GLCD.CursorTo(0,1);
GLCD.print("soldering");
GLCD.CursorTo(0,2);
GLCD.print("STATION");
delay(1200);
GLCD.ClearScreen();
GLCD.DrawRect(GLCD.Left+1, GLCD.Top+1, GLCD.Width - 1, GLCD.Height - 1);
GLCD.DrawLine( GLCD.Left+41, GLCD.Top+1, GLCD.Left+41, GLCD.Top+19);
GLCD.DrawLine( GLCD.Left+87, GLCD.Top+1, GLCD.Left+87, GLCD.Top+19);
GLCD.DrawLine( GLCD.Left+1, GLCD.Top+19, GLCD.Left+127, GLCD.Top+19);
Temp1.DefineArea(GLCD.Width-119, GLCD.Height-61, 3, 0, fixednums8x16);
Temp2.DefineArea(GLCD.Width-77, GLCD.Height-61, 3, 0, fixednums8x16);
Temp3.DefineArea(GLCD.Width-33, GLCD.Height-61, 3, 0, fixednums8x16);
Target.DefineArea(GLCD.Width-119, GLCD.Height-18, 3, 0, fixednums7x15);
actualTempD.DefineArea(GLCD.Left+63, GLCD.CenterY-1, 3, 0, fixednums15x31);
celsius.DefineArea(GLCD.Left+111, GLCD.CenterY-1, 1, 0, fixednums15x31);
celsius.print(":");
}
void timerIsr() {
encoder->service();
}
donc voici l’état actuel , et je bute sur plusieurs problème et je ne connais pas les terme ou les commande qui me permette de faire se que je voudrai xD
mon premier souci vient du fait que malgré que j'ai crée des "Area" je suis obliger de faire des "CursortoXY" pour éviter un défilement des nombre de plus sa n'efface pas vraiment donc il me reste toujours le 1 des 100 en dessous de 100 -_- et "ClearArea" efface tout l’écran
ensuite j'aimerai que les 3 valeur supérieure soi des "référence" et que avec le rotary le puisse sélectionner la valeur que je désire pour
click-long permet la modification de la valeur
double-click sélection de la valeur en tant que valeur " Target" ( la valeur en dessous a gauche)
et la je ne sais pas le comment , un menu ? mais ce n'est pas un menu mais des valeur interactive ? ici je suis en territoire inconnu et je ne trouve pas vraiment se que je veux malgré mes recherche
donc voila je suis a la recherche d'information si quelqu'un connait des solution ou des tuto qui sont en lien avec mes souci je suis preneur , merci a tous