Ligne 139 : |
Ligne 139 : |
| | | |
| === Seuil d'allumage (threshold) === | | === Seuil d'allumage (threshold) === |
− | Vous voulez parfois activer une sortie lorsqu'une valeur a atteint un certain seuil. Pour faire cela avec un potentiomètre, changez le code de {{fname|loop()}} comme suit : | + | Vous voulez parfois activer une sortie lorsqu'une valeur a atteint un certain seuil. |
| | | |
− | <nowiki>void loop() {
| + | Dans cet exemple de programme, nous avons fait le choix délibéré d'utiliser un seuil en pourcentage. Nous aurions pu choisir la valeur 1843 produite par le convertisseur digital -> analogique. |
− | int threshold = 512; // seuil = 512
| |
− | if(analogRead(sensorPin) > threshold){
| |
− | digitalWrite(ledPin, HIGH);
| |
− | }
| |
− | else{
| |
− | digitalWrite(ledPin, LOW);
| |
− | }
| |
− | }</nowiki>
| |
| | | |
− | Cela allumera la LED lorsque la valeur sera supérieure à 512 (mi-course), vous pouvez adapter la sensibilité en modifiant la valeur du seuil (la variable {{fname|threshold}} ). | + | 1843 représente quand même 1843 / 4096 * 100 = 44.99% de la valeur maximale retournée par le convertisseur. |
| + | |
| + | Si je vous dis, "mettez le potentiomètre à la valeur 1843!" ou "mettez le potentiomètre à 45%" vous remarquerez que la seconde expression est naturellement transposable en action physique. |
| + | |
| + | Nous allons donc: |
| + | # Réutiliser la fonction magique {{fname|arduino_map}} pour transformer la valeur du convertisseur analogique digital (0-4096) en valeur de 0 à 100. |
| + | # Comparer la valeur obtenue à un seuil exprimé en "pourcentage", voyez la variable {{fname|seuil_pc}} |
| + | |
| + | Pour faire cela avec un potentiomètre, changez le code de votre programme comme suit : |
| + | |
| + | <nowiki># Lecture analogique pour contrôler allumer une LED sur base d'un seuil. |
| + | # ATTENTION: échantillonnage 12 Bits (valeur de 0 à 4096) |
| + | from pyb import Timer, delay |
| + | |
| + | adc = pyb.ADC(pyb.Pin.board.X19) # Créer ADC sur la broche X19 |
| + | led = pyb.Pin(pyb.Pin.board.X1, pyb.Pin.OUT_PP ) # Créer la sortie pour la LED |
| + | led.low() # Led éteinte |
| + | seuil_pc = 45 # seuil à 45% |
| + | |
| + | # fonction qui permet de passer d'un range de valeur (in_) à une autre |
| + | # (out_) en appliquant une règle de trois. |
| + | 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: |
| + | # Lectures analogiques |
| + | ivalue = adc.read() |
| + | |
| + | # Transformer une valeur analogique (0 à 4096) en pourcent (0 à 100) |
| + | position_pc = arduino_map( ivalue, 0, 4096, 0, 100 ) |
| + | |
| + | # Activer la sortie si plus grand que seuil |
| + | if position_pc > seuil_pc: |
| + | led.high() |
| + | else: |
| + | led.low() |
| + | |
| + | delay( 100 ) |
| + | </nowiki> |
| + | |
| + | 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) === | | === Faire un Dimmer (fading) === |