Fjärrstyrda Arduino stämningsbelysning (3 / 6 steg)

Steg 3: Koden




I skrivande stund här, jag antar att byggaren vet hur att lägga till ett bibliotek i sin Arduino utvecklingsmiljö. Måste du lägga till två bibliotek. Här är en Instructable som hjälper dig komma igång med en IR-mottagare.

Koden gör användningen av två krävs bibliotek, och en tredje valfritt bibliotek som jag alltid använder när felsökning. Streaming biblioteket tillåter snabb en rad uttalanden som kan skickas till konsolen terminal.

Utmärkt IRLib biblioteket är en förbättring över flera andra IR bibliotek eftersom det kapslar in funktionalitet på ett sätt som endast kräver ett par rader att få IR funktionalitet. Den har också stöd för IR överföring, som jag inte använder i detta projekt. Det är mycket väl dokumenterat, och ett exempel på bra, snäva kod. Här är definitivt en att hålla i din väska tricks.

Det finns ett företag som gör ljuset remsor med samma chip används av Radio Shack (RIP) remsan. Deras bibliotek, PololuLedStrip, ger en lätt-till-använda gräns flat till någon remsa som använder TM1804 chip. Pololu biblioteket stöder också andra marker används av de flesta nuvarande LED strips.

Koden är kommenterade, men det finns vissa saker att påpeka:

  • Array presetColor är en lista med färger som ska läsas när du trycker på en knapp på fjärrkontrollen. Jag programmerade detta till "Play"-knappen på min, men kan du tilldela det till vad du vill. Dessa betecknas som RGB-värden, {255, 255, 255} att vara ljusaste vita och {0, 64, 0} är en dimmer green, till exempel. Du kan skapa så många förinställningar som du vill. Observera att varje andra förinställda {0,0,0}, som i huvudsak gör av belysningen. Det är trevligt att snabbt stänga saker för sömnig-tid.
  • I funktionen loop() ser du IR dekodern kallas. Det finns flera olika typer av infraröda fjärrkontroller ute och IRLib biblioteket kan hitta många av dem. Måste du spela med denna kod för att se exakt vad din fjärrkontroll skicka så att du kan isolera koderna och tilldela dem till funktionalitet i ditt program. Det finns utmärkta dokumentation i en PDF-fil i biblioteket för att hjälpa dig.
  • Denna särskilda fjärrkontroll levererar ett unikt värde för varje knapp tryckte, men när knappen hålls, skickar värdet 0xFFFFFFFF. Allt vi behöver göra är att komma ihåg föregående kod skickas och när han såg alla F, bearbeta bara det sista värdet.
  • Det finns en liten funktion, playTone, som skickar pulser ut till högtalaren. Arduino utvecklingsmiljön har en testton-funktionen, men den använder avbrott. Tyvärr används de samma avbrott av IRLib biblioteket, så vi inte kan använda tonen och IRLib i samma skiss utan betydande ändringar av biblioteken. Denna enkla funktion gör allt vi behöver för denna enkla applikation utan avbrott. Vet att ju högre siffra, desto lägre tonen.
  • Jag har två fjärrkontroller som ser identiska, men de ger olika koder för varje knapp. Det är inget problem när vi använder magi C switch/fall struktur. Du kommer att märka två fall för varje block. Detta anger koderna skickas med varje remote. Jag kunde tänkas har ett dussin fjärrkontroller, var att ge en annan kod och fånga dem alla med denna metod.
  • Den upp och ner för justera ljusstyrka och höger och vänster knapparna gå igenom färghjulet.
  • På "Menu"-knappen startar hjulet färgläget. Tanken är att du Använd upp/ned/höger/vänster för att få startfärgen och tryck på knappen meny. Färgerna kommer att börja ändra, kör hela vägen runt färghjulet tills en annan tangent trycks. Detta ger en avkopplande stämningsbelysning om du gillar sådana saker.
  • "Play"-knappen ger snabb tillgång till förinställda färgerna som nämndes tidigare.
  • Programmet sveper upp med konverteringsfunktioner för att konvertera mellan RGB och HSV.

Stiften som jag använde var mest för bekvämlighet eller vana. Du kan ändra stiften som de olika delarna är ansluten så länge du gör lämpliga ändringar i koden.

HeadboardLight.h

TypeDef struct hsv_color
{
int h;
dubbel-s, v.
} hsv_color;

HeadboardLight.ino

HeadboardLight.ino

IRLib.h från IRLib – en Arduino bibliotek för IR kodning och avkodning < br > / / Version 1.5 juni 2014
Copyright 2014 av Chris Young < en href = "http://cyborg5.com" rel = "nofollow" > http://cyborg5.com</a>
#include < IRLib.h >

Streaming.h - Arduino bibliotek för att stödja den << streaming operatör
Copyright (c) 2010-2012 Mikal Hart. Alla rättigheter reserverade.
#include < Streaming.h > / / behändigt bibliotek för att underlätta felsökning uttalanden

Pololu LED strip bibliotek. Tillgänglig från < en href = "https://github.com/pololu/pololu-led-strip-arduino" rel = "nofollow" > http://cyborg5.com</a>
#include < PololuLedStrip.h > / / bibliotek för ljus remsa
#include "HeadboardLight.h" / / include-filen för detta projekt

#define DEBUG / / globala debug förklaring. avkommentera för att omfatta debug-kod

Skapa en mottagare objekt för att lyssna på stift 11
IRrecv My_Receiver(9);
IRdecode My_Decoder;
osignerade långa värde;
osignerade långa last_value;
int j;

Skapa en ledStrip objekt på stift 12.
PololuLedStrip < 12 > ledStrip;
int onboard_led = 13. bara för feedback så att får vi något

Skapa en buffert för att hålla 10 färger. Tar 30 byte.
#define LED_COUNT 10
rgb_color färger [LED_COUNT];
rgb_color färg;
Det finns två färg standard används här. RGB-enheter ljusa remsan,
men HSV är mer praktiskt för att göra färg hjul progressioner. Det
finns funktioner för att konvertera mellan två.
int hsv_h = 0;
Double hsv_s = 1;
Double hsv_v = 0,1;
bool colorWheel = false;

hsv_color hsv_current;

snabb förinställningar. Alla andra är för ett enkelt sätt att stänga av allt
rgb_color presetColor [] =
{
{0, 0, 0},
{255, 255, 255},
{0, 0, 0},
{16, 16, 16},
{0, 0, 0},
{64, 0, 0},
{0, 0, 0},
{0, 64, 0},
{0, 0, 0},
{0, 0, 64},
{0, 0, 0},
{64, 64, 0},
{0, 0, 0},
{64, 0, 64},
{0, 0, 0},
{0, 64, 64}
};
char presetColorSize = sizeof (presetColor) / 3;
char presetTracker = 0;
int buzzPin = 7.

void setup()
{
#ifdef DEBUG
Serial.BEGIN(9600);
#endif
My_Receiver.enableIRIn(); Starta IR-mottagaren
färg = hsvToRgb (hsv_h, hsv_s, hsv_v);
writeLeds(color);
Kontrollera att stiften pekar åt rätt håll
pinMode (onboard_led, produktionen);
pinMode (buzzPin, produktionen);
}

void loop()
{
Kontinuerligt leta efter resultat. När du har dem passera dem till dekoder
om (My_Receiver.GetResults (& My_Decoder))
{
My_Decoder.decode(); Avkoda data
#ifdef DEBUG
Seriella << "0 x" << _HEX(value) << oä;
#endif

om (My_Decoder.decode_type== NEC)
{
värde = My_Decoder.value;
#ifdef DEBUG
Seriella << "\t\tcase 0 x" << _HEX(value) << oä;
#endif
om (värde == 0xFFFFFFFF) / / hålla ned för upprepning
{
värde = last_value;
}
#ifdef DEBUG
Följetong << _HEX(value) << oä;
#endif
Switch(Value)
{
fall 0x77E1D074:
fall 0x77E15054:
#ifdef DEBUG
Seriella << "upp" << oä;
#endif
hsv_v += 0,05;
om (hsv_v > 0,95)
{
hsv_v = 0,95;
playTone(244);
}
annat
{
playTone(122);
}
färg = hsvToRgb (hsv_h, hsv_s, hsv_v);
bryta;
fall 0x77E1E074:
fall 0x77E16054:
#ifdef DEBUG
Seriella << "rätt" << oä;
#endif
hsv_h += 10.
om (hsv_h > 359)
{
hsv_h = 0;
playTone(244);
}
annat
{
playTone(200);
}
färg = hsvToRgb (hsv_h, hsv_s, hsv_v);
bryta;
fall 0x77E1B074:
fall 0x77E13054:
#ifdef DEBUG
Seriella << "down" << oä;
#endif
hsv_v-= 0,05;
om (hsv_v < 0,05)
{
hsv_v = 0,0;
playTone(244);
}
annat
{
playTone(122);
}

färg = hsvToRgb (hsv_h, hsv_s, hsv_v);
bryta;
fall 0x77E11074:
fall 0x77E19054:
#ifdef DEBUG
Seriella << "vänster" << oä;
#endif
hsv_h-= 10.
om (hsv_h < 1)
{
hsv_h = 359;
playTone(244);
}
annat
{
playTone(200);
}

färg = hsvToRgb (hsv_h, hsv_s, hsv_v);
bryta;
fall 0x77E12074:
fall 0x77E1A054:
#ifdef DEBUG
Seriella << "spela" << oä;
#endif
färg = presetColor [presetTracker];
++ presetTracker;
om (presetTracker > presetColorSize) presetTracker = 0;
för (j = 0; j < 2; j ++)
{
playTone(122);
Delay(20);
playTone(244);
Delay(20);
}
Ange nuvarande hsv värden till förinställningen
hsv_current = rgbToHsv (color.red, color.green, color.blue);
hsv_h = hsv_current.h;
hsv_s = hsv_current.s;
hsv_v = hsv_current.v;
#ifdef DEBUG
Seriella << "hsv(a):" << hsv_h << "," << hsv_s << "," << hsv_v << oä << "---" << oä;
#endif
bryta;
fall 0x77E14074:
fall 0x77E1C054:
#ifdef DEBUG
Seriella << "meny" << oä;
#endif
om (colorWheel)
{
colorWheel = false;
för (j = 1; j < = 5; j ++)
{
playTone(j * 20);
}
}
annat
{
colorWheel = sant;
för (j = 5; j > 0; j--)
{
playTone(j * 20);
}
}
bryta;
}
last_value = värde;
}
writeLeds(color);
My_Receiver.Resume(); Starta om mottagaren
}

Delay(30);

bryta sig in i hjulet färgläge med nuvarande s och v
om (colorWheel)
{
om (++ hsv_h > 359) hsv_h = 0;
färg = hsvToRgb (hsv_h, hsv_s, hsv_v);
writeLeds(color);
Delay(20);
}
}

void playTone(int value)
{
digitalWrite (onboard_led, hög); Aktivera LED (HIGH är spänningsnivån)
för (länge jag = 0; jag < 64 * 3; i ++)
{
1 / 2048 Hz = 488uS, eller 244uS hög och 244uS låg för att skapa 50% intermittens
digitalWrite (buzzPin, hög);
delayMicroseconds(value);
digitalWrite (buzzPin, låg);
delayMicroseconds(value);
}
digitalWrite (onboard_led, låg); Inaktivera LED genom att spänningen låg
}

void writeLeds(rgb_color c)
{
för (int jag = 0; jag < LED_COUNT; i ++)
{
.red färger [i] = c.red;
färger [i] .green = c.green;
.blue färger [i] = c.blue;
}
ledStrip.write (färger, LED_COUNT);
}

Konvertera HSV till motsvarande RGB
rgb_color hsvToRgb (int h, dubbel s, dubbla v)
{
rgb_color rgb;

Se till att våra argument bo i-range
h = max (0, min (360, h));
s = max (0, min (1.0, s));
v = max (0, min (1.0, v));
IF(s == 0)
{
Akromatisk (grå)
RGB.Red = rgb.green = rgb.blue = round(v * 255);
returnera rgb;
}
dubbel hs = h / 60,0; sektor 0 5
int jag = floor(hs);
dubbel f = hs - i. faktoriell del av h
Dubbelrum p = v * (1 - s);
dubbel q = v * (1 - s * f);
dubbel t = v * (1 - s * (1 - f));
r, g, b;
Switch(i)
{
fall 0:
r = v;
g = t;
b = p;
bryta;
fall 1:
r = q;
g = v;
b = p;
bryta;
fall 2:
r = p;
g = v;
b = t;
bryta;
fall 3:
r = p;
g = q;
b = v;
bryta;
fall 4:
r = t;
g = p;
b = v;
bryta;
standard: / / mål 5:
r = v;
g = p;
b = q;
}
RGB.Red = round(r * 255.0);
RGB.Green = round(g * 255.0);
RGB.Blue = round(b * 255.0);
returnera rgb;
}

konvertera RGB till motsvarande HSVEN
hsv_color rgbToHsv (unsigned char r, unsigned char g, unsigned char b)
{
dubbel rd = (dubbel) r/255;
dubbel gd = (dubbel) g/255;
dubbel bd = (dubbel) b/255;
dubbla d_h;

dubbla max = max (rd, max (gd, bd)), min = min (rd, min (gd, bd));
hsv_color hsv;
HSV.v = max;

dubbla d = max - min;
HSV.s = max == 0? 0: d / max;

om (max == min) {
d_h = 0;
} annat {
om (max == rd) {
d_h = (gd - bd) / d + (gd < bd? 6: 0);
} else om (max == gd) {
d_h = (bd - rd) / d + 2;
} else om (max == bd) {
d_h = (rd - gd) / d + 4;
}
d_h = 6.
}
HSV.h = d_h * 360;
returnera hsv;
}

Se Steg
Relaterade Ämnen

DIY fjärrstyrda arduino motor sköld!

i detta instructable du får lära dig hur man bygger en arduino dual-motor sköld och hur man avkoda en IR-sändare och använda den för att styra dessa motorer.Steg 1: Delar och församlingen! Parts:-Arduino Uno-L298 Motorn förarens (x1)-Veroboard (x1)-M...

Arduino stämningsbelysning

detta instructable visar dig vem som ska bygga en rgb belysningssystem med en arduino. Du kan också styra den med en ipod/iphone/ipad använder touchOSC. I min tidigare instructable jag visade hur man styr en rgb ledde i detta kan du styra högar med e...

Med 433 MHz fjärrstyrda strömbrytare på Arduino

Jag antar att alla vet de avlägsen kontrollerade växlar som i sin enklaste form komma i ett par (mestadels 3) switcheable enheter att ansluta till elnätet utlopp och som kommer att få en propp av en lampa eller något och som kan slås på och av genom...

Fjärrstyrd Multifunktion resultattavlan bygger på Arduino, ESP8266 och uPanel firmware: gränssnitt utveckling

Den lösning som används här fjärrstyra Arduino med hjälp av antingen smartphoneeller Tablet PC i stället för tryckknappar, skärmar, etc. är tillämplig på många projekt där mikrokontroller måste fjärrstyras, så programmet till Multifunktion resultatta...

Arduino Real tid väckarklocka med temperatur och LED belysning. Fjärrstyrda

Arduino klocka, med batteribackup (realtidsklocka), tid, datum, Alarm, temperatur, LCD utgång, IR-fjärr ingång, viloläge, LED-belysning (10 X) röd och blå multi-mode.Steg 1: Steg 1: delar listaArduino klocka, med batteribackup (realtidsklocka), tid,...

Fjärrstyrda webkamera med Arduino, SensorMonkey, jQuery och Justin.tv

webb-aktivera din interaktiva sensorer över skrivbordet, smartphone och tablet enheter.Denna handledning beskriver i detalj hur du använder tjänsten gratis SensorMonkey till styra en pan och tilt webbkamera ansluten till en Arduino använder inget ann...

Arduino fjärrstyrd av Bluetooth- eller Bluetooth LE med telefonen

Någonsin velat fjärrstyra din Arduino? Antingen att läsa sensor värden, eller göra det göra något? Kanske även göra en fjärrkontrollerad robot?Ja nu kan du. Detta instructable kommer att täcka de mest grundläggande exemplet; växla en LED och på dista...

Fjärrstyrda roboten genom att använda Arduino

L293D är en dubbel H-bridge motorn förarens integrerade kretsar (IC). Motor förare agera som nuvarande förstärkare eftersom de tar en låg-nuvarande kontroll signal och ge en högre ström signal. Denna högre nuvarande signal används för att driva motor...

Arduino rum automation! [BLUETOOTH/LJUD/FJÄRRSTYRDA]

Förvandla alla rum digital! med hjälp av "BlackBoxen" styra elektroniska enheter från en långt med en fjärrkontroll, en telefon eller ens en klapp. Det finns tusentals möjligheter att göra denna sak funktion på din egen vilja. Med hjälp av vissa...

Dub Cadet: Holografiska MIDI & LED-Controller för Arduino - del 1

Jag tror holografisk musikinstrument blir vardagsmat i framtiden, visar överallt från skolor (Skolverket), hem (på skoj), till media kontor (för kreativitet), och i musik studios (för produktion). Anledningen är enkel: den holografiska musikinstrumen...

Arduino-drivna A-10 stick grepp remote w/Emergency Party knappen!

jag kom över Plama2002's "Emergency Party Button" bygga ett tag tillbaka och ville ha något liknande för min bar. Jag hade också en gammal USAF B-8 stick grepp från en A-10A som jag plockade upp i mitt tidigare liv. Jag tänkte att istället för a...

IoT vägguttag med Arduino och ESP8266

I detta instructable, jag visa dig hur du lägger till förbättrad tillgänglighet, intelligens och anslutning till ett vanligt vägguttag. Detta görs med en kombination av mikrokontroller, Arduino, olika sensorer, ESP8266 och en blandning av programvaru...

Kontrollera allt och spara energi med Arduino

Jag använde detta för min egen mycket specifikt problem men det skulle kunna användas för någonting egentligen.Problemet:De flesta högtalare är inte smart, och så du måste stänga dem off manuellt, särskilt studio typ monitorhögtalare. På grund av det...

Smartphone Arduino RBL BLE sköld RGB Led Light Controller

Detta är ett projekt som jag har funderat på ett tag. Jag ville ha några rgb led lampor på min båt fjärrstyrd av min Iphone.Detta är en mellanliggande projekt eftersom vi kommer att behöva löda, vilket kan vara svårt utan en fick järn. Detta projekt...

Smarta hem med arduino och jubito

jubito är en programvara som jag utvecklar jaNETramverk. En smart home server som skapas gränssnitt mellan olika hårdvara (som arduino) och programvarukomponenter, att förmågan att interagera varandra och låt mig tillgång automatiseringar och mer öve...

Telefon kontrollerade stämningsbelysning

Sovsalar är ökända för sina fruktansvärda belysning, så jag ville göra en cool alternativ ljuskälla för mitt rum på skolan. Jag gjorde det telefon kontrolleras så det skulle vara en lätt och trådlös sätt att ändra färgen på belysningen.Belysningen be...

Avkodning och skicka 433MHz RF koder med Arduino och rc-switch

I denna tutorial ska jag visa dig hur du använder en Arduino att avkoda signaler från RF-fjärrkontroller, och skicka dem till fjärrstyra vissa elnätet växlar och en garageport.Obs: Denna guide är skriven för Australien, där det är lagligt att driva l...

TV volym Loudness Guard använder Arduino

uppdateringar05 Mar 2013 med på WonderHowTo http://goo.gl/fpeVC14 feb 2013 med på LifeHacker http://goo.gl/tx4QG13 feb 2013 har jag uppdaterat programmet Arduino i steg 4 att stödja ytterligare fjärrkontroller.13 feb 2013 med på farliga prototyper ht...

Arduino IR fjärrkontroll dekryptering

nästa på min lista över projekt är en TV-B-Gone som gadget. Eftersom många lokala IR fjärrstyrda apparater i Jordanien har okänt ursprung, en enkel IR fjärrkontroll dekryptering gadget, som den i Ladyadas fantastisk tutorial, vore det fint för att hj...