Étape 4: Discussion de CODE
Cette section décrit les différentes variables et constantes, que nous allons utiliser. Veuillez noter que j’ai utilisé const byte au lieu d’int. La raison en est, est que les micro-controleurs ont très peu d’espace de stockage. Valeurs int peuvent prendre jusqu'à 28 octets, où comme un octet de valeur peut stocker un nombre entre 1 et 255 et prend seulement... 1 octet. J’ai utilisé la balise int pour touchThreshold parce que je recevais des valeurs supérieures à 255 retourné.Const byte est utilisé, car il indique au compilateur d’utilisation stockage optimiseur.
const byte LEDPin = 11 ; Broche de sortie PWM pour LED
const byte capSensePin = 2 ; Broche pour fixer à un capteur capacitif
mode octets = 0 ; Détermine la luminosité de la LED. 0 est éteint. Varie entre 0 et 255.
int touchThreshold = 100 ; Valeur minimale tactile capacitif pour déclencher le mode suivant
targetBrightness octets = 0 ; Puissance réglée sur la luminosité
currentBrightness octets = 0 ;
Annuler le programme d’installation s’exécute une fois et assignez pinModes etc. J’ai commencer le serial monitor ici parce que je l’utilisais pour tirer d’ennui.
void setup() {}
Serial.Begin(9600) ;
pinMode (LEDPin, sortie) ; Mode de sortie la valeur LEDPin
}
void loop() {}
Il s’agit de la boucle principale du programme. Il garde en répétant et en passant par les différentes lignes de code.
Si (readCapacitivePin(capSensePin) > touchThreshold) {//If la valeur de capSensePin est supérieure à touchThreshold puis faire...
Delay(250) ;
Bouton Debounce. Comment supprimerait cette rupture à l’aide de millis()??
mode ++ ; Si le seuil du touch est dépassé, augmentez la valeur de mode par 1
Cette section suivante décrit les différents niveaux de luminosité des LED. Deux == dans une ligne indique au processeur de comparer deux valeurs.
Si mode (mode > 3) = 0 ; Si la valeur de mode est > 3 puis la valeur valeur mode 0.
Si (mode == 0) targetBrightness = 0 ;
Si (mode == 1) targetBrightness = 255 ;
Si (mode == 2) targetBrightness = 128 ;
Si (mode == 3) targetBrightness = 64 ;
Serial.Print ("le mode actif est...") ; Serial monitor bebug mode augmente
Serial.println(mode) ; imprimer la valeur de mode de moniteur seial
}
Se fanent la portion
Si (targetBrightness > currentBrightness) currentBrightness ++ ; Si la luminosité de la cible est inférieure à la luminosité actuelle, puis de + 1 à //current luminosité
Si (targetBrightness < currentBrightness) currentBrightness--;
analogWrite (LEDPin, currentBrightness) ; PWM sortie vers LEDPin. Cela modifie la luminosité de la lumière
Delay(3) ;
Serial.println(currentBrightness) ;
CE MOMENT JE N’ÉCRIVAIS PAS. Il a été iincluded dans l’exemple de l’arduino.
Toutes les 500 ms, imprimer la valeur du capteur capacitif
Si ((millis() % 500) == 0) {}
Serial.Print ("capteur capacitif sur broche 2 se lit:") ;
Serial.println(readCapacitivePin(capSensePin)) ;
}
}
readCapacitivePin
D’entrée : Numéro d’identification Arduino
Sortie : Un nombre, de 0 à 17 exprimant
Combien capacitance est sur la broche
Quand vous touchez la broche, ou ce que vous avez
attaché à elle, le nombre obtiendrez plus élevé
Afin que cela fonctionne maintenant,
Le code pin doit avoir un + 1 Megaohm résistance traction
Il place à + 5v.
uint8_t readCapacitivePin (int pinToMeasure) {}
C’est comment vous déclarez une variable qui
tiendra les registres PORT PIN et DDR
sur un AVR
volatils uint8_t * port ;
volatils uint8_t * ddr ;
volatils uint8_t * tige ;
Ici nous traduisons le nombre de broches d’entrée de
Arduino code PIN au PORT d’AVR, broches, DDR,
et que peu de ces registres, nous nous soucions.
masque de bits octets ;
Si ((pinToMeasure > = 0) & & (pinToMeasure < = 7)) {}
port = & PORTD ;
DDR = & DDDR ;
masque de bits = 1 << pinToMeasure ;
pin = & PIND ;
}
Si ((pinToMeasure > 7) & & (pinToMeasure < = 13)) {}
port = & PORTB ;
DDR = & DDRB ;
masque de bits = 1 << (pinToMeasure - 8) ;
pin = & PINB ;
}
Si ((pinToMeasure > 13) & & (pinToMeasure < = 19)) {}
port = & PORTC ;
DDR = & DDRC ;
masque de bits = 1 << (pinToMeasure - 13) ;
pin = & PINC ;
}
Décharger la broche tout d’abord en lui affectant faible et de sortie
* port & = ~ (masque) ;
* ddr | = masque de bits ;
Delay(1) ;
Faire de la broche une entrée sans le pull-up interne sur
* ddr & = ~ (masque) ;
Voyons maintenant combien de temps la goupille pour obtenir tiré vers le haut
cycles d’int = 16000 ;
pour (int i = 0; i < cycles; i ++) {}
Si (* NIP & masque de bits) {}
cycles = i ;
rupture ;
}
}
Décharger la goupille à nouveau en lui affectant faible et de sortie
Il est important de laisser les broches faible si vous voulez
être en mesure de toucher plus de 1 capteur à la fois - si
le capteur est laissé tiré haut, quand vous touchez
deux capteurs, votre corps va transférer la charge entre les
capteurs.
* port & = ~ (masque) ;
* ddr | = masque de bits ;
retour cycles ;
}