niedziela, 4 października 2015

Domoticz - MySensors - Arduino - program na 4 przekaźniki i więcej

Jeżeli na jednym odbiorniku Arduino chcemy mieć obsługę więcej niż jeden przekaźnik, to należy zmodyfikować kod programu dostępnego z MySenors. Kod na obsługę 4 przekaźników wygląda tak:

#include 
#include
#include
#include
#include
#include

#define RELAY_1 3 // Pin D3
#define RELAY_2 4 // Pin D4
#define RELAY_3 5 // Pin D5
#define RELAY_4 6 // Pin D6
#define NUMBER_OF_RELAYS 4 // Liczba przekaznikow
#define RELAY_ON 1 // Stan wysoki przekaznik wlaczony
#define RELAY_OFF 0 // Stan niski przekaznik wylaczony

// NRFRF24L01 radio driver (set low transmit power by default)
MyTransportNRF24 radio(RF24_CE_PIN, RF24_CS_PIN, RF24_PA_LEVEL_GW);
//MyTransportRFM69 radio;
// Message signing driver (none default)
//MySigningNone signer;
// Select AtMega328 hardware profile
MyHwATMega328 hw;
// Construct MySensors library
MySensor gw(radio, hw);

void setup() {
// Initialize library and add callback for incoming messages
gw.begin(incomingMessage, AUTO, true);
// Send the sketch version information to the gateway and Controller
gw.sendSketchInfo("Relay", "1.0");

// Fetch relay status

for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++, pin++){
// Register all sensors to gw (they will be created as child devices)
gw.present(sensor, S_LIGHT);
// Then set relay pins in output mode
pinMode(pin, OUTPUT);
// Set relay to last known state (using eeprom storage)
digitalWrite(pin, gw.loadState(sensor)?RELAY_ON:RELAY_OFF);
}
}


void loop()
{
// Alway process incoming messages whenever possible
gw.process();
}

void incomingMessage(const MyMessage &message) {
// We only expect one type of message from controller. But we better check anyway.
if (message.type==V_LIGHT) {
// Change relay state
digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF);
// Store state in eeprom
gw.saveState(message.sensor, message.getBool());
// Write some debug info
Serial.print("Incoming change for sensor:");
Serial.print(message.sensor);
Serial.print(", New status: ");
Serial.println(message.getBool());
}
}
Program wykorzystuje piny Arduino D3 do D6 i definiujemy, to w tej linijce:
#define RELAY_1  3  // Pin D3
#define RELAY_2 4 // Pin D4
#define RELAY_3 5 // Pin D5
#define RELAY_4 6 // Pin D6
#define NUMBER_OF_RELAYS 4 // Liczba przekaznikow
Po wgraniu do Arduino w Domoticz pojawią się 4 nowe urządzenia, dodajemy je klikając w zieloną strzałkę i wpisujemy nazwę i mamy 4 przełączniki
Kod do pobrania -> Przekaznikix4

1 komentarz:

  1. przydała by się informacja, ze chodzi o arduino z arduinio getway a nie samo (po kablu)

    OdpowiedzUsuń