Na wstępie chciałbym Wszystkich powitać. Od niedawna dołączyłem do Supli, to jest mój pierwszy post, więc proszę o wyrozumiałość. Jestem na etapie budowy domu i chciałbym go zautomatyzować przy pomocy Supli. Chciałbym bazować na ARDUINO z uwagi na to iż wszystkie niezbędne obwody elektryczne mam poprowadzone bezpośrednio do rozdzielni (również łączniki).
To tyle tytułem wstępu. Jak dotąd wszystko ładnie zaczyna działać. Chciałbym "wycisnąć" wszystko co się da z każdego zamontowanego arduino w domu i tu napotkałem taki problem.
Próbuję odpalić dwa sterowniki RGB na jednym arduino, jednak jak na razie bezskutecznie . Czy któryś z szanownych Kolegów może próbował już coś takiego wykonać?
Oprócz tego jeszcze obsługuję tym samym arduino 9 rolet i 3 lampy.
Poniżej próby moich modyfikacji kodu (przyznam, że trochę na "czuja" to robiłem ):
Kod: Zaznacz cały
#include <SPI.h>
#include <Ethernet.h>
#include <SuplaDevice.h>
#define RED_PIN 2
#define GREEN_PIN 4
#define BLUE_PIN 5
#define BRIGHTNESS_PIN 6
#define COLOR_BRIGHTNESS_PIN 7
#define RED_PIN_2 44
#define GREEN_PIN_2 45
#define BLUE_PIN_2 46
#define BRIGHTNESS_PIN_2 8
#define COLOR_BRIGHTNESS_PIN_2 9
#define BTN_COUNT 3
typedef struct {
int pin;
int relay_pin;
int channel;
char last_val;
unsigned long last_time;
} _btn_t;
_btn_t btn[BTN_COUNT];
unsigned char _red = 0;
unsigned char _green = 255;
unsigned char _blue = 0;
unsigned char _color_brightness = 0;
unsigned char _brightness = 0;
unsigned char _red_2 = 0;
unsigned char _green_2 = 255;
unsigned char _blue_2 = 0;
unsigned char _color_brightness_2 = 0;
unsigned char _brightness_2 = 0;
/*Przełącznik monostabilny*/
/*
void supla_timer() {
char v;
unsigned long now = millis();
for(int a=0;a<BTN_COUNT;a++)
if (btn[a].pin > 0) {
v = digitalRead(btn[a].pin);
if (v != btn[a].last_val && now - btn[a].last_time ) {
btn[a].last_val = v;
btn[a].last_time = now;
if (v==0)
{
if ( digitalRead(btn[a].relay_pin) > 0 ) {
SuplaDevice.relayOff(btn[a].channel);
} else {
SuplaDevice.relayOn(btn[a].channel, 0);
}
}
}
}
}*/
/*Przełącznik bistbilny*/
void supla_timer() {
char v;
unsigned long now = millis();
for(int a=0;a<BTN_COUNT;a++)
if (btn[a].pin > 0) {
v = digitalRead(btn[a].pin);
if (v != btn[a].last_val && now - btn[a].last_time ) {
btn[a].last_val = v;
btn[a].last_time = now;
if (v==0)
{
SuplaDevice.relayOn(btn[a].channel, 0);
}
else
{
SuplaDevice.relayOff(btn[a].channel);
}
}
}
}
void supla_btn_init() {
for(int a=0;a<BTN_COUNT;a++)
if (btn[a].pin > 0) {
pinMode(btn[a].pin, INPUT_PULLUP);
btn[a].last_val = digitalRead(btn[a].pin);
btn[a].last_time = millis();
}
}
void get_rgbw_value(int channelNumber, unsigned char *red, unsigned char *green, unsigned char *blue, unsigned char *color_brightness, unsigned char *brightness) {
if(channelNumber == 9)
{
*brightness = _brightness;
*color_brightness= _color_brightness;
*red = _red;
*green = _green;
*blue = _blue;
}
else if(channelNumber == 13)
{
*brightness = _brightness_2;
*color_brightness= _color_brightness_2;
*red = _red_2;
*green = _green_2;
*blue = _blue_2;
}
}
void set_rgbw() {
analogWrite(BRIGHTNESS_PIN, (_brightness * 255) / 100);
analogWrite(COLOR_BRIGHTNESS_PIN, (_color_brightness * 255) / 100);
analogWrite(RED_PIN, _red);
analogWrite(GREEN_PIN, _green);
analogWrite(BLUE_PIN, _blue);
analogWrite(BRIGHTNESS_PIN_2, (_brightness_2 * 255) / 100);
analogWrite(COLOR_BRIGHTNESS_PIN_2, (_color_brightness_2 * 255) / 100);
analogWrite(RED_PIN_2, _red_2);
analogWrite(GREEN_PIN_2, _green_2);
analogWrite(BLUE_PIN_2, _blue_2);
}
void set_rgbw_value(int channelNumber, unsigned char red, unsigned char green, unsigned char blue, unsigned char color_brightness, unsigned char brightness) {
if(channelNumber = 9)
{
_brightness = brightness;
_color_brightness= color_brightness;
_red = red;
_green = green;
_blue = blue;
analogWrite(BRIGHTNESS_PIN, (_brightness * 255) / 100);
analogWrite(COLOR_BRIGHTNESS_PIN, (_color_brightness * 255) / 100);
analogWrite(RED_PIN, _red);
analogWrite(GREEN_PIN, _green);
analogWrite(BLUE_PIN, _blue);
}
else if(channelNumber = 13)
{
_brightness_2 = brightness;
_color_brightness_2 = color_brightness;
_red_2 = red;
_green_2 = green;
_blue_2 = blue;
analogWrite(BRIGHTNESS_PIN_2, (_brightness_2 * 255) / 100);
analogWrite(COLOR_BRIGHTNESS_PIN_2, (_color_brightness_2 * 255) / 100);
analogWrite(RED_PIN_2, _red_2);
analogWrite(GREEN_PIN_2, _green_2);
analogWrite(BLUE_PIN_2, _blue_2);
}
// set_rgbw();
}
void supla_rs_SavePosition(int channelNumber, int position) {
// Save roller shutter position on flash memory.
// *Arduino EEPROM is not recommended because of write cycle limits.
}
void supla_rs_LoadPosition(int channelNumber, int *position) {
// Load roller shutter position from flash memory
}
void supla_rs_SaveSettings(int channelNumber, unsigned int full_opening_time, unsigned int full_closing_time) {
// Save roller shutter settings on flash memory.
// *Arduino EEPROM is not recommended because of write cycle limits.
}
void supla_rs_LoadSettings(int channelNumber, unsigned int *full_opening_time, unsigned int *full_closing_time) {
// Load roller shutter settings from flash memory
}
void setup() {
Serial.begin(9600);
memset(btn, 0, sizeof(btn));
btn[0].pin = 42;
btn[0].relay_pin = 32;
btn[0].channel = 10;
btn[1].pin = 43;
btn[1].relay_pin = 33;
btn[1].channel = 11;
btn[2].pin = 47;
btn[2].relay_pin = 34;
btn[2].channel = 12;
supla_btn_init();
SuplaDevice.setTimerFuncImpl(&supla_timer);
set_rgbw();
// Set RGBW callbacks
SuplaDevice.setRGBWCallbacks(&get_rgbw_value, &set_rgbw_value);
// Replace the falowing GUID
char GUID[SUPLA_GUID_SIZE] = {xx};
// with GUID that you can retrieve from https://www.supla.org/arduino/get-guid
// Ethernet MAC address
uint8_t mac[6] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05};
/*
* Having your device already registered at cloud.supla.org,
* you want to change CHANNEL sequence or remove any of them,
* then you must also remove the device itself from cloud.supla.org.
* Otherwise you will get "Channel conflict!" error.
*/
// CHANNEL0 - TWO RELAYS (Roller shutter operation)
SuplaDevice.addRollerShutterRelays(14, // roleta łazienka - otwieranie
15); // roleta łazienka - zamykanie
SuplaDevice.setRollerShutterButtons(0, // 0 - Channel Number
56, // roleta łazienka przycisk otwieranie
57); // roleta łazienka przycisk zamykanie
// CHANNEL1 - TWO RELAYS (Roller shutter operation)
SuplaDevice.addRollerShutterRelays(16, // roleta kuchnia - otwieranie
17); // roleta kuchnia - zamykanie
SuplaDevice.setRollerShutterButtons(1, // 1 - Channel Number
58, // roleta kuchnia przycisk otwieranie
59); // roleta kuchnia przycisk zamykanie
// CHANNEL2 - TWO RELAYS (Roller shutter operation)
SuplaDevice.addRollerShutterRelays(18, // roleta jadalnia - otwieranie
19); // roleta jadalnia - zamykanie
SuplaDevice.setRollerShutterButtons(2, // 2 - Channel Number
60, // roleta jadalnia przycisk otwieranie
61); // roleta jadalnia przycisk zamykanie
// CHANNEL3 - TWO RELAYS (Roller shutter operation)
SuplaDevice.addRollerShutterRelays(20, // roleta okno salon - otwieranie
21); // roleta okno salon - zamykanie
SuplaDevice.setRollerShutterButtons(3, // 3 - Channel Number
62, // roleta okno salon przycisk otwieranie
63); // roleta okno salon przycisk zamykanie
// CHANNEL4 - TWO RELAYS (Roller shutter operation)
SuplaDevice.addRollerShutterRelays(26, // roleta drzwi salon - otwieranie
24); // roleta drzwi salon - zamykanie
SuplaDevice.setRollerShutterButtons(4, // 4 - Channel Number
64, // roleta drzwi salon przycisk otwieranie
65); // roleta drzwi salon przycisk zamykanie
// CHANNEL5 - TWO RELAYS (Roller shutter operation)
SuplaDevice.addRollerShutterRelays(25, // roleta gabinet - otwieranie
22); // roleta gabinet - zamykanie
SuplaDevice.setRollerShutterButtons(5, // 5 - Channel Number
66, // roleta gabinet przycisk otwieranie
67); // roleta gabinet przycisk zamykanie
// CHANNEL6 - TWO RELAYS (Roller shutter operation)
SuplaDevice.addRollerShutterRelays(23, // roleta łazienka piętro - otwieranie
27); // roleta łazienka piętro - zamykanie
SuplaDevice.setRollerShutterButtons(6, // 6 - Channel Number
68, // roleta łazienka piętro przycisk otwieranie
69); // roleta łazienka piętro przycisk zamykanie
// CHANNEL7 - TWO RELAYS (Roller shutter operation)
SuplaDevice.addRollerShutterRelays(28, // roleta sypialnia drzwi - otwieranie
29); // roleta sypialnia drzwi - zamykanie
SuplaDevice.setRollerShutterButtons(7, // 7 - Channel Number
48, // roleta sypialnia drzwi przycisk otwieranie
49); // roleta sypialnia drzwi przycisk zamykanie
// CHANNEL8 - TWO RELAYS (Roller shutter operation)
SuplaDevice.addRollerShutterRelays(30, // roleta sypialnia okno - otwieranie
31); // roleta sypialnia okno - zamykanie
SuplaDevice.setRollerShutterButtons(8, // 8 - Channel Number
40, // roleta sypialnia okno przycisk otwieranie
41); // roleta sypialnia okno przycisk zamykanie
SuplaDevice.setRollerShutterFuncImpl(&supla_rs_SavePosition, &supla_rs_LoadPosition, &supla_rs_SaveSettings, &supla_rs_LoadSettings);
// Set RGBW callbacks
SuplaDevice.setRGBWCallbacks(&get_rgbw_value, &set_rgbw_value);
// CHANNEL9 - RGB controller and dimmer (RGBW)
SuplaDevice.addRgbControllerAndDimmer();
// CHANNEL10 - RELAY
SuplaDevice.addRelay(32); // 32 - Lampy na zewnątrz domu na elewacji z przodu
// CHANNEL11 - RELAY
SuplaDevice.addRelay(33); // 33 - Lampa na kalenicy z przodu
// CHANNEL12 - RELAY
SuplaDevice.addRelay(34); // 34 - Oświetlenie podjazdu - chodnika
// CHANNEL13 - RGB controller and dimmer (RGBW)
SuplaDevice.addRgbControllerAndDimmer();
/*
* SuplaDevice Initialization.
* Server address, LocationID and LocationPassword are available at https://cloud.supla.org
* If you do not have an account, you can create it at https://cloud.supla.org/account/create
* SUPLA and SUPLA CLOUD are free of charge
*
*/
SuplaDevice.begin(GUID, // Global Unique Identifier
mac, // Ethernet MAC address
"svr11.supla.org", // SUPLA server address
xxxx, // Location ID
"xxxx"); // Location Password
}
void loop() {
SuplaDevice.iterate();
}