Newer
Older
// This is the ESPUI example
// it does nothing more yet and is not connected with the stepper motor code
#include <ESPUI.h> // https://github.com/s00500/ESPUI
#include "common.h"
Malaurie Bernard
committed
#include "syringefilled.h"
#define syringe_pump_length_mm 50
Malaurie Bernard
committed
int status_label_id1;
int status_label_id2;
int graph_id;
int millis_label_id;
int test_switch_id;
uint16_t etat_button_seringue;
uint16_t bouton1, bouton2, bouton3, bouton4, bouton5, bouton6, bouton7, bouton8, bouton9, bouton10, bouton11, bouton12, bouton13, bouton14, bouton15, bouton16, bouton17, bouton18, bouton19, bouton20, bouton21, bouton22, bouton23, bouton24, bouton25, bouton26, bouton27, bouton28, bouton29, bouton30, bouton31, bouton32, bouton33, bouton34, bouton35, bouton36, bouton37, bouton38, bouton39, bouton40, bouton41, bouton42, bouton43, bouton44, bouton45, bouton46, bouton47, bouton48, bouton49, bouton50, bouton51, bouton52, bouton53, bouton54, bouton55, bouton56, bouton57, bouton58, bouton59, bouton60, bouton61, bouton62, bouton63, bouton64, bouton65, bouton66, bouton67, bouton68, bouton69, bouton70, bouton71, bouton72, bouton73, bouton74, bouton75, bouton76, bouton77, bouton78, bouton79, bouton80, bouton81, bouton82, bouton83, bouton84, bouton85, bouton86, bouton87, bouton88, bouton89, bouton90, bouton91, bouton92, bouton93, bouton94, bouton95, bouton96, bouton97, bouton98;
uint16_t zero;
uint16_t style_button, style_label, style_switcher, style_slider, style_button2, style_label2, style_slider2;
uint16_t nv_bouton_ctrl, nv_bouton;
uint16_t slider;
char couleur1[30], couleur2[30], couleur3[30], couleur4[30], couleur5[30], couleur6[30], couleur7[30], couleur8[30], couleur9[30], couleur10[30];
bool test = true;
long unsigned last_time = 0;
// Couleurs à utiliser
const char* couleurs[] = {
couleur1,
couleur2,
couleur3,
couleur4,
couleur5,
couleur6,
couleur7,
couleur8,
couleur9,
couleur10
};
uint8_t mock_read_uart(void);
void number_callback(Control* sender, int type);
void text_callback(Control* sender, int type);
void slider_callback(Control* sender, int type);
void button_status_callback1(Control* sender, int type, void* param);
void button_status_callback2(Control* sender, int type, void* param);
void button_callback(Control* sender, int type);
void pad_callback(Control* sender, int value);
void switch_status_callback1(Control* sender, int value, void* param);
void switch_status_callback2(Control* sender, int value, void* param);
void select_callback(Control* sender, int value);
void other_switch_callback(Control* sender, int value);
void button_seringue(Control* sender, int type);
void general_callback(Control* sender, int type);
void nv_bouton_ctrl_callback(Control* sender, int type);
void nv_bouton_callback(Control* sender, int type);
void position_choice(Control* sender, int type);
void go_to_zero(Control* sender, int type);
void on_off();
void web_setup ()
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
{
//Creation des différents styles
//Les verts pour la mise en mrche de la seringue
sprintf(couleur1, "background-color: #%06X;", (unsigned int) 0xb2dbbf);
sprintf(couleur2, "background-color: #%06X;", (unsigned int) 0x5a8668);
//Le rouge pour la seringue a l'arrêt
sprintf(couleur3, "background-color: #%06X;", (unsigned int) 0xc97064);
sprintf(couleur4, "background-color: #%06X;", (unsigned int) 0x762419);
//Les marrons pour la config des seringues
sprintf(couleur5, "background-color: #%06X;", (unsigned int) 0xce9f6f);
sprintf(couleur6, "background-color: #%06X;", (unsigned int) 0x926448);
sprintf(couleur7, "background-color: #%06X;", (unsigned int) 0x0a7477);
sprintf(couleur8, "background-color: #%06X;", (unsigned int) 0x052a38);
sprintf(couleur9, "background-color: #%06X;", (unsigned int) 0x044365);
sprintf(couleur10, "background-color: #%06X;", (unsigned int) 0x58b8c3);
//Création des différents onglets
uint16_t tab1 = ESPUI.addControl(ControlType::Tab, "Configurations", "Configurations");
uint16_t tab2 = ESPUI.addControl(ControlType::Tab, "Mise en marche", "Mise en marche");
uint16_t tab3 = ESPUI.addControl(ControlType::Tab, "Nouvelle Seringue", "Nouvelle seringue");
uint16_t tab4 = ESPUI.addControl(ControlType::Tab, "Paramètres avancés", "Paramètres avancés");
uint16_t tab5 = ESPUI.addControl(Tab, "", "Styled controls");
//Au dessus des tables
status_label_id1 = ESPUI.label("Etat du pousse-seringue 1 :", ControlColor::None, "A l'arrêt");
//Mettre en route le pousse-seringue
activation = ESPUI.addControl(ControlType::Switcher, "Mise en marche", "Arrêt", ControlColor::None, status_label_id1, switch_status_callback1, (void*)19);
ESPUI.setPanelStyle(status_label_id1, couleurs[2]);
ESPUI.setElementStyle(status_label_id1, couleurs[3]);
//Deplacement demandé du pousse-seringue
uint16_t main_number = ESPUI.number("Positions finale et possitionnement du pousse-seringue", position_choice, ControlColor::None, 0, 0, 50);
ESPUI.addControl(Min, "", "0", None, main_number);
ESPUI.addControl(Max, "", "50", None, main_number);
//Visualisation de l'avancement
slider = ESPUI.addControl(ControlType::Slider, "Distance", "0", ControlColor::None, main_number, slider_callback);
ESPUI.setPanelStyle(main_number, couleurs[4]);
ESPUI.setElementStyle(main_number, couleurs[5]);
zero = ESPUI.button("Initialisation", go_to_zero , ControlColor::None, "Allez en butée");
ESPUI.setPanelStyle(zero, couleurs[4]);
ESPUI.setElementStyle(zero, couleurs[5]);
//TAB1 = Configurations
//Choix de la seringue 1
ESPUI.addControl(ControlType::Separator, "Seringue 1", "", ControlColor::None, tab1);
uint16_t select1
= ESPUI.addControl(ControlType::Select, "Choix de la seringue :", "", ControlColor::None, tab1, select_callback);
ESPUI.addControl(ControlType::Option, "Seringue A", "Opt1", ControlColor::None, select1);
ESPUI.addControl(ControlType::Option, "Seringue B", "Opt2", ControlColor::None, select1);
ESPUI.addControl(ControlType::Option, "Seringue C", "Opt3", ControlColor::None, select1);
ESPUI.setPanelStyle(select1, couleurs[4]);
ESPUI.setElementStyle(select1, couleurs[5]);
uint16_t carac1 = ESPUI.addControl( ControlType::Label, "Caractéristiques de la seringue 1 : ", "D = 4mm, V = 10µL", ControlColor::None, tab1);
ESPUI.setPanelStyle(carac1, couleurs[4]);
ESPUI.setElementStyle(carac1, couleurs[5]);
//TAB2 : Mise en marche
//TAB3 : Nouvelle seringue
ESPUI.addControl(ControlType::Text, "Nom de la seringue :", "", ControlColor::Alizarin, tab3, text_callback);
ESPUI.addControl(ControlType::Number, "Diamètre interne de la seringue en mm", "5", ControlColor::Alizarin, tab3, number_callback);
ESPUI.addControl(ControlType::Number, "Volume total de la seringue en µL", "5", ControlColor::Alizarin, tab3, number_callback);
etat_button_seringue = ESPUI.addControl(
ControlType::Button, "Ajouter la seringue", "Valider", ControlColor::Peterriver, tab3, button_seringue);
//TAB4 : Configurations avancées
//Diamètre de la vis
ESPUI.addControl(ControlType::Number, "Diamètre de la vis sans fin", "5", ControlColor::None, tab4, number_callback);
//Sens de rotation du moteur
ESPUI.addControl(ControlType::Switcher, "Sens de rotation du moteur", "Horaire", ControlColor::None, tab4, other_switch_callback);
//TAB5 : Test de style
nv_bouton_ctrl = ESPUI.addControl(ControlType::Button, "Nouveau Bouton", "Let magic happen", ControlColor::None, tab5, nv_bouton_ctrl_callback);
ESPUI.setPanelStyle(nv_bouton_ctrl, couleurs[0]);
ESPUI.setElementStyle(nv_bouton_ctrl, couleurs[1]);
nv_bouton = ESPUI.addControl(ControlType::Button, "Abra", "Cadabra", ControlColor::None, tab5, nv_bouton_callback);
//Lancement
ESPUI.begin("ESPUI Control");
/************ Les fonctions callbacks ****************/
void number_callback(Control* sender, int type)
{
Serial.println(sender->value);
void text_callback(Control* sender, int type)
{
Serial.print("Text: ID: ");
Serial.print(sender->id);
Serial.print(", Value: ");
Serial.println(sender->value);
void slider_callback(Control* sender, int type)
{
Serial.print("Slider: ID: ");
Serial.print(sender->id);
Serial.print(", Value: ");
Serial.println(sender->value);
// Like all Control Values in ESPUI slider values are Strings. To use them as int simply do this:
int sliderValueWithOffset = sender->value.toInt() + 100;
Serial.print("SliderValue with offset");
Serial.println(sliderValueWithOffset);
}
void button_status_callback1(Control* sender, int type, void* param)
{
Serial.println(String("param: ") + String(long(param)));
switch (type)
{
case B_DOWN:
Serial.println("Status: Start");
ESPUI.print(status_label_id1, "En marche");
break;
case B_UP:
Serial.println("Status: Stop");
ESPUI.print(status_label_id1, "A l'arrêt");
void button_status_callback2(Control* sender, int type, void* param)
{
Serial.println(String("param: ") + String(long(param)));
switch (type)
{
case B_DOWN:
Serial.println("Status: Start");
ESPUI.print(status_label_id2, "En marche");
break;
case B_UP:
Serial.println("Status: Stop");
ESPUI.print(status_label_id2, "A l'arrêt");
void button_callback(Control* sender, int type)
{
switch (type)
{
case B_DOWN:
Serial.println("Button DOWN");
break;
case B_UP:
Serial.println("Button UP");
break;
}
void pad_callback(Control* sender, int value)
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
{
switch (value)
{
case P_LEFT_DOWN:
Serial.print("left down");
break;
case P_LEFT_UP:
Serial.print("left up");
break;
case P_RIGHT_DOWN:
Serial.print("right down");
break;
case P_RIGHT_UP:
Serial.print("right up");
break;
case P_FOR_DOWN:
Serial.print("for down");
break;
case P_FOR_UP:
Serial.print("for up");
break;
case P_BACK_DOWN:
Serial.print("back down");
break;
case P_BACK_UP:
Serial.print("back up");
break;
case P_CENTER_DOWN:
Serial.print("center down");
break;
case P_CENTER_UP:
Serial.print("center up");
break;
}
Serial.print(" ");
Serial.println(sender->id);
void switch_status_callback2(Control* sender, int value, void* param)
{
Serial.println(String("param: ") + String(long(param)));
switch (value)
{
case S_ACTIVE:
Serial.print("Active:");
ESPUI.print(status_label_id2, "En marche");
break;
case S_INACTIVE:
Serial.print("Inactive");
ESPUI.print(status_label_id2, "A l'arrêt");
break;
}
Serial.print(" ");
Serial.println(sender->id);
void select_callback(Control* sender, int value)
Serial.print("Select: ID: ");
Serial.print(sender->id);
Serial.print(", Value: ");
Serial.println(sender->value);
}
void other_switch_callback(Control* sender, int value)
{
switch (value)
{
case S_ACTIVE:
Serial.print("Active:");
break;
case S_INACTIVE:
Serial.print("Inactive");
break;
}
Serial.print(" ");
Serial.println(sender->id);
void button_seringue(Control* sender, int type)
switch (type)
{
case B_DOWN:
Serial.println("Button DOWN");
break;
case B_UP:
Serial.println("Button UP");
break;
}
}
//Most elements in this test UI are assigned this generic callback which prints some
//basic information. Event types are defined in ESPUI.h
void general_callback(Control *sender, int type) {
Serial.print("CB: id(");
Serial.print(sender->id);
Serial.print(") Type(");
Serial.print(type);
Serial.print(") '");
Serial.print(sender->label);
Serial.print("' = ");
Serial.println(sender->value);
}
void nv_bouton_ctrl_callback(Control *sender, int type) {
if(type == B_UP) {
test = !test;
ESPUI.updateVisibility(nv_bouton, test);
void nv_bouton_callback(Control *sender, int type) {
ESPUI.setPanelStyle(nv_bouton, couleurs[2]);
ESPUI.setElementStyle(nv_bouton, couleurs[3]);
void position_choice (Control *sender, int type) {
Serial.printf("val=%s\n", sender->value.c_str());
Malaurie Bernard
committed
syringe_filled.set_exchange_volume_mL(atof(sender->value.c_str()));
void go_to_zero (Control *sender, int type) {
syringe_filled.show_configuration();
Serial.printf("Go to zero");
Malaurie Bernard
committed
syringe_filled.go_to_zero();
ESPUI.print(status_label_id1, "En marche");
ESPUI.setPanelStyle(status_label_id1, couleurs[0]);
ESPUI.setElementStyle(status_label_id1, couleurs[1]);
}
}
void switch_status_callback1(Control* sender, int value, void* param)
{
Serial.println(String("param: ") + String(long(param)));
switch (value)
case S_ACTIVE:
Serial.print("Active:");
ESPUI.print(status_label_id1, "En marche");
ESPUI.setPanelStyle(status_label_id1, couleurs[0]);
ESPUI.setElementStyle(status_label_id1, couleurs[1]);
Malaurie Bernard
committed
syringe_filled.exchange();
break;
case S_INACTIVE:
Serial.print("Inactive");
ESPUI.print(status_label_id1, "A l'arrêt");
ESPUI.setPanelStyle(status_label_id1, couleurs[2]);
ESPUI.setElementStyle(status_label_id1, couleurs[3]);
syringe_filled.stay_here();
Serial.print(" ");
Serial.println(sender->id);
}
void webLoop ()
{
//bool switchi = syringe.isRunning();
//bool a = syringe.isRunning();
//if(millis() > last_time + 500) {
//ESPUI.updateSlider(slider, syringe.currentPosition()*100/lengthSyringePump);
//lastTime = millis();
//if (syringe.isRunning())
//ESPUI.updateControlValue(activation, "1");
//else
//ESPUI.updateControlValue(activation, "0");