signe etrange ???

Les cartes Arduino, les platines

signe etrange ???

Message non lude lcd1602 » Sam 13 Oct 2012 15:17

bonjour;
j'ai un doute!!!
voici un bout de code d'un prog de lampe:

int sample_1 = 0;
int sample_2 = 0;
int sample_3 = 0;
int sample_4 = 0;


void setup() {
analogWrite(LED_PIN, 0);
}

void loop() {
sample_1 = analogRead(SENSOR_PIN); delay(1);
sample_2 = analogRead(SENSOR_PIN); delay(1);
sample_3 = analogRead(SENSOR_PIN); delay(1);
sample_4 = analogRead(SENSOR_PIN); delay(1);
adc_input = (sample_1 + sample_2 + sample_3 + sample_4) >> 2;

if(debounce_cycles)
debounce_cycles -= 1;
else {




d’après moi, :roll: la dernière ligne est une vérification si le capteur n'a pas capter des parasites, le double signe >> doit dire supérieur, mais il n'y a pas de comparaisons ?
comment est possible ??
merci pour votre lecture.
lcd1602
 
Messages: 22
Inscription: Sam 5 Mai 2012 12:16

Re: signe etrange ???

Message non lude SesechXP » Sam 13 Oct 2012 19:32

Salut,

L'extrait de code est trop restreint pour savoir exactement à quoi sert debounce_cycles. A priori tant que cette variable est supérieure à 0 on ne fait rien. Mais il faudrait voir la suite pour en être sûr...

Quand à la ligne
Code: Tout sélectionner
adc_input = (sample_1 + sample_2 + sample_3 + sample_4) >> 2;

ce n'est pas un comparaison mais un décalage de 2 bits vers la droite de la somme des sample_n.

Si par exemple sample_1 + sample_2 + sample_3 + sample_4 = 0b00001100 avant décalage, avec un décalage de 2 bits vers la droite ce sera égal à 0b00000011. C'est du C/C++ classique. C'est aussi expliqué dans la référence Arduino.

++
SesechXP
 
Messages: 228
Inscription: Sam 28 Mai 2011 09:09
Localisation: 35

Re: signe etrange ???

Message non lude lcd1602 » Dim 14 Oct 2012 09:20

bonjour, merci pour votre aide.
je vous joint le listing du programme en question:http://formalab.fr/sites/formalab.fr/files/sequences/luminch_one.ino
c'est une lampe interactive.
je suis en train de retranscrir le prog. sous: Minibloq
c'est pour réaliser avec des jeunes cette lampe.
merci de votre aide.
lcd1602
 
Messages: 22
Inscription: Sam 5 Mai 2012 12:16

Re: signe etrange ???

Message non lude SesechXP » Dim 14 Oct 2012 10:08

C'est plus clair ;) Grosso modo la variable debounce_cycles évite d'effectuer trop souvent le traitement du résultat de la lecture des entrées analogiques. Sans doute parce que ça n'a pas de sens de le faire à chaque appel de la fonction loop.

++
SesechXP
 
Messages: 228
Inscription: Sam 28 Mai 2011 09:09
Localisation: 35

Re: signe etrange ???

Message non lude lcd1602 » Dim 14 Oct 2012 10:34

d'accord,
Code: Tout sélectionner
adc_input = (sample_1 + sample_2 + sample_3 + sample_4) >> 2;

ce qui revient à diviser par 4 :?:
je pensai à une sorte de philtre pour éviter les parasites objets ( mouche...) passant devant le capteur :roll:
merci de votre lecture.
lcd1602
 
Messages: 22
Inscription: Sam 5 Mai 2012 12:16

Re: signe etrange ???

Message non lude SesechXP » Dim 14 Oct 2012 12:54

Tout à fait, nombre de microcontrôleurs dont les ATmega embarqués sur les cartes Arduino ne sont pas taillés pour faire des opérations mathématiques. Les décalages de bits sont donc à privilégier.
Dernière édition par SesechXP le Dim 14 Oct 2012 17:01, édité 1 fois.
SesechXP
 
Messages: 228
Inscription: Sam 28 Mai 2011 09:09
Localisation: 35

Re: signe etrange ???

Message non lude lcd1602 » Dim 14 Oct 2012 15:43

ouiiii :mrgreen:
mais minibloq ne sait pas faire ce décalage, il fait que les opérations basic du fait d'une accessibilité très large.

if(abs(target_bright - hand_tracked_bright) > HAND_MINIMUM_CHANGE || !lamp_lighted) {
target_bright = (target_bright + (hand_tracked_bright > 8 ? hand_tracked_bright : 8)) >> 1;
lamp_lighted = true;

que veulent dire les deux trait verticaux après change ?
merci pour votre lecture.
lcd1602
 
Messages: 22
Inscription: Sam 5 Mai 2012 12:16

Re: signe etrange ???

Message non lude SesechXP » Dim 14 Oct 2012 17:05

lcd1602 a écrit:mais minibloq ne sait pas faire ce décalage, il fait que les opérations basic du fait d'une accessibilité très large.

C'est souvent le dilemme : efficacité ou accessibilité :mrgreen:

lcd1602 a écrit:que veulent dire les deux trait verticaux après change ?

C'est un ou logique. La condition est valide si abs(target_bright - hand_tracked_bright) > HAND_MINIMUM_CHANGE ou si lamp_lighted vaut 0. Voir cette page.
SesechXP
 
Messages: 228
Inscription: Sam 28 Mai 2011 09:09
Localisation: 35


Retourner vers Arduino

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 4 invités