Stap 3: programmeren
De manier waarop ik ging over het programmeren van dit apparaat was nogal een reis. Ik wilde dat de led is om te reageren op de ultrasone sensor en wijzigen van de kleur volgens de afstand de ultrasone sensor geretourneerd. Wanneer de afstand tussen object en sensor laag, is zodat het object dicht is, is de kleur rood. Hoe verder gaat weg het object, hoe groener de kleur krijgt. Evrithing tussen is een mengeling van deze kleuren en is volledig schaalbaar tot de afstand groter. Dit resulteert in een kleurenspectrum tussen rood en groen.
Upload de code aan de arduino ertoe leiden dat u hoeft acces op de USB-poort, zodra de arduino wordt ingevoegd in de behuizing.
/*
RGB-cyclus met gebruikmaking van een ultrasone sensor.
Auteur: Bryan Vermaat - 2016
Zie voor een gebruik van deze code.
Deze code is openbaar en kan worden bewerkt/gewijzigd *
/ De drie primaire kleuren LEDs, gedreven zoals analgue uitgangen (eigenlijk PWM, maar / / dicht genoeg voor onze analoge ogen).
Const int ledPinRed = 11; Rode LED aangesloten op analoge uit pin const int ledPinGrn = 10; Groene LED aangesloten op analoge uit pin const int ledPinBlu = 9; Blauwe LED aangesloten op analoge uit pin
Const int trigPin = 13; Const int echoPin = 12; Const int modeSwitchPin = 12;
De Hue-potentiometer gaat op een analoge pin, nemen de pin uit / / 0V naar 5V.
Const int potPinHue = 0;
Constanten voor de bereiken definiëren.
Const int hueRedLow = 0; Const int hueRedHigh = 255; Const int hueBlue = 170;
Het minimale en maximale bereik van de ultrasone sensor.
Const int rangeMin = 0; Const int rangeMax = 200;
Const int brightMin = 0; Const int brightMax = 255;
Werken van variabelen.
De waarde van de potentiometer wordt toegewezen aan het bereik 0 tot 360 (graden). int valueHue;
De kleurtoon is het bereik 0 (rood) naar 170 (blauw) in regenboog / / modus of 255 (rood) in kleur wiel modus. De helderheid varieert van 0 (donker) tot 255 (volledige helderheid)
int tint, helderheid;
De verzadiging is vastgesteld op 255 (volledig) te verwijderen bloeden-door middel van verschillende / / kleuren. Het kan worden gekoppeld aan een potentiometer (potmeter) als een demonstratie van de tint / / gewenst is.
Const int verzadiging = 255;
De brightess van elke LED (0 tot 255).
unsigned int r, g, b;
VOID Setup {/ / moet nu nog een baud-rate, zelfs voor USB instellen. Serial.begin(9600);
Set LED pinnen om uit te voeren. pinMode (ledPinRed, OUTPUT); pinMode (ledPinGrn, OUTPUT); pinMode (ledPinBlu, OUTPUT);
Stel de pinnen voor de ultrasone sensor. pinMode (trigPin, OUTPUT); pinMode (echoPin, INPUT); }
void loop {/ / The tint potentiometer waarde wordt toegewezen aan graden - 0 tot 360 - voor gemak. valueHue = map(MeasureDistance(), 0, 1023, 0, rangeMax);
Kleur wiel modus (rood voor rood, gewikkeld rond in een cyclus).
tint = kaart (valueHue, rangeMin, rangeMax, hueRedLow, hueRedHigh);
De helderheid wordt vastgesteld op volledig voor de kleurenster. Dit zou / / gekoppeld aan een andere poteniometer als dat is een concept dat u wilt / / laten zien. helderheid = 255;
Doen de conversie. HSBToRGB (tint, verzadiging, helderheid, r, g, & b);
analogWrite (ledPinRed, r); analogWrite (ledPinGrn, g); analogWrite (ledPinBlu, b);
Serial.Print ("helder ="); Serial.Print(Brightness); Serial.Print ("tint ="); Serial.Print(Hue); Serial.Print ("rode ="); Serial.Print(r); Serial.Print ("groene ="); Serial.Print(g); Serial.Print ("blauw ="); Serial.Print(b); Serial.println(""); delay(50); }
Deze functie genomen vanaf hier: / / http://eduardofv.com/2011/01/15/arduino-rgb-led-h...
VOID HSBToRGB (unsigned unsigned int inSaturation, unsigned int inBrightness, int inHue, unsigned int * of, unsigned int * oG, unsigned int * oB) {als (inSaturation == 0) {/ / Achromatische (grijs) * of = * oG = * oB = inBrightness;} else {unsigned int scaledHue = (inHue * 6); niet-ondertekende int sector = scaledHue >> 8; / / sector 0 tot en met 5 rond de kleur wiel unsigned int offsetInSector = scaledHue - (sector << 8); / / positie binnen de sector 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;
schakelaar (sector) {0 kast: * of = inBrightness; * oG = t; * oB = p; break; case 1: * of = q; * oG = inBrightness; * oB = p; break; case 2: * of = p; * oG = inBrightness; * oB = t; break; case 3: * of = p; * oG = q; * oB = inBrightness; break; case 4: * of = t; * oG = p; * oB = inBrightness; break; default: / / case 5: * of = inBrightness; * oG = p; * oB = q; break;}} }
Functie voor het meten van de afstand met behulp van een ultrasone sensor van HC-SR04 lange MeasureDistance() {lange duur, afstand digitalWrite (trigPin, laag); delayMicroseconds(2); digitalWrite (trigPin, hoge); delayMicroseconds(10); digitalWrite (trigPin, laag); duur = pulseIn (echoPin, hoge); afstand = (duur/2) / 29.1; als (afstand > = rangeMax || afstand < = rangeMin) {Serial.println ("bereik instellen. terugkerende Max."); retourneren van rangeMax; } else {Serial.print(distance); Serial.println ("cm"); retourneren van afstand; } }