Étape 3: programmation
La façon dont je suis allé sur la programmation de cet appareil était tout à fait un voyage. J’ai voulu que la led s à réagir sur le capteur à ultrasons et à changer de couleur en fonction de la distance du capteur à ultrasons renvoyé. Lorsque la distance entre l’objet et le capteur est faible, que l’objet est proche, la couleur est rouge. Plus loin l’objet va, le plus écologique du SEAOG de couleur. Evrithing entre les deux est un mélange de ces couleurs et évolue vers le haut, que la distance augmente. Cela se traduit par un spectre de couleurs entre le rouge et le vert.
Télécharger le code de l’arduino vous causer n’aura acces au port usb, une fois que l’arduino est inséré dans le boîtier.
/*
Cycle de RVB à l’aide d’un capteur à ultrason.
Auteur : Bryan Vermaat - 2016
Voir pour une utilisation de ce code.
Ce code est accessible au public et peut être édité/modifié *
/ Les trois LEDs de couleurs primaires, conduits comme analgue sorties (en fait de PWM, mais / / suffisamment proche pour nos yeux analogique).
const int ledPinRed = 11 ; LED rouge relié à analogique sur broche const int ledPinGrn = 10 ; LED vert relié à analogique sur broche const int ledPinBlu = 9 ; LED bleue connecté à analogique broche de sortie
const int trigPin = 13 ; const int echoPin = 12 ; const int modeSwitchPin = 12 ;
Le potentiomètre de teinte va sur une broche analogique, en tenant la tige de / / 0V à 5V.
const int potPinHue = 0 ;
Constantes pour définir les plages.
const int hueRedLow = 0 ; const int hueRedHigh = 255 ; const int hueBlue = 170 ;
La gamme minimale et maximale pour le capteur à ultrasons.
const int rangeMin = 0 ; const int rangeMax = 200 ;
const int brightMin = 0 ; const int sekou = 255 ;
Variables de travail.
La valeur du potentiomètre est mappée à la plage de 0 à 360 (degrés). int valueHue ;
La teinte est la gamme de 0 (rouge) à 170 (en bleu) dans l’arc en ciel / / mode ou 255 (rouge) en couleur mode roue. Les gammes de luminosité de 0 (noir) à 255 (intensité maximum)
int teinte, luminosité ;
La saturation est fixée à 255 (complet) pour supprimer blead-par le biais de différents / / couleurs. Il pourrait être lié à un autre potentiomètre si une démonstration de teinte / / est souhaitée.
const int saturation = 255 ;
Le brightess de chaque LED (de 0 à 255).
unsigned int r, g, b ;
void setup() {/ / toujours besoin de fixer un taux de baud, même pour l’USB. Serial.Begin(9600) ;
Réglez de façon strictement de LED pour la sortie. pinMode (ledPinRed, sortie) ; pinMode (ledPinGrn, sortie) ; pinMode (ledPinBlu, sortie) ;
Définissez les broches pour le capteur à ultrasons. pinMode (trigPin, sortie) ; pinMode (echoPin, entrée) ; }
void loop() {/ / Hue le potentiomètre valeur est mappée à degrés - 0 à 360 - pour plus de commodité. valueHue = map(MeasureDistance(), 0, 1023, 0, rangeMax) ;
Mode de roue de couleur (rouge avec rouge, enroulé autour d’un cycle).
teinte = carte (valueHue, rangeMin, rangeMax, hueRedLow, hueRedHigh) ;
La luminosité est fixée à plein pour la roue de couleur. Cela pourrait être / / lié à un autre poteniometer si c’est un concept que vous désirez / / démontrer. luminosité = 255 ;
Effectuer la conversion. HSBToRGB (teinte, saturation, luminosité, r, g, & b) ;
analogWrite (ledPinRed, r) ; analogWrite (ledPinGrn, g) ; analogWrite (ledPinBlu, b) ;
Serial.Print ("lumineux =") ; Serial.Print(Brightness) ; Serial.Print ("teinte =") ; Serial.Print(Hue) ; Serial.Print ("rouge =") ; Serial.Print(r) ; Serial.Print ("vert =") ; Serial.Print(g) ; Serial.Print ("bleu =") ; Serial.Print(b) ; Serial.println("") ; Delay(50) ; }
Cette fonction de cassure: / / http://eduardofv.com/2011/01/15/arduino-rgb-led-h...
void HSBToRGB (unsigned int inHue inSaturation unsigned int, unsigned int inBrightness, unsigned int * ou, unsigned int * oG, unsigned int * oB) {si (inSaturation == 0) {/ / achromatique (gris) * ou = * oG = * oB = inBrightness;} else {unsigned int scaledHue = (inHue * 6); unsigned int secteur = scaledHue >> 8; / / secteur 0 à 5 autour de la couleur roue unsigned int offsetInSector = scaledHue - (secteur << 8); / / position au sein du secteur unsigned int p = (inBrightness * (255 - inSaturation)) >> 8; unsigned int q = (inBrightness * (255 - ((inSaturation * offsetInSector) >> 8))) >> 8 ; unsigned int t = (inBrightness * (255 - ((inSaturation * (255 - offsetInSector)) >> 8))) >> 8 ;
commutateur (secteur) {case 0: * RC = inBrightness; * oG = t; * oB = p; break ; case 1: * RC = q; * oG = inBrightness; * oB = p; break ; case 2: * RC = p; * oG = inBrightness; * oB = t; break ; case 3: * RC = p; * oG = q; * oB = inBrightness ; break ; case 4: * RC = t; * oG = p; * oB = inBrightness ; break ; default: / / case 5: * RC = inBrightness; * oG = p; * oB = q; break;}} }
Fonction pour mesurer la distance à l’aide d’un capteur à ultrason HC-SR04 long MeasureDistance() {longue durée, la distance digitalWrite (trigPin, basse); delayMicroseconds(2) ; digitalWrite (trigPin, HIGH); delayMicroseconds(10) ; digitalWrite (trigPin, LOW); durée = pulseIn (echoPin, HIGH); distance = (durée/2) / 29,1 ; si (distance > = rangeMax || distance < = rangeMin) {Serial.println (« hors de l’intervalle défini. Retour à la Max.") ; retour rangeMax ; } else {Serial.print(distance) ; Serial.println ("cm") ; le sentier ; } }