Kapacitiv touch humör/Ambilight (5 / 8 steg)
Steg 5: Mood light - kod & kontroll
Humör ljuset styrs av kapacitiva sensorer. För nu programmerade jag bara sensorer 2 & 3 för att ändra färg. De andra sensorerna har ingen funktion ännu. Här är koden:
---Arduino humör kontrollkod---
#include
CONST booleska Invertera = sant;
CONST lång timeout = 10000;
Givare, kapacitiv förklaring
CapSense In1 = CapSense(2,4); 2 M motstånd mellan stift 4 & 2, stift 2 är givarstaven, lägga till tråd, folie
CapSense In2 = CapSense(2,7); 2 M motstånd mellan stift 4 & 6, stift 6 är givarstaven, lägga till tråd, folie
CapSense In3 = CapSense(2,8); 2 M motstånd mellan stift 4 & 8, stift 8 är givarstaven, lägga till tråd, folie
CapSense In4 = CapSense(2,12); 2 M motstånd mellan stift 4 & 8, stift 8 är givarstaven, lägga till tråd, folie
CapSense In5 = CapSense(2,13); 2 M motstånd mellan stift 4 & 8, stift 8 är givarstaven, lägga till tråd, folie
PWM stift deklarationer
int PinR1 = 3;
int PinG1 = 5;
int PinB1 = 6;
Andra variabler
int Color1 = 128; börja på en röd som färg
int Brightness1 = 255; börja vid full ljusstyrka
int RedValue1, GreenValue1, BlueValue1; RGB-komponenter
void setup()
{/ / ställa in sensorn timeout-värden
In1.set_CS_AutocaL_Millis(timeout);
IN2.set_CS_AutocaL_Millis(timeout);
In3.set_CS_AutocaL_Millis(timeout);
In4.set_CS_AutocaL_Millis(timeout);
In5.set_CS_AutocaL_Millis(timeout);
}
void loop()
{
långa start = millis();
långa total1 = In1.capSense(30);
lång total2 = In2.capSense(30);
lång total3 = In3.capSense(30);
lång total4 = In4.capSense(30);
lång total5 = In5.capSense(30);
om (total2 > 150) {
Color1 ++; Increment färg
IF(Color1 > 255) {/ /
Color1 = 0;
}
} else om (total3 > 200) {
Color1--; dekrement färg
IF(Color1 < 0) {/ /
Color1 = 255;
}
konvertera nyans till rgb
hueToRGB (Color1, Brightness1);
Skriv färger till PWM stift
analogWrite (PinR1, RedValue1);
analogWrite (PinG1, GreenValue1);
analogWrite (PinB1, BlueValue1);
}
funktion för att konvertera en färg till dess röda, gröna och blå delar.
void hueToRGB (int nyans, int ljusstyrka)
{
unsigned int scaledHue = (nyans * 6);
unsigned int segmentet = scaledHue / 256; segmentet 0 5 runt färghjulet
unsigned int segmentOffset = scaledHue - (segment * 256); position inom segmentet
unsigned int komplimang = 0;
unsigned int prev = (ljusstyrka * (255 - segmentOffset)) / 256;
unsigned int nästa = (ljusstyrka * segmentOffset) / 256;
IF(Invert)
{
ljusstyrka = 255-ljusstyrka;
komplimang = 255;
Prev = 255-föregående;
Nästa = 255-nästa;
}
Växla (segment) {
fall 0: / / röd
RedValue1 = ljusstyrka;
GreenValue1 = nästa;
BlueValue1 = komplimang;
bryta;
fall 1: / / gul
RedValue1 = föregående;
GreenValue1 = ljusstyrka;
BlueValue1 = komplimang;
bryta;
fall 2: / / grön
RedValue1 = komplimang;
GreenValue1 = ljusstyrka;
BlueValue1 = nästa;
bryta;
fall 3: / / cyan
RedValue1 = komplimang;
GreenValue1 = föregående;
BlueValue1 = ljusstyrka;
bryta;
fall 4: / / blå
RedValue1 = nästa;
GreenValue1 = komplimang;
BlueValue1 = ljusstyrka;
bryta;
fall 5: / / magenta
standard:
RedValue1 = ljusstyrka;
GreenValue1 = komplimang;
BlueValue1 = föregående;
bryta;
}
}
---SLUT---