Код для лампы с RGB диодом
- Войдите на сайт для отправки комментариев
Сб, 18/01/2014 - 17:36
Всем привет.
Идея - как бы арт-лампа, работающая только если её держать в руках. Меняет цвета под разными наклонами. Есть, собсно, сенсор, что прикосновения чувствует capacitive sensor library), три меркуриевых сенсора наклона ("кнопки!"), RGB диод. Оно работает, да, диод светит белым, и базовыми цветами. Но иной цвет не задается, если работают две "кнопки". Светит белым и все. Диод "кривой", с одной катодной лапой, цветовые - аноды. Так что на включение "low"
Простой код.
#include <CapacitiveSensor.h>
CapacitiveSensor cs_4_2 = CapacitiveSensor(4,2);
const int buttonPin1 = 8; //tilt1
const int buttonPin2 = 12; // tilt22
const int buttonPin3 = 13; // tilt3
const int red = 9;
const int green = 10;
const int blue = 11;
int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
void setup() {
cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF);
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(blue, OUTPUT);
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(buttonPin3, INPUT);
}
void loop(){
long start = millis();
long total1 = cs_4_2.capacitiveSensor(30);
Serial.print(millis() - start);
// read the state of the pushbutton value:
buttonState1 = digitalRead(buttonPin1);
buttonState2 = digitalRead(buttonPin2);
buttonState3 = digitalRead(buttonPin3);
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (buttonState1 == HIGH && total1>200) {
digitalWrite(red, LOW);
digitalWrite(green, HIGH);
digitalWrite(blue, HIGH);
}
else if (buttonState2 == HIGH && total1>200) {
digitalWrite(red, HIGH);
digitalWrite(green, LOW);
digitalWrite(blue, HIGH);
}
else if (buttonState3 == HIGH && total1>200) {
digitalWrite(red, HIGH);
digitalWrite(green, HIGH);
digitalWrite(blue, LOW);
}
else if (buttonState1 == HIGH && buttonState2 == HIGH && total1>200) {
digitalWrite(red, LOW);
digitalWrite(green, LOW);
digitalWrite(blue, HIGH);
}
else if (buttonState2 == HIGH && buttonState3 == HIGH && total1>200) {
digitalWrite(red, HIGH);
digitalWrite(green, LOW);
digitalWrite(blue, LOW);
}
else if (buttonState1 == HIGH && buttonState3 == HIGH && total1>200) {
digitalWrite(red, LOW);
digitalWrite(green, HIGH);
digitalWrite(blue, LOW);
}
else if ( total1>200) {
digitalWrite(red, LOW);
digitalWrite(green, LOW);
digitalWrite(blue, LOW);
}
else {
digitalWrite(red, HIGH);
digitalWrite(green, HIGH);
digitalWrite(blue, HIGH);
}
}
Я все ещё нуб в этом, сижу пробую как и что работает : )
Так что на включение "low"
#include <CapacitiveSensor.h> CapacitiveSensor cs_4_2 = CapacitiveSensor(4,2); #define buttonPin1 8 //tilt1 #define buttonPin2 12 // tilt22 #define buttonPin3 13 // tilt3 #define red 9 #define green 10 #define blue 11 void setup() { cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF); pinMode(red, OUTPUT); pinMode(green, OUTPUT); pinMode(blue, OUTPUT); } void loop() { unsigned long start = millis(); unsigned long total1 = cs_4_2.capacitiveSensor(30); Serial.print(millis() - start); if (total1 > 200) { digitalWrite(red, !digitalRead(buttonPin1)); digitalWrite(green, !digitalRead(buttonPin2)); digitalWrite(blue, !digitalRead(buttonPin3)); } else { digitalWrite(red, 1); digitalWrite(green, 1); digitalWrite(blue, 1); } }или даже так:
#include <CapacitiveSensor.h> CapacitiveSensor cs_4_2 = CapacitiveSensor(4,2); #define buttonPin1 8 //tilt1 #define buttonPin2 12 // tilt22 #define buttonPin3 13 // tilt3 #define red 9 #define green 10 #define blue 11 byte btns[3] = {buttonPin1, buttonPin2, buttonPin3}; byte leds[3] = {red, green, blue}; void setup() { cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF); for(byte i = 0; i < 3; i++) pinMode(leds[i], OUTPUT); } void loop() { unsigned long start = millis(); unsigned long total1 = cs_4_2.capacitiveSensor(30); Serial.print(millis() - start); if (total1 > 200) for(byte i = 0; i < 3; i++) digitalWrite(leds[i], !digitalRead(btns[i])); else for(byte i = 0; i < 3; i++) digitalWrite(leds[i], 1); }О, прелестно, спасибо огромное, работает :D Второй код. Надо понять как это работает!
А как ещё сделать, чтобы просто при прикосновении к сенсору зажигался случайный цвет? или просто белый? :3 с простым кодом работало.
...принцип, как понимаю, в if-else как-то прописать, что " если сенсор > 200 && тилты=0" то диод работает на белый. Только как выключатели прописать в таком виде кода? :D