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 === |