RGB avstånd beroende ljus (3 / 4 steg)
Steg 3: programmering
Hur jag gick om programmering enheten var ganska lång väg. Jag ville led att reagera på ultrasonic sensor och ändra färg beroende på avståndet ultraljud sensorn återvände. När avståndet mellan objekt och sensor är låg, så att objektet är nära, är färgen röd. Ju längre går bort objektet, desto grönare färg blir. Evrithing i mellan är en blandning av dessa färger och skalar när avståndet ökar. Detta resulterar i ett färgspektrum mellan rött och grönt.
Ladda upp koden till arduino orsak du slipper acces till USB-porten när arduino sätts in i höljet.
/*
RGB cykel med hjälp av en ultrasonic sensor.
Författare: Bryan Vermaat - 2016
Se för en användning av denna kod.
Denna kod är allmänt tillgänglig och kan vara redigerad/ändras *
/ Tre primär färg lysdioderna, drivs som analgue utgångar (faktiskt PWM, men / / nära nog för våra analoga ögon).
CONST int ledPinRed = 11; Röd lysdiod ansluten till analog ut pin const int ledPinGrn = 10; Grön lysdiod ansluten till analog ut pin const int ledPinBlu = 9; Blå LED ansluten till analog ut pin
CONST int trigPin = 13. CONST int echoPin = 12; CONST int modeSwitchPin = 12;
Potentiometer nyans går på en analog stift, med PIN-koden från / / 0V till 5V.
CONST int potPinHue = 0;
Konstanter att definiera spänner.
CONST int hueRedLow = 0; CONST int hueRedHigh = 255; CONST int tobbehallin = 170;
Minimal och maximal spänna för ultrasonic sensor.
CONST int rangeMin = 0; CONST int rangeMax = 200.
CONST int brightMin = 0; CONST int brightMax = 255;
Arbeta variabler.
Potentiometer värdet är mappad till intervallet 0 till 360 (grader). int valueHue;
Nyansen är intervallet 0 (röd) till 170 (blå) i rainbow / / läge eller 255 (röd) i färg hjul läge. I ljusstyrka varierar från 0 (mörk) till 255 (full ljusstyrka)
int nyans, ljusstyrka;
Mättnad är fastställd till 255 (full) ta bort Bleda-through av olika / / färger. Det kan vara kopplat till en annan potentiometer om en demonstration av nyans / / önskas.
CONST int mättnad = 255;
Brightess av varje LED (0 till 255).
unsigned int r, g, b;
void setup() {/ / fortfarande behöver ange baudvärde, även för USB. Serial.BEGIN(9600);
Ställ in LED stift till utgång. pinMode (ledPinRed, produktionen); pinMode (ledPinGrn, produktionen); pinMode (ledPinBlu, produktionen);
Ställ in stiften för ultrasonic sensor. pinMode (trigPin, produktionen); pinMode (echoPin, ingång); }
void loop() {/ / The nyans potentiometer värdet mappas till grader - 0 till 360 - för bekvämlighet. valueHue = map(MeasureDistance(), 0, 1023, 0, rangeMax);
Hjulet färgläge (rött till rött, svepte runt i en cykel).
nyans = karta (valueHue, rangeMin, rangeMax, hueRedLow, hueRedHigh);
Ljusstyrkan är fast vid full för färg hjulet. Detta kan vara / / länkade till en annan poteniometer om det är ett koncept som du vill / / visa. ljusstyrka = 255;
Göra konverteringen. HSBToRGB (nyans, mättnad, ljusstyrka, & r & g & b);
analogWrite (ledPinRed, r); analogWrite (ledPinGrn, g); analogWrite (ledPinBlu, b);
Serial.Print ("ljusa ="); Serial.Print(Brightness); Serial.Print ("nyans ="); Serial.Print(Hue); Serial.Print ("röda ="); Serial.Print(r); Serial.Print ("gröna ="); Serial.Print(g); Serial.Print ("blå ="); Serial.Print(b); Serial.println(""); Delay(50); }
Denna funktion tas från här: / / http://eduardofv.com/2011/01/15/arduino-rgb-led-h...
void HSBToRGB (unsigned int inHue, unsigned int inSaturation, unsigned int inBrightness, unsigned int * eller unsigned int * oG, unsigned int * oB) {om (inSaturation == 0) {/ / akromatisk (grå) * eller = * oG = * oB = inBrightness;} annat {unsigned int scaledHue = (inHue * 6), unsigned int sektorn = scaledHue >> 8. / / sektor 0 5 runt färg hjul unsigned int offsetInSector = scaledHue - (sektorn << 8); / / ställning inom sektorn 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.
Switch (sektor) {fall 0: * eller = inBrightness; * oG = t; * oB = p, paus, fall 1: * eller = q; * oG = inBrightness; * oB = p, paus, fall 2: * eller = p; * oG = inBrightness; * oB = t, paus, fall 3: * eller = p; * oG = q; * oB = inBrightness, paus, fall 4: * eller = t; * oG = p; * oB = inBrightness, paus, standard: / / mål 5: * eller = inBrightness; * oG = p; * oB = q; break;}} }
Funktion för att mäta avstånd med hjälp av en HC-SR04 ultrasonic sensor lång MeasureDistance() {lång varaktighet, avstånd, digitalWrite (trigPin, låg), delayMicroseconds(2); digitalWrite (trigPin, hög); delayMicroseconds(10); digitalWrite (trigPin, låg), längd = pulseIn (echoPin, hög), avstånd = (längd/2) / 29,1; om (avstånd > = rangeMax || avstånd < = rangeMin) {Serial.println ("av ange intervall. återvändande Max."); returnera rangeMax; } annat {Serial.print(distance); Serial.println ("cm"); returnera avstånd; } }