Bonjour, une astuce pour économiser les sorties.
Comme les deux LEDS fonctionnent en exclusion mutuelle, une seule ligne de commande est nécessaire et cela fonctionne bien.
La sortie tout ou rien de l’arduino tire la broche de la LED à 0V ou +5V
Site du Club de Robotique et d'Electronique Programmable de Ploemeur.
je vous invite à lire les discussions du Mooc qui apportent énormément en idée innovantes.
Parmi le lot, j’ai relevé:
Hello, J’ai fait un petit exercice, j’ai utilisé 5 leds qui s’allument progressivement au lieu de 1. Voici le schéma et le code pour ceux que ça intéresserait 🙂
// Initialisation des constantes :
const int analogInPin = A0; // Numéro de la broche à laquelle est connecté la photorésistance
const int led1 = 9;
const int led2 = 10;
const int led3 = 11;
const int led4 = 12;
const int led5 = 13;
int sensorValue = 0; // Valeur lue sur la photorésistance
int outputValue = 0;
int val1 = 0;
int val2 = 0;
int val3 = 0;
int val4 = 0;
int val5 = 0;
void setup() {
// Indique les sorties vers les leds
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
// Indique que la broche analogInPin est une entrée :
pinMode(analogInPin, INPUT);
}
// Fonction qui prend un entier en entré
// et soustrait jusqu'à 255 de ce nombre
// renvoit la valeur sous-traite
// Notez le & dans le type du paramètre qui indique que le
// paramètre est passé par "référence" et non par "valeur"
int get_next_led_val(int& val)
{
// le paramètre est déjà à zéro
// on ne peut rien soustraire
// on renvoit 0
if (val==0)
return 0;
// variable pour conserver la valeur à renvoyer
int ret_val = 0;
// le paramètre a une valeur comprise entre 0 et 255
// on va donc tout enlever, il sera à zéro
// on renvoit la valeur initial du paramètre
if (val <= 255)
{
ret_val = val;
val = 0;
}
else
{
// le paramètre est plus grand que 255
// on lui enlève donc 255
// on renvoit 255
ret_val = 255;
val = val - 255;
}
// renvoit de la valeur
return ret_val;
}
void loop() {
// lit la valeur de la photorésistance et
// stocke le résultat dans sensorValue :
sensorValue = analogRead(analogInPin);
// change sensorValue vers une intervalle de 0 à 255
// et stocke le résultat dans outputValue :
// comme on a 5 leds, la valeur maximum est 5 * 255 = 1275
outputValue = map(sensorValue, 0, 1023, 0, 1275);
// On allume la led 1 en "consommant" jusqu'à 255 de outputValue
analogWrite(led1, get_next_led_val(outputValue));
// idem pour la led2...
analogWrite(led2, get_next_led_val(outputValue));
// la led3..
analogWrite(led3, get_next_led_val(outputValue));
// ...
analogWrite(led4, get_next_led_val(outputValue));
// .
analogWrite(led5, get_next_led_val(outputValue));
}
Bonjour, une astuce pour économiser les sorties.
Comme les deux LEDS fonctionnent en exclusion mutuelle, une seule ligne de commande est nécessaire et cela fonctionne bien.
La sortie tout ou rien de l’arduino tire la broche de la LED à 0V ou +5V