bonjour à tous ,
Voila mon souci , je réalise un projet afin de piloter des projecteurs en commande DMX avec un capteur ultra son ( commande avec la main )
Sur le principe tout fonctionne correctement , cependant la réaction du programme est parfois étrange , de temps en temps le programme ce ''bloc'' , il n'y a plus de fluctuation des valeurs envoyées , les leds de contrôles ce blocs à l'heure dernier état , et la valeur dmx envoyé reste bloqué également , mais cela dure que 2 /3 secondes , et encore une fois c'est aléatoire ..
j'ai quand même observé que ce phénomène , arrivait quand j'étais proche du capteur ultra son , voir très proche ...
je voudrais avoir votre avis , peu être que j'atteint les limites de l'arduino , je lui en demande de trop ?
Voici le code
merci de votre aide
#include <DmxSimple.h>
int pin[10]={4,5,6,7,8,9,10,11,12,13};
const int ARM = A1 ;// Armement
int ledrgeState = LOW ;
long previousMillis = 0 ;
long interval = 200 ;
int trig = 3 ;
int echo = 2 ;
long lecture_echo;
long cm;
int entree = A0;
int ArmState = HIGH;
int etatbouton;
int memoire_entree = HIGH;
void setup() {
pinMode(entree,INPUT_PULLUP);
pinMode(ARM, OUTPUT);
pinMode(trig, OUTPUT);
digitalWrite(trig, LOW);
pinMode(echo, INPUT);
DmxSimple.usePin(1);
DmxSimple.maxChannel(2);
for (int i = 0 ; i<=10 ; i++){
pinMode(pin[i], OUTPUT);
}
for (int i = 0 ; i<=10 ; i++){
digitalWrite(pin[i], HIGH);
delay(60);
digitalWrite(pin[i], LOW);
}
for (int i = 10 ; i>=0 ; i--){
digitalWrite(pin[i], HIGH);
delay(60);
digitalWrite(pin[i], LOW);
}
}
void loop() {
///////////////////////////////////////
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
lecture_echo = pulseIn(echo, HIGH);
cm = (lecture_echo / 58) ;
///////////////////////////////////////
if(cm<=4) {
DmxSimple.write(1, 255);
digitalWrite(pin[0], HIGH);
digitalWrite(pin[1], HIGH);
digitalWrite(pin[2], HIGH);
digitalWrite(pin[3], HIGH);
digitalWrite(pin[4], HIGH);
digitalWrite(pin[5], HIGH);
digitalWrite(pin[6], HIGH);
digitalWrite(pin[7], HIGH);
digitalWrite(pin[8], HIGH);
digitalWrite(pin[9], HIGH);
}
else if((cm>4)&&(cm<=8)) {
DmxSimple.write(1, 250);
digitalWrite(pin[0], HIGH);
digitalWrite(pin[1], HIGH);
digitalWrite(pin[2], HIGH);
digitalWrite(pin[3], HIGH);
digitalWrite(pin[4], HIGH);
digitalWrite(pin[5], HIGH);
digitalWrite(pin[6], HIGH);
digitalWrite(pin[7], HIGH);
digitalWrite(pin[8], HIGH);
digitalWrite(pin[9], LOW);
}
else if((cm>8)&&(cm<=12)) {
DmxSimple.write(1, 200);
digitalWrite(pin[0], HIGH);
digitalWrite(pin[1], HIGH);
digitalWrite(pin[2], HIGH);
digitalWrite(pin[3], HIGH);
digitalWrite(pin[4], HIGH);
digitalWrite(pin[5], HIGH);
digitalWrite(pin[6], HIGH);
digitalWrite(pin[7], HIGH);
digitalWrite(pin[8], LOW);
digitalWrite(pin[9], LOW);
}
else if((cm>12)&&(cm<=16)) {
DmxSimple.write(1, 170);
digitalWrite(pin[0], HIGH);
digitalWrite(pin[1], HIGH);
digitalWrite(pin[2], HIGH);
digitalWrite(pin[3], HIGH);
digitalWrite(pin[4], HIGH);
digitalWrite(pin[5], HIGH);
digitalWrite(pin[6], HIGH);
digitalWrite(pin[7], LOW);
digitalWrite(pin[8], LOW);
digitalWrite(pin[9], LOW);
}
else if((cm>16)&&(cm<=20)) {
DmxSimple.write(1, 150);
digitalWrite(pin[0], HIGH);
digitalWrite(pin[1], HIGH);
digitalWrite(pin[2], HIGH);
digitalWrite(pin[3], HIGH);
digitalWrite(pin[4], HIGH);
digitalWrite(pin[5], HIGH);
digitalWrite(pin[6], LOW);
digitalWrite(pin[7], LOW);
digitalWrite(pin[8], LOW);
digitalWrite(pin[9], LOW);
}
else if((cm>20)&&(cm<=24)) {
DmxSimple.write(1, 120);
digitalWrite(pin[0], HIGH);
digitalWrite(pin[1], HIGH);
digitalWrite(pin[2], HIGH);
digitalWrite(pin[3], HIGH);
digitalWrite(pin[4], HIGH);
digitalWrite(pin[5], LOW);
digitalWrite(pin[6], LOW);
digitalWrite(pin[7], LOW);
digitalWrite(pin[8], LOW);
digitalWrite(pin[9], LOW);
}
else if((cm>24)&&(cm<=28)) {
DmxSimple.write(1, 105);
digitalWrite(pin[0], HIGH);
digitalWrite(pin[1], HIGH);
digitalWrite(pin[2], HIGH);
digitalWrite(pin[3], HIGH);
digitalWrite(pin[4], LOW);
digitalWrite(pin[5], LOW);
digitalWrite(pin[6], LOW);
digitalWrite(pin[7], LOW);
digitalWrite(pin[8], LOW);
digitalWrite(pin[9], LOW);
}
else if((cm>28)&&(cm<=32)) {
DmxSimple.write(1, 80);
digitalWrite(pin[0], HIGH);
digitalWrite(pin[1], HIGH);
digitalWrite(pin[2], HIGH);
digitalWrite(pin[3], LOW);
digitalWrite(pin[4], LOW);
digitalWrite(pin[5], LOW);
digitalWrite(pin[6], LOW);
digitalWrite(pin[7], LOW);
digitalWrite(pin[8], LOW);
digitalWrite(pin[9], LOW);
}
else if((cm>32)&&(cm<=36)) {
DmxSimple.write(1, 60);
digitalWrite(pin[0], HIGH);
digitalWrite(pin[1], HIGH);
digitalWrite(pin[2], LOW);
digitalWrite(pin[3], LOW);
digitalWrite(pin[4], LOW);
digitalWrite(pin[5], LOW);
digitalWrite(pin[6], LOW);
digitalWrite(pin[7], LOW);
digitalWrite(pin[8], LOW);
digitalWrite(pin[9], LOW);
}
else if((cm>36)&&(cm<=40)) {
DmxSimple.write(1, 30);
digitalWrite(pin[0], HIGH);
digitalWrite(pin[1], LOW);
digitalWrite(pin[2], LOW);
digitalWrite(pin[3], LOW);
digitalWrite(pin[4], LOW);
digitalWrite(pin[5], LOW);
digitalWrite(pin[6], LOW);
digitalWrite(pin[7], LOW);
digitalWrite(pin[8], LOW);
digitalWrite(pin[9], LOW);
}
else {
DmxSimple.write(1, 0);
digitalWrite(pin[0], LOW);
digitalWrite(pin[1], LOW);
digitalWrite(pin[2], LOW);
digitalWrite(pin[3], LOW);
digitalWrite(pin[4], LOW);
digitalWrite(pin[5], LOW);
digitalWrite(pin[6], LOW);
digitalWrite(pin[7], LOW);
digitalWrite(pin[8], LOW);
digitalWrite(pin[9], LOW);
}
delay(80);
///////////////////////////////////////////////////////////////////
// lecture de l'état du bouton
etatbouton = digitalRead(entree);
// Si le bouton a un état différent de celui enregistré ET
// que cet état est "appuyé"
if((etatbouton != memoire_entree) && (etatbouton == LOW))
{
ArmState = !ArmState;
}
if ( ArmState ==LOW)
{
DmxSimple.write(2, 255);
unsigned long currentMillis = millis() ;
if ( currentMillis - previousMillis >= interval && ArmState ==LOW ) {
previousMillis = currentMillis ;
if ( ledrgeState == LOW )
ledrgeState = HIGH;
else
ledrgeState = LOW;
digitalWrite(ARM,ledrgeState);
}
}
if ( ArmState ==HIGH)
{
DmxSimple.write(2, 0);
digitalWrite(ARM,LOW);
}
memoire_entree=etatbouton;
///////////////////////////////////////////////////////////////////
}