Modifications

Sauter à la navigation Sauter à la recherche
459 octets ajoutés ,  13 décembre 2015 à 12:10
Ligne 184 : Ligne 184 :  
Cela allumera la LED lorsque la valeur sera supérieure à 45% de la course du potentiomètre, vous pouvez adapter la sensibilité en modifiant la valeur du seuil (la variable {{fname|seuil_pc}}) avec une valeur entre 0 et 100.
 
Cela allumera la LED lorsque la valeur sera supérieure à 45% de la course du potentiomètre, vous pouvez adapter la sensibilité en modifiant la valeur du seuil (la variable {{fname|seuil_pc}}) avec une valeur entre 0 et 100.
   −
=== Faire un Dimmer (fading) ===
+
=== Optimisation ===
Contrôlons maintenant la luminosité de la LED directement à partir du potentiomètre.
+
Dans le point précédent, nous avons activé la LED à l'aide d'un bloc {{fname|if... else}} afin de préserver la lisibilité.
   −
Pour y arriver, nous devons d'abord changer la broche sur laquelle la LED est connectée.  
+
<nowiki>    # Activer la sortie si plus grand que seuil
 +
    if position_pc > seuil_pc:
 +
led.high()
 +
    else:
 +
        led.low()</nowiki>
   −
Déplacez le fil de la pin 13 à la pin 9 et changez la ligne de code:
+
Le fait est que l'expression {{fname|position_pc > seuil_pc}} est soit vraie/{{fname|True}}, soit fausse/{{fname|False}}.
   −
<nowiki>int ledPin = 13;</nowiki>
+
Il est donc possible de remplacer le bloc {{fname|if... else}} et {{fname|led.high()}}/{{fname|led.low()}} par une seule ligne de code:
   −
vers
+
<nowiki>led.value( position_pc > seuil_pc )</nowiki>
   −
<nowiki>int ledPin = 9;</nowiki>
+
=== Optimisation 2 ===
 +
Bien que l'on perte beaucoup en lisibilité, le bloc {{fname|while}} de notre programme peut être réduit à deux ligne... si si
   −
Modifiez ensuite le code de {{fname|loop()}} comme suit :
+
<nowiki>from pyb import Timer, delay
   −
<nowiki>void loop() {
+
adc = pyb.ADC(pyb.Pin.board.X19)   # Créer ADC sur la broche  X19
  int value = analogRead(potPin) / 4;
+
led = pyb.Pin(pyb.Pin.board.X1, pyb.Pin.OUT_PP ) # Créer la sortie pour la LED
  analogWrite(ledPin, value);
+
led.low()                           # Led éteinte
}</nowiki>
+
seuil_pc = 45                      # seuil à 45%
   −
Chargez le code et regardez la luminosité de la LED varier en fonction de la position du potentiomètre. (Note: la raison pour laquelle nous avons divisé la valeur par 4 est que la fonction analogRead() retourne une valeur entre 0 et 1024 (10 bits), et que analogWrite() accepte une valeur entre 0 et 255 (8 bits).
+
def arduino_map(x, in_min, in_max, out_min, out_max):
 +
    return int( (x - in_min) * (out_max - out_min) // (in_max - in_min) + out_min )  
 +
 
 +
while True:
 +
    led.value( arduino_map( adc.read(), 0, 4096, 0, 100 ) > seuil_pc )   
 +
    delay( 100 )</nowiki>
    
=== Contrôler un servo ===
 
=== Contrôler un servo ===
29 836

modifications

Menu de navigation