Bonjour à tous,
Je souhaite fabriquer ma propre "console DMX". C'est une console qui me permet de commander des projecteurs mais je n'utilise pas le DMX 512. Mes projecteurs sont allumés par un alimentation externe et j'utilise un MOSFET pour le signal PWM.
Pour basculer entre mes projecteurs, j'utilise 2 boutons, ex :
x = 1; projecteur rouge
x = 2; projecteur vert
x = 3; projecteur bleu
x = 4; projecteur blanc
1 bouton augmente x, 1 autre diminue x, cela me permet de définir le clignotement et le PWM de chaque projecteurs. Mon problème c'est que je ne sais pas s'il faut une boucle ou non pour modifier x, je l'ai mis dans une boucle while. Merci de votre aide
Voici le code:
#include <LiquidCrystal.h>
//pins du lcd
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
//logo PWM
byte PWM[8] = {
0b00000,
0b01000,
0b10100,
0b10100,
0b00101,
0b00101,
0b00010,
0b00000
};
byte UN[8] = {
0b00000,
0b00000,
0b00000,
0b00100,
0b01100,
0b00100,
0b00100,
0b01110
};
byte DEUX[8] = {
0b00000,
0b00000,
0b00000,
0b01100,
0b10010,
0b00100,
0b01000,
0b11110
};
byte TROIS[8] = {
0b00000,
0b00000,
0b00000,
0b01100,
0b00010,
0b00100,
0b00010,
0b01100
};
// état de l'interrupteur d'activation ON/OFF
int switchValeur;
// état de la lumière
int rState = 0;
// temps soustrait
unsigned long rMillis = 0;
// temps
unsigned long recurrentMillis;
// valeur PWM
int rLight;
// délai de clignotement
int rSpeed, x;
void setup(){
lcd.begin(16,4);
lcd.clear();
lcd.createChar(1, UN);
lcd.createChar(2, DEUX);
lcd.createChar(3, TROIS);
lcd.createChar(4, PWM);
lcd.setCursor(0,0);
lcd.print("Speed");
lcd.setCursor(0,1);
lcd.write(4);
lcd.setCursor(1,1);
lcd.write(1);
lcd.setCursor(0,2);
lcd.write(4);
lcd.setCursor(1,2);
lcd.write(2);
lcd.setCursor(0,3);
lcd.write(4);
lcd.setCursor(1,3);
lcd.write(3);
// lampe rouge
pinMode(2, OUTPUT);
//interrupteur x++
pinMode(8, INPUT);
//interrupteur x--
pinMode(9, INPUT);
//interrupteur activation ON/OFF
pinMode(10, INPUT);
}
void loop(){
// lecture interrupteur x++
int xPositive = digitalRead(8);
//lecture interrupteur x--
int xNegative = digitalRead(9);
while(x >= 0){
// valeur de x
x = 0;
if(xPositive == HIGH) {
// si l'interrupteur est activé ALORS x = x+1
x++;
}
else if(xNegative == HIGH){
// si l'interrupteur est activé ALORS x = x-1
x--;
}
}
// exécution de différents traitements en fonction de x
switch (x) {
// lecture des variables pour la lampe rouge
case 0:
// permet d'éviter que des valeurs ne se mélangent et se changent en choisissant la bonne couleur
switchValeur = digitalRead(10);
if (switchValeur == HIGH) {
rLight = (analogRead(A0)/4);
rSpeed = analogRead(A1);
}
break;
default:
// On ne fait rien dans les autres cas
break;
}
// lecture du délai
recurrentMillis = millis();
// différence et exécution en fonction de la lecture analogique
if ( (recurrentMillis - rMillis) >= rSpeed) {
// remise à "zéro"
rMillis = recurrentMillis;
// si la lampe est à l'état bas alors l'allumer en fonction du PWM
if (rState == 0) {
rState = rLight;
} else {
//si la lampe est à l'état haut alors l'éteindre
rState = 0;
}
}
// exécution du PWM
analogWrite(2, rState);*/
}