RGBW Работает у меня на кухне года 2-3 уже забыл сколько
Собрано на драйвере двигателей
/**
* The MySensors Arduino library handles the wireless radio link and protocol
* between your home built sensors/actuators and HA controller of choice.
* The sensors forms a self healing radio network with optional repeaters. Each
* repeater and gateway builds a routing tables in EEPROM which keeps track of the
* network topology allowing messages to be routed to nodes.
*
* Created by Henrik Ekblad <Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
>
* Copyright (C) 2013-2015 Sensnology AB
* Full contributor list:
github.com/mysensors/Arduino/graphs/contributors
*
* Documentation:
www.mysensors.org
* Support Forum:
forum.mysensors.org
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* version 2 as published by the Free Software Foundation.
*
*******************************
*
* REVISION HISTORY
*
* Version 2.0 - Modes added
*
* Example sketch showing how to control RGBW LED Strip.
* IMPORTANTE NOTE!!! one of the "radio" pins has been moved from pin 9 to pin 4 because the White is connected to pin 9 because only 3,5,6 and 9 are PWM outputs on Arduino Pro Mini!!!!
* This code should generate 4 Dimmer devices in Vera so you can control the RED, GREEN, BLUE and WHITE individualy
**/
/*
arduino Pro mini 5V 16MHz
*/
#define MY_DEBUG // Enables debug messages in the serial log
#define MY_RADIO_NRF24
#define MY_NODE_ID 3
#define SN "RGBW"
#define SV "2.0"
#define MY_RF24_CE_PIN 4 //<-- NOTE!!! changed, the default is 9
#define MY_RF24_CS_PIN 10 // default is 10
#define MY_REPEATER_FEATURE
#include <MyConfig.h>
#include <MySensors.h>
#include <SPI.h>
#include <LEDFader.h> //library for fading effect
github.com/jgillick/arduino-LEDFader
#define REDPIN 3 // pin for red LED
#define GREENPIN 5 // pin for green LED
#define BLUEPIN 6 // pin for blue LED
#define WHITEPIN 9 // pin for white LED
//#define RF24_PA_LEVEL RF24_PA_MAX
#define LED_NUM 3 //number of LEDs to fade
#define DIR_UP 1 //
#define DIR_DOWN -1
#define FADE_TIME 2000
int mode;
int direction = DIR_UP; //for fading effect
unsigned long previousMillis = 0;
unsigned long currentMillis;
const long interval = 1000;
int REDLedState = 0;
int BLUELedState = 0;
// 4 LED Faders
LEDFader leds[LED_NUM] =
{
LEDFader(REDPIN),
LEDFader(GREENPIN),
LEDFader(BLUEPIN)
};
LEDFader REDled;
MyMessage msgVAR1(REDPIN, V_VAR1);
void setup()
{
pinMode(REDPIN, OUTPUT);
pinMode(GREENPIN, OUTPUT);
pinMode(BLUEPIN, OUTPUT);
pinMode(WHITEPIN, OUTPUT);
mode = 0;
REDled = LEDFader(REDPIN);
Serial.print(" Mode is: ");
Serial.print(mode);
//Get Dim values from RAM and write to outputs
analogWrite(REDPIN, 255 - 255 * loadState(REDPIN) / 100);
analogWrite(GREENPIN, 255 - 255 * loadState(GREENPIN) / 100);
analogWrite(BLUEPIN, 255 - 255 * loadState(BLUEPIN) / 100);
analogWrite(WHITEPIN, 255 - 255 * loadState(WHITEPIN) / 100);
// Request/wait for dimmer status
/*
gw.request(RED, V_DIMMER);
gw.process();
gw.request(GREEN, V_DIMMER);
gw.process();
gw.request(BLUE, V_DIMMER);
gw.process();
gw.request(WHITE, V_DIMMER);
gw.process();
*/
}
void presentation()
{
// Send the Sketch Version Information to the Gateway
sendSketchInfo(SN, SV);
// Register all sensors to gw (they will be created as child devices)
present(REDPIN, S_DIMMER);
present(GREENPIN, S_DIMMER);
present(BLUEPIN, S_DIMMER);
present(WHITEPIN, S_DIMMER);
}
void loop()
{
currentMillis = millis();
if (mode == 1)
{
modeone();
}
if (mode == 2)
{
modetwo();
}
if (mode == 3)
{
modethree();
}
}
void receive(const MyMessage &message)
{
Serial.print(message.type);
if (message.type == V_DIMMER)
{
uint8_t incomingDimmerStatus = message.getByte();
// Change Dimmer level
analogWrite(message.sensor, 255 - 255 * incomingDimmerStatus / 100);
saveState(message.sensor, message.getByte()); //Save Dim value to RAM
// Write some debug info
Serial.print("Incoming change for dimmer on pin: ");
Serial.println(message.sensor);
Serial.print(" New status: ");
Serial.println(incomingDimmerStatus);
}
if (message.type == V_VAR1)
{
uint8_t IncomeingModeStatus = message.getByte();
mode = IncomeingModeStatus;
Serial.print(" New Mode recieved: ");
Serial.println(mode);
if (mode == 0)
{
//Get saved dim values from RAM and write to output
analogWrite(REDPIN, 255 - 255 * loadState(REDPIN) / 100);
analogWrite(GREENPIN, 255 - 255 * loadState(GREENPIN) / 100);
analogWrite(BLUEPIN, 255 - 255 * loadState(BLUEPIN) / 100);
analogWrite(WHITEPIN, 255 - 255 * loadState(WHITEPIN) / 100);
}
}
}
void modeone()
{
//Alarm mode RED BLUE blinking
Serial.println("Runing Mode 1 sequence");
if (currentMillis - previousMillis >= interval)
{
// save the last time you changed to LEDstrip state
previousMillis = currentMillis;
analogWrite(GREENPIN, 0);
analogWrite(WHITEPIN, 0);
// if the LEDstrip is RED turn it BLUE and vice-versa:
if (REDLedState == 0)
{
REDLedState = 255;
BLUELedState = 0;
}
else
{
REDLedState = 0;
BLUELedState = 255;
}
// set the LEDstrip with the ledState of the variable:
analogWrite(REDPIN, REDLedState);
analogWrite(BLUEPIN, BLUELedState);
}
}
void modetwo()
{
//Random fading of all except white
Serial.println("Runing Mode 2 sequence");
// Update all LEDs and start new fades if any are done
for (byte i = 0; i < LED_NUM; i++)
{
LEDFader *led = &leds
;
led->update();
analogWrite(WHITEPIN, 0);
// This LED is not fading, start a new fade
if (led->is_fading() == false)
{
int duration = random(1000, 3000); // between 1 - 3 seconds
// Fade Up
if (led->get_value() == 0)
{
byte intensity = random(50, 255);
led->fade(intensity, duration);
}
// Fade Down
else
{
led->fade(0, duration);
}
}
}
}
void modethree()
{
//Fade up fade down of RED
Serial.println("Runing Mode 3 sequence");
REDled.update();
// LED no longer fading, switch direction
if (!REDled.is_fading())
{
//turn off all other LEDs
analogWrite(BLUEPIN, 0);
analogWrite(GREENPIN, 0);
analogWrite(WHITEPIN, 0);
// Fade down
if (direction == DIR_UP)
{
REDled.fade(0, FADE_TIME);
direction = DIR_DOWN;
}
// Fade up
else
{
REDled.fade(255, FADE_TIME);
direction = DIR_UP;
}
}
}