Új hozzászólás Aktív témák

  • Dodi_30

    újonc

    A garázskapu vezérlés Sketch-e, egy relé és egy Reed relé:

    #include <MySigningNone.h>
    #include <MyTransportNRF24.h>
    #include <MyTransportRFM69.h>
    #include <MyHwATMega328.h>
    #include <MySensor.h>
    #include <SPI.h>
    #include <Bounce2.h>

    #define RELAY_1 3 // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
    #define NUMBER_OF_RELAYS 1 // Total number of attached relays
    #define RELAY_ON 0 // GPIO value to write to turn on attached relay
    #define RELAY_OFF 1 // GPIO value to write to turn off attached relay
    #define TOGGLE_INTERVAL 2000

    #define CHILD_ID 3
    #define BUTTON_PIN 4


    MyTransportNRF24 radio(RF24_CE_PIN, RF24_CS_PIN, RF24_PA_LEVEL_GW);
    MyHwATMega328 hw;
    MySensor gw(radio, hw);
    Bounce debouncer = Bounce();
    int oldValue=-1;

    MyMessage msg(CHILD_ID,V_TRIPPED);

    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&Reed", "1.0");

    pinMode(BUTTON_PIN,INPUT);
    digitalWrite(BUTTON_PIN,HIGH);
    debouncer.attach(BUTTON_PIN);
    debouncer.interval(2);

    gw.present(CHILD_ID, S_DOOR);

    // 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();

    debouncer.update();
    // Get the update value
    int value = debouncer.read();
    if (value != oldValue) {
    // Send in the new value
    gw.send(msg.set(value==HIGH ? 1 : 0));
    oldValue = value;
    }

    }

    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());
    }

    }

Új hozzászólás Aktív témák