bonjour,
je n'ai pas un gros niveau, je travail par copier coller en essayant de comprendre ce que je copie et en l'incluant dans mon code... en gros je fais ce que je peux avec ce que j'ai....
mon projet:
je suis en train de fabriquer une petite machine permettant de dérouler un tissu, de lui dire quelle longueur on souhaite, et lorsque la mesure est atteinte, le moteur s'arrête, on coupe le tissu, et on RESET la mesure... et on recommence,
la mesure devrait être effectuée par une roue avec des aimants et un compteur d'effet hall, je ne l'ai pas encore reçu donc j'ai remplacé ce dernier pour un poussoir et j'appuis dessus pour faire grimper mon compteur de mesure, ça me permet de teste mon code...
mon problème:
tout va bien jusqu'a l'arrêt moteur, un fois que j'appuis sur RESET, mon relay se remet en contact, car la valeur étant réinitialisée et donc inférieur, et bien-sur je ne veux pas que mon moteur redémarre tant que je n'ai pas appuyé a nouveau sur mon poussoir moteur.
j'ai essayé pas mal de chose mais étant donné que c'est la première fois que j'utilise autant de variable, j'ai du rater quelque chose
j'ai commenté mon code le plus possible pour vous aidez à comprendre ma logique...
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//LiquidCrystal_I2C lcd(0x27, 20, 4);
LiquidCrystal_I2C lcd(0x3F, 20, 4);
#define bp_plus_1 2 // augmente la taille de 1M
#define bp_plus_10 3 // augmente la tail de 10 CM
#define bp_moins_1 4 // augmente la tail de 10 CM
#define bp_moins_10 5 // diminu la taille de 10 cm
#define bp_roue 6 // BP simulant la roue effet hall
#define bp_reset 7 // permet de remetre la valeur mesuré par la roue a 0
#define bp_relay 8 // BP activation relay moteur
#define relay 9 // relay moteur
#define led 13 // led test
float t = 0; //taille (longueur souhaiter réglé par utilisateur)
float m = 0; //mesure defini par appuis sur bouton poussoir en attendant de metre une roue avec capter effet hall
bool bp_plus_1_etat = false;
bool bp_plus_10_etat = false;
bool bp_moins_1_etat = false;
bool bp_moins_10_etat = false;
bool bp_reset_etat = false;
bool bp_roue_etat = false;
bool bp_relay_etat = HIGH;
bool relay_etat = LOW;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode (bp_plus_1, INPUT_PULLUP);
pinMode (bp_plus_10, INPUT_PULLUP);
pinMode (bp_moins_1, INPUT_PULLUP);
pinMode (bp_moins_10, INPUT_PULLUP);
pinMode (bp_roue, INPUT_PULLUP);
pinMode (bp_reset, INPUT_PULLUP);
pinMode (bp_relay, INPUT);
pinMode (relay, OUTPUT);
pinMode (led, OUTPUT);
lcd.init(); // initialisation de l'afficheur
lcd.backlight(); //allume l'eclairage de lcd_display
lcd.setCursor(0, 0);
lcd.print(" M_Workshop");
lcd.setCursor(0, 1);
lcd.print(" Bubbles Tool");
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Logiciel");
lcd.setCursor(0, 1);
lcd.print(" V1.0");
delay(1000);
lcd.clear();
}
void loop() {
// put your main code here, to run repeatedly:
//*******************************partie moteur************************************************
// **********demarage moteur***********
if (t > m) { // si la taille est superieur a la mesure,
if (bp_relay_etat == 1) { // demarre le moteur lors de l'appui sur BP_relay, (pour eviter a l'utilisateur
if (digitalRead(bp_relay) == 1){ // de demarrer la machnie non regléé), si nouvel appui etein le moteur.
delay(100);
relay_etat = !relay_etat;
bp_relay_etat = 0;
}
}
else if (digitalRead(bp_relay) == 0) {
delay(100);
bp_relay_etat = 1;
}
digitalWrite(relay, relay_etat);
}
// **********arret auto moteur***********
if (m >= t) { // lorsque la mesure atteind la taille, coupe le moteur
if (digitalRead(relay_etat) == HIGH)
{
digitalWrite(relay,LOW);
}
}
//*******************************partie reglage affichage************************************************
bp_plus_1_etat = digitalRead(bp_plus_1);
if (bp_plus_1_etat == true) {
delay(200);
t += 1;
digitalWrite (led, HIGH);
delay(10);
digitalWrite (led, LOW);
}
bp_plus_10_etat = digitalRead(bp_plus_10);
if (bp_plus_10_etat == true) {
delay(200);
t += 0.10;
digitalWrite (led, HIGH);
delay(10);
digitalWrite (led, LOW);
}
bp_moins_1_etat = digitalRead(bp_moins_1);
if (bp_moins_1_etat == true) {
delay(200);
t -= 1;
digitalWrite (led, HIGH);
delay(10);
digitalWrite (led, LOW);
}
bp_moins_10_etat = digitalRead(bp_moins_10);
if (bp_moins_10_etat == true) {
delay(200);
t -= 0.1;
digitalWrite (led, HIGH);
delay(10);
digitalWrite (led, LOW);
}
//*******************************partie mesure************************************************
bp_roue_etat = digitalRead(bp_roue);
if (bp_roue_etat == true) {
delay(200);
m += 1;
}
//*******************************partie RESET************************************************
bp_reset_etat = digitalRead(bp_reset); //BP_reset permet a l'utilisateur de remetre a Zero la mesure pour une nouvelle piece.
if (bp_reset_etat == true) {
delay(200);
m = 0.0;
digitalWrite (led, HIGH);
delay(10);
digitalWrite (led, LOW);
lcd.setCursor(10, 1);
lcd.print(" ");
}
//***********************************partie AFFICHAGE****************************************
lcd.setCursor(0, 0);
lcd.print("TAILLE M");
lcd.setCursor(10, 0);
lcd.print(t);
lcd.setCursor(0, 1);
lcd.print("MESURE M");
lcd.setCursor(10, 1);
lcd.print(m);
}
merci,