Bonjour à tous !
Je n'utilise jamais Arduino habituellement. J'en ai besoin pour activer des haut-parleurs odorants qui fonctionnent avec des paires de ventilateurs. Pour activer les ventilateurs, j'ai un code Arduino avec lequel j'appuie sur "1" par exemple pour lancer la première paire de ventilateurs. J'appuie sur "0" pour les arrêter. Mon problème est que je veux que les ventilateurs soient activés de manière cyclique, avec par exemple 10 secondes de fonctionnement, puis une pause de 7 secondes, et ainsi de suite (ceci est un exemple, je changerai les paramètres de temps directement dans le code). J'ai un code où j'arrive à faire un cycle, mais le problème est qu'une fois lancé, ce code ne s'arrête pas, une fois le cycle lancé il n'est pas possible de lancer une autre commande, ou de stopper les ventilateurs avec la commande censée les arrêter (0). Il faut donc que je modifie ce code pour pouvoir l'arrêter. J'ai aussi un code où je peux démarrer et arrêter les ventilateurs, mais il n'y a pas de cycles. Je ne sais pas s'il est plus facile d'ajouter le cycle sur le code où je peux arrêter les ventilateurs, ou s'il est plus facile d'ajouter l'arrêt sur celui où j'ai le cycle. Je vous envoie donc ces deux codes, si vous trouvez le problème et comment le résoudre, je vous en serais infiniment reconnaissant.
Juste pour précision, je n'y connais vraiment rien en Arduino et en C++, je ne suis pas issu de l'informatique, donc si possible si vous pouvez m'indiquer directement la partie problématique dans mon code, ainsi que le nouveau code a remplacé, cela m'aiderait grandement.
Désolé pour le long message, et merci d'avance pour votre aide et votre temps.
Voici les 2 codes :
Le premier (sans le cycle, mais qui peut s'arrêter) :
// Commande de 12 ventilateurs
// Commandes : 1 à 6 pour actionner les ventilateurs et 0 pour tout arrêter.
// 1 actionne les ventilateurs V1 et V7,
// 2 actionne V2 et V8,
// 3 actionne V3 et V9,
// 4 actionne V4 et V10,
// 5 actionne V5 et V11,
// et 6 actionne les ventilateurs V6 et V12.
//
// Schéma de la disposition des ventilateurs par colonne : (colonne V1 à V6 et colonne V7 à V12)
// ____ ____
// | V1 |------| V7 |
// | V2 |------| V8 |
// | V3 |------| V9 |
// | V4 |------| V10|
// | V5 |------| V11|
// | V6 |------| V12|
// |____|------|____|
// Pin des 12 ventilateurs :
// Pins Digitales
const int V1 = 7; // ventilateur n°1
const int V2 = 8; // ventilateur n°2
const int V3 = 9; // ventilateur n°3
const int V4 = 10; // ventilateur n°4
const int V5 = 11; // ventilateur n°5
const int V6 = 12; // ventilateur n°6
// Pins Analogiques
const int V7 = A0; // ventilateur n°7
const int V8 = A1; // ventilateur n°8
const int V9 = A2; // ventilateur n°9
const int V10 = A3; // ventilateur n°10
const int V11 = A4; // ventilateur n°11
const int V12 = A5; // ventilateur n°12
const int LED = 13;
const int T = 8000; // 8 secondes
const int NUM_REPEATS = 10;
char incomingByte;
int counter = 2;
int groupCounter = 2;
bool groupOn = true;
void setup()
{
// communication série
Serial.begin(115200);
// Pins Digitales et Analogiques en sortie (output)
pinMode(V1,OUTPUT);
pinMode(V2,OUTPUT);
pinMode(V3,OUTPUT);
pinMode(V4,OUTPUT);
pinMode(V5,OUTPUT);
pinMode(V6,OUTPUT);
pinMode(V7,OUTPUT);
pinMode(V8,OUTPUT);
pinMode(V9,OUTPUT);
pinMode(V10,OUTPUT);
pinMode(V11,OUTPUT);
pinMode(V12,OUTPUT);
// Ventilateurs à l'arrêt
digitalWrite(V1,LOW);
digitalWrite(V2,LOW);
digitalWrite(V3,LOW);
digitalWrite(V4,LOW);
digitalWrite(V5,LOW);
digitalWrite(V6,LOW);
analogWrite(V7,0);
analogWrite(V8,0);
analogWrite(V9,0);
analogWrite(V10,0);
analogWrite(V11,0);
analogWrite(V12,0);
// LED Arduino (pin n°13)
pinMode(LED,OUTPUT); // Pin n°13 en sortie
digitalWrite(LED,LOW); // LED éteinte
}
void loop()
{
if (Serial.available () > 0) // vérification de la communication série USB
{
incomingByte = Serial.read(); // attente d'une commande vers Arduino
//Serial.write(incomingByte);
if (incomingByte == '1')
{
digitalWrite(V1,HIGH);
analogWrite(V7,255);
Serial.println("Ventilateurs Niveau 1 : ON.");
//delay(T);
//digitalWrite(V1,LOW);
//analogWrite(V7,0);
}
if (incomingByte == '2')
{
digitalWrite(V2,HIGH);
analogWrite(V8,255);
Serial.println("Ventilateurs Niveau 2 : ON.");
//delay(T);
//digitalWrite(V2,LOW);
//analogWrite(V8,0);
}
if (incomingByte == '3')
{
digitalWrite(V3,HIGH);
analogWrite(V9,255);
Serial.println("Ventilateurs Niveau 3 : ON.");
//delay(T);
//digitalWrite(V3,LOW);
//analogWrite(V9,0);
}
if (incomingByte == '4')
{
digitalWrite(V4,HIGH);
analogWrite(V10,255);
Serial.println("Ventilateurs Niveau 4 : ON.");
//delay(T);
//digitalWrite(V4,LOW);
//analogWrite(V10,0);
}
if (incomingByte == '5')
{
digitalWrite(V5,HIGH);
analogWrite(V11,255);
Serial.println("Ventilateurs Niveau 5 : ON.");
//delay(T);
//digitalWrite(V5,LOW);
//analogWrite(V11,0);
}
if (incomingByte == '6')
{
digitalWrite(V6,HIGH);
analogWrite(V12,255);
Serial.println("Ventilateurs Niveau 6 : ON.");
//delay(T);
//digitalWrite(V6,LOW);
//analogWrite(V12,0);
}
if (incomingByte == '0')
{
digitalWrite(V1,LOW);
digitalWrite(V2,LOW);
digitalWrite(V3,LOW);
digitalWrite(V4,LOW);
digitalWrite(V5,LOW);
digitalWrite(V6,LOW);
analogWrite(V7,0);
analogWrite(V8,0);
analogWrite(V9,0);
analogWrite(V10,0);
analogWrite(V11,0);
analogWrite(V12,0);
Serial.println("12 Ventilateurs : OFF.");
}
}
Serial.flush();
}
Le deuxième code (avec le cycle, qui ne s'arrête pas) :
// Commande de 12 ventilateurs
// Commandes : 1 à 6 pour actionner les ventilateurs et 0 pour tout arrêter.
// 1 actionne les ventilateurs V1 et V7,
// 2 actionne V2 et V8,
// 3 actionne V3 et V9,
// 4 actionne V4 et V10,
// 5 actionne V5 et V11,
// et 6 actionne les ventilateurs V6 et V12.
//
// Schéma de la disposition des ventilateurs par colonne : (colonne V1 à V6 et colonne V7 à V12)
// ____ ____
// | V1 |------| V7 |
// | V2 |------| V8 |
// | V3 |------| V9 |
// | V4 |------| V10|
// | V5 |------| V11|
// | V6 |------| V12|
// |____|------|____|
// Pin des 12 ventilateurs :
// Pins Digitales
const int V1 = 7; // ventilateur n°1
const int V2 = 8; // ventilateur n°2
const int V3 = 9; // ventilateur n°3
const int V4 = 10; // ventilateur n°4
const int V5 = 11; // ventilateur n°5
const int V6 = 12; // ventilateur n°6
// Pins Analogiques
const int V7 = A0; // ventilateur n°7
const int V8 = A1; // ventilateur n°8
const int V9 = A2; // ventilateur n°9
const int V10 = A3; // ventilateur n°10
const int V11 = A4; // ventilateur n°11
const int V12 = A5; // ventilateur n°12
const int LED = 13;
const int T = 5000; // 5 seconds en miliseconds
const int pauseTime = 3000; // 3 seconds pause
const int repeatCount = 2; // T number of times
char incomingByte;
int repeatCounter = 0;
void setup() {
// communication série
Serial.begin(115200);
// Pins Digitales et Analogiques en sortie (output)
pinMode(V1, OUTPUT);
pinMode(V2, OUTPUT);
pinMode(V3, OUTPUT);
pinMode(V4, OUTPUT);
pinMode(V5, OUTPUT);
pinMode(V6, OUTPUT);
pinMode(V7, OUTPUT);
pinMode(V8, OUTPUT);
pinMode(V9, OUTPUT);
pinMode(V10, OUTPUT);
pinMode(V11, OUTPUT);
pinMode(V12, OUTPUT);
// Ventilateurs à l'arrêt
digitalWrite(V1, LOW);
digitalWrite(V2, LOW);
digitalWrite(V3, LOW);
digitalWrite(V4, LOW);
digitalWrite(V5, LOW);
digitalWrite(V6, LOW);
analogWrite(V7, 0);
analogWrite(V8, 0);
analogWrite(V9, 0);
analogWrite(V10, 0);
analogWrite(V11, 0);
analogWrite(V12, 0);
// LED Arduino (pin n°13)
pinMode(LED, OUTPUT); // Pin n°13 en sortie
digitalWrite(LED, LOW); // LED éteinte
}
void loop() {
if (Serial.available() > 0) {
incomingByte = Serial.read();
if (incomingByte == '1') {
Serial.println("Ventilateurs Niveau 1 : ON.");
timer(T, 1, V1, V7);
} else if (incomingByte == '0') {
digitalWrite(V1, LOW);
digitalWrite(V2, LOW);
digitalWrite(V3, LOW);
digitalWrite(V4, LOW);
digitalWrite(V5, LOW);
digitalWrite(V6, LOW);
analogWrite(V7, 0);
analogWrite(V8, 0);
analogWrite(V9, 0);
analogWrite(V10, 0);
analogWrite(V11, 0);
analogWrite(V12, 0);
Serial.println("12 Ventilateurs : OFF.");
} else if (incomingByte == '2') {
Serial.println("Ventilateurs Niveau 2 : ON.");
timer(T, 1, V2, V8);
} else if (incomingByte == '3') {
Serial.println("Ventilateurs Niveau 3 : ON.");
timer(T, 1, V3, V9);
} else if (incomingByte == '4') {
Serial.println("Ventilateurs Niveau 4 : ON.");
timer(T, 1, V4, V10);
} else if (incomingByte == '5') {
Serial.println("Ventilateurs Niveau 5 : ON.");
timer(T, 1, V5, V11);
} else if (incomingByte == '6') {
Serial.println("Ventilateurs Niveau 6 : ON.");
timer(T, 1, V6, V12);
} else if (incomingByte == 'x') {
Serial.println("Arrêt des ventilateurs.");
digitalWrite(V1, LOW);
digitalWrite(V2, LOW);
digitalWrite(V3, LOW);
digitalWrite(V4, LOW);
digitalWrite(V5, LOW);
digitalWrite(V6, LOW);
analogWrite(V7, 0);
analogWrite(V8, 0);
analogWrite(V9, 0);
analogWrite(V10, 0);
analogWrite(V11, 0);
analogWrite(V12, 0);
repeatCounter = 0; // Reset repeat counter
} else if (incomingByte == 'q') {
Serial.println("Arrêt du programme.");
digitalWrite(V1, LOW);
digitalWrite(V2, LOW);
digitalWrite(V3, LOW);
digitalWrite(V4, LOW);
digitalWrite(V5, LOW);
digitalWrite(V6, LOW);
analogWrite(V7, 0);
analogWrite(V8, 0);
analogWrite(V9, 0);
analogWrite(V10, 0);
analogWrite(V11, 0);
analogWrite(V12, 0);
while (true) {} // Wait indefinitely
}
}
void timer(int duration, int numCycles, int pin1, int pin2) {
for (int i = 0; i < numCycles; i++) {
digitalWrite(LED, HIGH); // turn on LED
digitalWrite(pin1, HIGH);
analogWrite(pin2, 255);
delay(duration); // wait for duration
digitalWrite(LED, LOW); // turn off LED
digitalWrite(pin1, LOW);
analogWrite(pin2, 0);
delay(pauseTime); // wait for pauseTime
}
repeatCounter++;
if (repeatCount < 0 || repeatCounter < repeatCount) {
timer(duration, numCycles, pin1, pin2);
} else {
repeatCounter = 0;
}
}
Serial.flush();
}