Coucou
je reviens vous demander conseil, car j'ai un petit soucis. J'avais comme projet de faire un detecteur d'obstacle (avec un sonar, une LED) et il fonctionnait tres bien. J'ai voulu passer a l’étape supérieur en essayant avec 6 LEDs et 6 sonars (les mêmes bien sûr) pour faire une détection sur 360°.
J'ai confectionné un programme :
Il est long mais tres simple a comprendre, j'ai essayé de faire des sortes de sous programme
long previousMillis = 0;
boolean beep_state;
int interval0 = 200;
int interval1 = 200;
int interval2 = 200;
int interval3 = 200;
int interval4 = 200;
int interval5 = 200;
int analogPin0 = 0;
int analogPin1 = 1;
int analogPin2 = 2;
int analogPin3 = 3;
int analogPin4 = 4;
int analogPin5 = 5;
int val0 = 0;
int val1 = 0;
int val2 = 0;
int val3 = 0;
int val4 = 0;
int val5 = 0;
void setup()
{
Serial.begin (9600);
pinMode(12, OUTPUT); // Le signal est envoyé sur le buzzer qui est branché sur la sortie 12
pinMode(3, OUTPUT); // Le signal est envoyé sur les LED qui sont branchées sur les sortie 3,5,6,9,10,11
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
}
void loop()
{
Serial.println(val4);
lecture_val0();
lecture_val1();
lecture_val2();
lecture_val3();
lecture_val4();
lecture_val5();
beep0();
beep1();
beep2();
beep3();
beep4();
beep5();
}
void lecture_val0()
{
val0 = analogRead(analogPin0);
interval0 = val0 * 2;
}
void lecture_val1()
{
val1 = analogRead(analogPin1);
interval1 = val1 * 2;
}
void lecture_val2()
{
val2 = analogRead(analogPin2);
interval2 = val2 * 2;
}
void lecture_val3()
{
val3 = analogRead(analogPin3);
interval3 = val3 * 2;
}
void lecture_val4()
{
val4 = analogRead(analogPin4);
interval4 = val4 * 2;
}
void lecture_val5()
{
val5 = analogRead(analogPin5);
interval5 = val5 * 2;
}
// ----------------------------------------------------------------------------------
void beep0()
{
unsigned long currentMillis = millis();
if ( val0 < 100)
{
beep_state = 1;
digitalWrite(3, HIGH); // active la LED (ON)
tone(16, 1319);
previousMillis = currentMillis;
}
else if (val0 < 300)
{
if ( currentMillis - previousMillis > interval0 )
{
// save the last time you blinked the LED
previousMillis = currentMillis;
if (beep_state == 0)
{
beep_state = 1;
digitalWrite(3, HIGH); // active la LED (ON)
tone(16, 1319);
}
else
{
beep_state = 0;
digitalWrite(3, LOW ); // active la LED (Off)
noTone(16);
}
}
}
else
{
beep_state = 0;
digitalWrite(3, LOW ); // active la LED (Off)
noTone(16);
previousMillis = currentMillis;
}
}
//-------------------------------------------------------------------------------------------------------
void beep1()
{
unsigned long currentMillis = millis();
if ( val1 < 100)
{
beep_state = 1;
digitalWrite(5, HIGH); // active la LED (ON)
tone(16, 1319);
previousMillis = currentMillis;
}
else if (val1 < 300)
{
if ( currentMillis - previousMillis > interval1 )
{
// save the last time you blinked the LED
previousMillis = currentMillis;
if (beep_state == 0)
{
beep_state = 1;
digitalWrite(11, HIGH); // active la LED (ON)
tone(5, 1319);
}
else
{
beep_state = 0;
digitalWrite(5, LOW ); // active la LED (Off)
noTone(16);
}
}
}
else
{
beep_state = 0;
digitalWrite(5, LOW ); // active la LED (Off)
noTone(16);
previousMillis = currentMillis;
}
}
//---------------------------------------------------------------------------------------------------------------------
void beep2()
{
unsigned long currentMillis = millis();
if ( val2 < 100)
{
beep_state = 1;
digitalWrite(6, HIGH); // active la LED (ON)
tone(16, 1319);
previousMillis = currentMillis;
}
else if (val2 < 300)
{
if ( currentMillis - previousMillis > interval2)
{
// save the last time you blinked the LED
previousMillis = currentMillis;
if (beep_state == 0)
{
beep_state = 1;
digitalWrite(6, HIGH); // active la LED (ON)
tone(16, 1319);
}
else
{
beep_state = 0;
digitalWrite(6, LOW ); // active la LED (Off)
noTone(16);
}
}
}
else
{
beep_state = 0;
digitalWrite(6, LOW ); // active la LED (Off)
noTone(16);
previousMillis = currentMillis;
}
}
//-----------------------------------------------------------------------------------------------------
void beep3()
{
unsigned long currentMillis = millis();
if ( val3 < 100)
{
beep_state = 1;
digitalWrite(9, HIGH); // active la LED (ON)
tone(16, 1319);
previousMillis = currentMillis;
}
else if (val3 < 300)
{
if ( currentMillis - previousMillis > interval3 )
{
// save the last time you blinked the LED
previousMillis = currentMillis;
if (beep_state == 0)
{
beep_state = 1;
digitalWrite(9, HIGH); // active la LED (ON)
tone(16, 1319);
}
else
{
beep_state = 0;
digitalWrite(9, LOW ); // active la LED (Off)
noTone(16);
}
}
}
else
{
beep_state = 0;
digitalWrite(9, LOW ); // active la LED (Off)
noTone(16);
previousMillis = currentMillis;
}
}
//-----------------------------------------------------------------------------------------------------------
void beep4()
{
unsigned long currentMillis = millis();
if ( val4 < 100)
{
beep_state = 1;
digitalWrite(11, HIGH); // active la LED (ON)
tone(16, 1319);
previousMillis = currentMillis;
}
else if (val4 < 300)
{
if ( currentMillis - previousMillis > interval4 )
{
// save the last time you blinked the LED
previousMillis = currentMillis;
if (beep_state == 0)
{
beep_state = 1;
digitalWrite(11, HIGH); // active la LED (ON)
tone(16, 1319);
}
else
{
beep_state = 0;
digitalWrite(11, LOW ); // active la LED (Off)
noTone(16);
}
}
}
else
{
beep_state = 0;
digitalWrite(11, LOW ); // active la LED (Off)
noTone(16);
previousMillis = currentMillis;
}
}
//-----------------------------------------------------------------------------------------------
void beep5()
{
unsigned long currentMillis = millis();
if ( val5 < 100)
{
beep_state = 1;
digitalWrite(10, HIGH); // active la LED (ON)
tone(16, 1319);
previousMillis = currentMillis;
}
else if (val5 < 300)
{
if ( currentMillis - previousMillis > interval5 )
{
// save the last time you blinked the LED
previousMillis = currentMillis;
if (beep_state == 0)
{
beep_state = 1;
digitalWrite(10, HIGH); // active la LED (ON)
tone(16, 1319);
}
else
{
beep_state = 0;
digitalWrite(10, LOW ); // active la LED (Off)
noTone(16);
}
}
}
else
{
beep_state = 0;
digitalWrite(10, LOW ); // active la LED (Off)
noTone(16);
previousMillis = currentMillis;
}
}
Pour voir si il fonctionne j'ai effectué un test sonar par sonar . Mon test actuel est avec le sonar branché pour la partie "beep4".
Si je mets ma main a moins d 1m la LED est censé resté allumée, si je suis à plus d 1m ca clignote. Or dans mon cas, que je sois a + ou - de 1m la LED s allume et ne s'eteind longtemps apres.
J'ai essayé d'isolé uniquement la partie "beep4" en mettant toutes les autres parties en commentaire et là ca marche.
J'ai donc essayé de mettre une a une chaque partie avec "beep4" mais a chaque fois, ca le fais le meme coup, la led reste allumé.
Je pense que le logiciel se perd dans mon programme car il y a trop de chose ou alors le temps qu il execute tout mon programme il lui faut un moment ..
Si qq'un pouvait m'aider
Merci
Benoit 1121