Bonjour, je souaite piloter un moteur avec courte acceleration et faire clignoter une LED pendant tout le temps que le moteur tourne. J'ai ecrit un programme avec une sortie analogique connectée à une LED pour simuler le moteur, et une autre LED pour le clignotement. Elle s'allume mais ne clignote pas. JE ne comprends pas pourquoi. Ci dessous le code :
Pour obtenir rapidement de l'aide, je te suggére de poster tout ton code
Setup et loop y compris, car là, on ne peut pas exemple déterminer exactement comment tu traite la sortie analogique.
Ok mais je ne l'avais pas mis car le pb n'est pas la sortie analogique mais la LED. Ci dessous la totalité
// These constants won't change. They're used to give names to the pins used: entrées sorties analogiques
const int analog_In_Photo = A0; // Analog input photo resistance
const int analog_Out_moteur_ouverture = 11; // Analog output pin that the LED Bleue is attached to (simul moteur ouverture)
const int analog_Out_moteur_fermeture = 10; // Analog output pin that the LED Jaune is attached to (simul moteur fermeture)
// These constants won't change. They're used to give names to the pins used: sorties digitales
const int led_moteur = 7; // pin moteur tourne (led rouge)
const int led_lumiere = 8; // pin luminosité (LED verte)
const int led_manuel_auto = 12; // pin manuel / auto (LED blanche)
// These constants won't change. They're used to give names to the pins used: entrées digitales
const int fin_course_ouvert = 2; // pin fin de course ouvert
const int fin_course_ferme = 4; // pin fin de course fermé
// These constants won't change
const int seuil_jour = 300; // définition de la valeur du seuil de jour
const int seuil_nuit = 200; // définition de la valeur du seuil de nuit
// variables will change:
int Etat_fin_course_ouvert = 0; // variable for reading etat fin de course ouverture
int Etat_fin_course_ferme = 0; // variable for reading etat fin de course fermeture
int etat_led_luminosite = 0; // variable d'état de la LED (allumée / éteinte)
int etat_led_moteur = 0; // variable d'état de la LED (allumée / éteinte)
int Mesure_Lumiere = 0; // value read from the photo resistance
int Output_Moteur_Ouverture = 0; // value output to the PWM (analog out)
int Output_Moteur_Fermeture = 0; // value output to the PWM (analog out)
int Output_Value_min = 30; // valeur de démarrage moteur
int Tempo_Acceleration = 10; // tempo pour accélération moteur
// Gestion du temps
unsigned long currentTime=0;
unsigned long previousTime=0;
void setup() {
// put your setup code here, to run once:
// initialize the pushbutton pin as an input:
pinMode(fin_course_ouvert, INPUT);
pinMode(fin_course_ferme, INPUT);
// initialize the LED pin as an output:
pinMode(led_moteur, OUTPUT);
pinMode(led_lumiere, OUTPUT);
pinMode(led_manuel_auto, OUTPUT);
// init valeur sortie moteur
Output_Moteur_Ouverture = Output_Value_min;
Output_Moteur_Fermeture = Output_Value_min;
}
void loop() {
// put your main code here, to run repeatedly:
// Lecture senseur
Mesure_Lumiere = analogRead(analog_In_Photo);
// pilotage LED verte en fonction luminosité : fixe, clignotement lent ou clignotement rapide
if ( Mesure_Lumiere > seuil_jour) { // si lumière jour, vert continu
digitalWrite(led_lumiere, HIGH); // allumage LED verte en continu
Ouverture(); // ouverture poulailler
}
else if ( Mesure_Lumiere < seuil_nuit && etat_led_luminosite == 0) { // si lumière nuit, vert clignote lentement
digitalWrite(led_lumiere, HIGH);
delay (1000);
etat_led_luminosite = 1;
}
else if ( Mesure_Lumiere < seuil_nuit && etat_led_luminosite == 1) { // si lumière nuit, vert clignote lentement
digitalWrite(led_lumiere, LOW);
delay (1000);
etat_led_luminosite = 0;
}
else if (Mesure_Lumiere < seuil_jour && Mesure_Lumiere > seuil_nuit && etat_led_luminosite == 0) { // si ni jour ni nuit, vert clignote vite
digitalWrite(led_lumiere, HIGH);
delay (200);
etat_led_luminosite = 1;
}
else { // si lumière nuit, vert clignote vite
digitalWrite(led_lumiere, LOW);
delay (200);
etat_led_luminosite = 0;
}
// read the state of the pushbutton value:
Etat_fin_course_ouvert = digitalRead(fin_course_ouvert);
Etat_fin_course_ferme = digitalRead(fin_course_ferme);
}
void Ouverture() {
Etat_fin_course_ouvert = digitalRead(fin_course_ouvert);
previousTime=millis();
currentTime=millis();
while (Etat_fin_course_ouvert == LOW) {
analogWrite(analog_Out_moteur_ouverture, Output_Moteur_Ouverture);
currentTime = millis();
if((currentTime-previousTime)>2000){
previousTime=currentTime;
if (etat_led_moteur == 0) {
digitalWrite(led_moteur, HIGH);
}
else {
digitalWrite(led_moteur, LOW);
}
etat_led_moteur == !etat_led_moteur;
}
if (Output_Moteur_Ouverture < 255) {
Output_Moteur_Ouverture = Output_Moteur_Ouverture + 1 ;
delay (Tempo_Acceleration) ;
}
Etat_fin_course_ouvert = digitalRead(fin_course_ouvert);
}
analogWrite(analog_Out_moteur_ouverture, 0);
}
Super, merci beaucoup. C'est plus clair comme ça. Il y a aussi une erreur ici etat_led_moteur == !etat_led_moteur;
Un seul "=" nécessaire. Je ne comprends pas pourquoi ce n'est pas détecté par le compilateur.
J'ai encore beaucoup de trvail sur ce programme. C'est une porte d'ouverture de poulailler mais qui coince quelquefois à la descente (les poules déplacent des éléments qui peuvent bloquer la porte. Je dois ajouter deux tentatives de descente avec time out. Je crois que vous aller encore devoir supporter mes questions. Merci encore
Parce que ce n'est pas une erreur mais en faisant ça: etat_led_moteur == !etat_led_moteur;
tu "dis" etat_led_moteur est égal à l'inverse de etat_led_moteur et le résultat est toujours false.
Pour inverser une LED en une seule opération: digitalWrite(led_moteur, !digitalRead(led_moteur));
Bonjour, j'utilise mon arduino uno depuis quelques mois. J'utilise toutes les entrees sorties 2 à 13 plus A0 à A3. Je voudrai ajouter une entrée digitale en A4 mais je n'y arrive pas. Elle est toujours lue comme active. J'ai d'abord cheché coté hardware et n'ai rien trouvé. Cablée comme les autres. Si je connecte A4 directement sur GND mon programme la lit toujours à 1 alors que ça fonctionne bien pour les autres. Donc je suppose que c'est mon soft qui n'est pas bon. J'ai retiré tout ce qui est inutile et joins le soft ci-dessous. Merci de votre aide et vos conseils.
// Constantes Entrées Sorties Analogiques
const int analog_In_Photo = A0; // Analog input photo resistance
// Constantes Sorties digitales
// Constantes Entrees Digitales
const int fin_course_ouvert = 2; // pin fin de course ouvert (trappe)
const int fin_course_ferme = 4; // pin fin de course fermé (trappe)
const int Bouton_Man_Auto = A1;
const int Bouton_Ouvert_Ferme = A2;
const int Bouton_porte_fermee = A3; // Grande porte fermée = HIGH
const int Bouton_marche_forcee = A4; // Entree marche forcee si = HIGH (pilotage extérieur)
// Constantes pour le programme
// Variables :
int Etat_fin_course_ouvert = 0; // variable for reading etat fin de course ouverture
int Etat_fin_course_ferme = 0; // variable for reading etat fin de course fermeture
int Mesure_Lumiere = 0; // value read from the photo resistance
int Etat_bouton_auto = 0; // Etat bouton poussoir A/M (1 si appuyé => bascule)
int Etat_bouton_O_F = 0; // Etat bouton poussoir O/F (1 si appuyé = bascule)
int Etat_porte_fermee = 1; // Etat grande porte - Fermée = 1 ; Ouverte = 0
int Etat_bouton_Marche_Forcee = 0; // Etat entree marche forcee (pilotage exterieur)
// Gestion du temps
//Library version:1.1 Ecran LCD
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
void setup() {
// Initialisation Ecran LCD
lcd.init(); // initialize the lcd
// initialize the pushbutton pin as an input:
pinMode (fin_course_ouvert, INPUT); // pinMode (fin_course_ouvert, INPUT_PULLUP); // active la résistance interne de la broche concernée
pinMode (fin_course_ferme, INPUT); // pinMode (fin_course_ferme, INPUT_PULLUP); // active la résistance interne de la broche concernée
pinMode (Bouton_Man_Auto, INPUT); // pinMode (Bouton_Man_Auto, INPUT_PULLUP); // active la résistance interne de la broche concernée
pinMode (Bouton_Ouvert_Ferme, INPUT); // pinMode (Bouton_Ouvert_Ferme, INPUT_PULLUP); // active la résistance interne de la broche concernée
pinMode (Bouton_porte_fermee, INPUT); // pinMode (Bouton_porte_fermee, INPUT_PULLUP); // active la résistance interne de la broche concernée
pinMode (Bouton_marche_forcee, INPUT); // pinMode (Bouton_porte_fermee, INPUT_PULLUP); // active la résistance interne de la broche concernée
// Print a message to the LCD.
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Initialisation");
}
void loop() {
// put your main code here, to run repeatedly:
// Provisoire pour test
// Lectures entrées
Etat_porte_fermee = digitalRead (Bouton_porte_fermee);
Etat_bouton_auto = digitalRead (Bouton_Man_Auto);
Etat_fin_course_ouvert = digitalRead (fin_course_ouvert);
Etat_fin_course_ferme = digitalRead (fin_course_ferme);
Etat_bouton_O_F = digitalRead (Bouton_Ouvert_Ferme);
Etat_bouton_Marche_Forcee = digitalRead (Bouton_marche_forcee);
Mesure_Lumiere = analogRead(analog_In_Photo);
// Affichage état entrées
lcd.setCursor(0,1);
lcd.print(Mesure_Lumiere);
lcd.print(" ");
lcd.print(Etat_bouton_auto);
lcd.print(" ");
lcd.print(Etat_bouton_O_F);
lcd.print(" ");
lcd.print(Etat_porte_fermee);
lcd.print(" ");
lcd.print(Etat_fin_course_ferme);
lcd.print(" ");
lcd.print(Etat_fin_course_ouvert);
lcd.print(" ");
lcd.print(Etat_bouton_Marche_Forcee);
lcd.print(" ");
delay (200);
}
Bonjour je vous remercie. J’utilise les deux broches sda et l’autre pour l’afficheur (sur l’autre connecteur). Ce sont les mêmes où je peux utiliser ces deux autres broches comme i/o ?