Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
A

asalas

@asalas
About
Posts
2
Topics
1
Shares
0
Groups
0
Followers
0
Following
0

Posts

Recent Best Controversial

  • MySensors 2.x - 1 RELAY AND 1 PIR simple combination
    A asalas

    Thank you mfalkvidd, I did it and it is working well now!.

    For those who want a simple solution and as future reference, here is my simple code:

    #define MY_DEBUG
    #define MY_BAUD_RATE 38400
    #define MY_RADIO_NRF24
    
    #define MY_RF24_PA_LEVEL RF24_PA_HIGH
    #define MY_RF24_CHANNEL 115
    #define MY_RF24_DATARATE RF24_250KBPS
    #define MY_RF24_BASE_RADIO_ID 0x00,0xFC,0xE1,0xA8,0xA8
    
    #define MY_NODE_ID 164
    #include <SPI.h>
    #include <MySensors.h>
    
    #define RELAY_PIN 2  // 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  1 // GPIO value to write to turn on attached relay
    #define RELAY_OFF 0 // GPIO value to write to turn off attached relay
    
    
    #define RELAY_CHILD_ID 1   // Id of the sensor child RELAY
    #define MOTION_CHILD_ID 2   // Id of the sensor child MOTION
    
    
    
    #define DIGITAL_INPUT_SENSOR 3   // The digital input you attached your motion sensor.  (Only 2 and 3 generates interrupt!)
    uint32_t SLEEP_TIME = 10000; // Sleep time between reports (in milliseconds)..NOT USED ANYMORE BECAUSE IT TURNS OFF THE NODE AND IT CAN'T RECEIVE RELAY REMOTE TRIGGERING ORDER
    
    boolean lastMotion = false;
    
    // Initialize motion message
    MyMessage msg(MOTION_CHILD_ID, V_TRIPPED);
    
    void before()
    {
        for (int sensor=1, pin=RELAY_PIN; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
            // Then set relay pins in output mode
            pinMode(pin, OUTPUT);
            //Always starts OFF
            digitalWrite(pin, RELAY_OFF);
        }
        pinMode(DIGITAL_INPUT_SENSOR, INPUT);      // sets the motion sensor digital pin as input
    }
    
    void setup()
    {
    
    }
    
    void presentation()
    {
        // Send the sketch version information to the gateway and Controller
        sendSketchInfo("Relay_PLUS_PIR", "1.0");
    
        for (int sensor=1, pin=RELAY_PIN; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
            // Register all sensors to gw (they will be created as child devices)
            present(sensor, S_LIGHT);
        }
            // Register all sensors to gw (they will be created as child devices)
        present(MOTION_CHILD_ID, S_MOTION);
    }
    
    
    void loop()
    {
        // Read digital motion value
        bool motion = digitalRead(DIGITAL_INPUT_SENSOR) == HIGH;
        if (lastMotion != motion) {
          lastMotion = motion;
          Serial.println(motion);
          send(msg.set(motion?"1":"0"));  // Send tripped value to gw
        }
        // Sleep until interrupt comes in on motion sensor. Send update every two minute.
       //  NOT USED
        // sleep(digitalPinToInterrupt(DIGITAL_INPUT_SENSOR), CHANGE, SLEEP_TIME);
      //  NOT USED
    }
    
    void receive(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( RELAY_PIN, message.getBool()?RELAY_ON:RELAY_OFF);
            //digitalWrite(message.sensor-1+RELAY_PIN, message.getBool()?RELAY_ON:RELAY_OFF);
            // Store state in eeprom
            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());
        }
    }
    

    Regards!

    Troubleshooting
  • Login

  • Don't have an account? Register

  • Login or register to search.
  • First post
    Last post
0
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular