J'ai un problème de compréhension pour afficher l'affichage de toutes mes 10 leds (allumés,éteints) ce qui fait un total si je ne me trompe pas de 10 000 000 000 possibilités(si c'est faisable...)
J'utilise mon code pour afficher toutes les leds :
const int CODE[10]={1,2,3,4,5,6,7,8,9,10};
void setup() { // debut de la fonction setup()
// instructions à exécuter au démarrage
for (int i=0; i<=9; i++) {
pinMode(CODE[i], OUTPUT);
}
} // fin de la fonction setup()
void loop(){ // debut de la fonction loop()
for (int i=0; i<=9; i++) { // boucle de défilement des 10 broches
digitalWrite(CODE[i],LOW);
}
delay (500); // pause fixant la vitesse de defilement
for (int i=0; i<=9; i++) { // boucle de défilement des 10 broches
digitalWrite(CODE[i],HIGH);
}
delay(500); // pause fixant la vitesse de defilement
} // fin de la fonction setup()
/* Déclaration de broches des led */
const byte pin_led[10] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
/* setup() */
void setup() {
/* Mise en sortie et à LOW de toute les broches des led */
for(byte i = 0; i < 10; ++i) {
pinMode(pin_led[i], OUTPUT);
digitalWrite(pin_led[i], LOW);
}
}
/* loop() */
void loop() {
/* Variable static servant de compteur */
static unsigned int compteur = 0;
/* Pour chaque bits (= à une led) du compteur */
for(byte i = 0; i < 10; ++i) {
if(compteur & (1 << i)) // Si le bit est égale à "1" logique
digitalWrite(pin_led[i], HIGH); // Led allumé
else // Sinon
digitalWrite(pin_led[i], LOW); // Led éteinte
}
/* Incrémentation du compteur */
if(++compteur & 1024)
compteur = 0; // Si le compteur atteint la limite de 1024 on repart de zéro
/* Delai de 1/2 seconde */
delay(500);
}
Effet de rotation sur 10 bits :
/* Déclaration de broches des led */
const byte pin_led[10] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
/* setup() */
void setup() {
/* Mise en sortie et à LOW de toute les broches des led */
for(byte i = 0; i < 10; ++i) {
pinMode(pin_led[i], OUTPUT);
digitalWrite(pin_led[i], LOW);
}
}
/* loop() */
void loop() {
/* Variable static servant de spinner */
static unsigned int spinner = 1;
/* Pour chaque bits (= à une led) du spinner */
for(byte i = 0; i < 10; ++i) {
if(spinner & (1 << i)) // Si le bit est égale à "1" logique
digitalWrite(pin_led[i], HIGH); // Led allumé
else // Sinon
digitalWrite(pin_led[i], LOW); // Led éteinte
}
/* Rotation du spinner */
spinner <<= 1;
if(spinner & 1024)
spinner = 1; // Si le spinner atteint la limite de 1024 on repart de zéro
/* Delai de 1 seconde */
delay(1000);
}
crashnix:
En demontant la sonde j'ai vue qu'il y a 10 dips swiths qui sert de codage mais pas dans les unités (Je pense qu'elle sont codées via logiciel)
Dans ton logiciel tu n'as pas une option du genre :
Position 1 = capteur n°xxxxx
Position 2 = capteur n°yyyyyy
...
Si c'était le cas tu n'aurais besoin que de controler 2 dips switch pour controler tes 3 actionneurs (2^2 = 4 possibilités).
crashnix:
D'ou un essai avec des leds pour comprendre le principe que j'applique en théorie sur la sonde avec quelques bidouilles
Bien faire attention :
dip switch = interrupteurs
Si le systéme travaille en logique TTL pas de probléme, mais sinon il faudra prévoir d'utiliser des transistors pour remplacer les dip switch (exemple BC547).