J'ai installé l'environnement Arduino et j'ai téléchargé les library mais je n'ai peut être pas les bonnes car j'ai été obligé de déclarer les variables D3, D4, D5, D6 et D7 pour que ça compile sans erreurs...
int D3;
int D4;
int D5;
int D6;
int D7;
J'ai arrangé ça vite fait, on peut aussi passer la variable Txt (qui contient le texte à afficher) en argument à la fonction Afficher
Code : Tout sélectionner
/*
***************************************************
****** Ascenseur avec un moteur pas à pas *******
****** *******
****** Programme V 3.0 *******
****** Du 22/02/2025 *******
****** Par C.ARFEL *******
****** *******
****** Carte Wemos D1 Mini *******
****** *******
****** Version 1.0 *******
****** Mise a quai manuelle *******
****** Afficheur lcd 16 x 2 I2C *******
****** RC + 5 sous sol *******
****** Menu par encodeur *******
****** *******
****** *******
****** Liste des bornes utilisées *******
****** *******
****** D0 Capteur infrarouge *******
****** D1 I2C écran *******
****** D2 I2C écran *******
****** D3 DIR commande de direction moteur *******
****** D4 STEP commande nb pas moteur *******
****** D5 SW encodeur *******
****** D6 DT encodeur *******
****** D7 Clic encodeur *******
****** D8 Arrêt d'urgence + FC total *******
****** RST (reset carte) *******
****** *******
****** Le croquis utilise ***** octets (**%)*******
****** de l'espace de stockage de *******
****** programmes. Le maximum est de *******
****** ****** octets. *******
****** *******
****** Les variables globales utilisent *******
****** **** octets (**%) de mémoire *******
****** dynamique, ce qui laisse **** *******
****** octets pour les variables locales. *******
****** Le maximum est de **** octets. *******
****** *******
****** *******
***************************************************
. Variables and constants in RAM (global, static), used 29192 / 80192 bytes (36%)
║ SEGMENT BYTES DESCRIPTION
╠══ DATA 1536 initialized variables
╠══ RODATA 1240 constants
╚══ BSS 26416 zeroed variables
. Instruction RAM (IRAM_ATTR, ICACHE_RAM_ATTR), used 60995 / 65536 bytes (93%)
║ SEGMENT BYTES DESCRIPTION
╠══ ICACHE 32768 reserved space for flash instruction cache
╚══ IRAM 28227 code in IRAM
. Code in flash (default, ICACHE_FLASH_ATTR), used 245364 / 1048576 bytes (23%)
║ SEGMENT BYTES DESCRIPTION
╚══ IROM 245364 code in flash
*/
int D3;
int D4;
int D5;
int D6;
int D7;
String Txt;
#include <AccelStepper.h> // Bibliothéque moteur pas a pas
const byte pin_DIR = D3; // Borne contrôle pour TMC2209
const byte pin_STEP = D4; // Borne contrôle pour TMC2209
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // Bibliothéque ecran protocole I2C
LiquidCrystal_I2C lcd(0x27, 16, 2); // 0x27 ou 0x3F déclaration adresse du lcd
#include "RotaryEncoder.h" // Appel de la bibliothéque pour encodeur
#define STEPSS 1 // Nombre par pas d'encodeur
#define POSMIN -5 // Position MINI de l'encodeur
#define POSMAX 4 // Position MAX de l'encodeur
#define BPE D5 // Borne SW encodeur (bouton)
RotaryEncoder encoder(D6, D7); // Borne de l'encodeur (DT, CLK)
AccelStepper stepper(AccelStepper::DRIVER, pin_STEP, pin_DIR); // création objet Stepper
int Pos0SS = 0; // Crans moteur pour la position plateau niveau reseau.
int Pos1SS = 10000; // Crans moteur pour la position plateau 1er sous sol
int Pos2SS = 20000; // Crans moteur pour la position plateau 2ème sous sol
int Pos3SS = 30000; // Crans moteur pour la position plateau 3ème sous sol
int Pos4SS = 40000; // Crans moteur pour la position plateau 4ème sous sol
int Pos5SS = 50000; // Crans moteur pour la position plateau 5ème sous sol
int Init = 0; // Variable pour l'initialisation
int Ebpe = 10; // Variable bouton encodeur
int lastPos, newPos; // Variable encodeur
void setup() {
lcd.init(); // Initialisation de l'afficheur
lcd.backlight(); // Allume l'ecran
lcd.clear(); // Efface l'ecran
lcd.setCursor(0, 0); // place le curseur sur la ligne 0 a gauche
lcd.print("*Initialisation*"); // Affichage sur le lcd
lcd.setCursor(0, 1); // passe a la ligne suivante
lcd.print("* Programme *"); // affichage sur le lcd
stepper.setMaxSpeed(8000.0); // Vitesse max moteur
stepper.setAcceleration(500.0); // distance accélération / décélération
encoder.setPosition(10 / STEPSS); // Position initiale encodeur
pinMode(BPE, INPUT); // Initialisation du clic encodeur rotatif
}
/*
************************
* Fin de la zone SETUP *
************************
*/
/*
****************************
* Séquence initialisation *
****************************
*/
void Initialisation() { // Module initialisation du plateau Recherche du FC
// Il ne se passe rien d'important ici pour le moment a ce stade du programme.
lcd.clear(); // Efface l'ecran
delay(100);
lcd.setCursor(0, 0);
lcd.print(" Niveau reseau. ");
delay(10);
lcd.setCursor(0, 1); // place le curseur ligne suivante
lcd.print("** En attente **");
delay(200);
Init = 1; // Informe que l'initialisation a été faite pour ne pas y revenir
}
void loop() {
if (Init < 1) { // Si 1er passage executerligne suivante sinon passer
Initialisation(); // Vas executer le bloc "initialisation"
}
/*
********************************
* Début de la zone des appels *
********************************
*/
/*
****************************************
* Menu selection par encodeur rotatif *
****************************************
*/
// ________________ Zone lecture encodeur rotatif _______________
encoder.tick();
newPos = encoder.getPosition() * STEPSS;
if (newPos < POSMIN) {
encoder.setPosition(POSMIN / STEPSS);
newPos = POSMIN;
} else if (newPos > POSMAX) {
encoder.setPosition(POSMAX / STEPSS);
newPos = POSMAX;
}
if (lastPos != newPos) {
if (newPos <= 0) { // valable de -5 a 0
lcd.setCursor(0, 1); // place le curseur ligne suivante
lcd.print("Choix => ");
lcd.print(newPos);
lcd.print(" ");
delay(10);
lastPos = newPos;
}
if (newPos >= 1) { // Valable si 1
lcd.setCursor(0, 1); // place le curseur ligne suivante
lcd.print("Choix => ");
lcd.print("Reglage");
delay(10);
lastPos = newPos;
}
}
if (digitalRead(BPE) == LOW) { // Control si Bouton encodeur actionné
Ebpe = newPos;
delay(500); // Tempo de pause pour éviter la redondance du clic
}
/*
*****************************
* Appel au rez de chaussée *
*****************************
*/
if (Ebpe == 0) { // Action si choix 0 RC
En_mouvement;
stepper.runToNewPosition(Pos0SS);
delay(1000);
Ebpe = 10;
Txt=" Niveau reseau. ";
Attente;
}
/*
**************************
* Appel au 1er sous sol *
**************************
*/
if (Ebpe == -1) { // Action si choix -1
En_mouvement;
stepper.runToNewPosition(Pos1SS);
delay(1000);
Ebpe = 10;
Txt=" Niveau -1 ";
Attente;
}
/*
***************************
* Appel au 2ème sous sol *
***************************
*/
if (Ebpe == -2) {
En_mouvement;
stepper.runToNewPosition(Pos2SS);
delay(1000);
Ebpe = 10;
Txt=" Niveau -2 ";
Attente;
}
/*
***************************
* Appel au 3ème sous sol *
***************************
*/
if (Ebpe == -3) {
En_mouvement;
stepper.runToNewPosition(Pos3SS);
delay(1000);
Ebpe = 10;
Txt=" Niveau -3 ";
Attente;
}
/*
***************************
* Appel au 4ème sous sol *
***************************
*/
if (Ebpe == -4) {
En_mouvement;
stepper.runToNewPosition(Pos4SS);
delay(1000);
Ebpe = 10;
Txt=" Niveau -4 ";
Attente;
}
/*
***************************
* Appel au 5ème sous sol *
***************************
*/
if (Ebpe == -5) {
En_mouvement;
stepper.runToNewPosition(Pos5SS);
delay(1000);
Ebpe = 10;
Txt= " Niveau -5 ";
Attente;
}
}
void En_mouvement() {
lcd.clear(); // Efface l'ecran
delay(100);
lcd.setCursor(0, 0);
lcd.print("** Plateforme **");
delay(10);
lcd.setCursor(0, 1); // place le curseur ligne suivante
lcd.print("* En mouvement *");
delay(10);
}
void Attente() {
lcd.clear(); // Efface l'ecran
delay(100);
lcd.setCursor(0, 0);
lcd.print(Txt);
delay(10);
lcd.setCursor(0, 1); // place le curseur ligne suivante
lcd.print("** En attente **");
delay(1000);
}