Kapacitiv touch humör/Ambilight (6 / 8 steg)
Steg 6: Ambi light - Arduino sida
Det vore ju helt cool för att kunna kontrollera stämningen ljuset från din dator. Till exempel för att skapa en ambilight eller ett ljud kontrollerade disco. Detta avsnitt fokuserar på ambilight delen, i framtiden jag kommer att lägga till mer funktionalitet.Tja, finns det ingen ytterligare kretsar eftersom det är alla tillgängliga i Arduino. Vad vi kommer att använda är den seriella kommunikationen kapaciteten och några "Bearbetning 1.0" programvara. Koppla upp din arduino till datorn med en USB-kabel (om du belastande upp skisser till det, redan är det).
För arduino, väl behöva lägga till lite extra kod för seriell kommunikation. Koden kommer att byta till lyssningsläge, svarvning av kapacitiva sensorer som den tar emot RGB-värden från datorn. Det uppsättningar sedan RGB-värden till PWM stift. Det är min sista kod för nu, kolla förändringarna själv:
---Arduino Ambilight kod---
#include
CONST booleska Invertera = sant;
CONST lång timeout = 10000;
lång commStart = 0;
char val;
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()
{
Serial.BEGIN(9600); Starta seriella kommunikationen
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 (Serial.available()) {/ / om data är tillgängliga att läsa,
Val = Serial.read(); läsa den och förvara den i val
commStart = millis();
om (val == s ') {//If start char tas emot,
tag (!. Serial.available()) {} //Wait tills nästa värde.
RedValue1 = Serial.read(); När de blir tillgängliga, tilldela.
tag (!. Serial.available()) {} //Same som ovan.
GreenValue1 = Serial.read();
tag (!. Serial.available()) {}
BlueValue1 = Serial.read();
}
Serial.Print(RedValue1);
Serial.Print(GreenValue1);
Serial.println(BlueValue1);
} else om ((millis()-commStart) > 1000) {
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;
}
}
hueToRGB (Color1, Brightness1);
}
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---