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
M

mysz0n

@mysz0n
About
Posts
3
Topics
1
Shares
0
Groups
0
Followers
0
Following
0

Posts

Recent Best Controversial

  • DimmableLED+Relay problem
    M mysz0n

    @mfalkvidd Basically the code above is a combination of 2 examples from mysensors library. Dimmable LED Actuator and Relay Actuator. I thought that since the individual scripts work properly, combining them should not change the logic of the whole script?

    Development

  • DimmableLED+Relay problem
    M mysz0n

    Please help me verify the source of the problem. I use mysensors + domoticz.
    When I turn on one of the three dimmable led pins, the corresponding screen (first, second or third) is also activated
    Probably the problem lies in the code, but despite many attempts I did not manage to come to what is the reason for the error

    // Enable debug prints to serial monitor
    #define MY_DEBUG
    
    // Enable serial gateway
    #define MY_GATEWAY_SERIAL
    
    #include <MySensors.h>
    
    //relay
    #define RELAY_PIN 26  // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
    //#define NUMBER_OF_RELAYS 16 // Total number of attached relays
    #define NUMBER_OF_RELAYS 20
    #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
    int lastLightLevel;
    
    //dimmable led
    #define noLEDs 3
    const int LED_Pin[] = {4, 5, 6};
    
    #define FADE_DELAY 10  // Delay in ms for each percentage fade up/down (10ms = 1s full-range dim)
    static int currentLevel1 = 0;  // Current dim level...
    static int currentLevel2 = 0;  // Current dim level...
    static int currentLevel3 = 0;  // Current dim level...
    
    MyMessage dimmer1Msg(1, V_DIMMER);
    MyMessage light1Msg(1, V_LIGHT);
    MyMessage dimmer2Msg(2, V_DIMMER);
    MyMessage light2Msg(2, V_LIGHT);
    MyMessage dimmer3Msg(3, V_DIMMER);
    MyMessage light3Msg(3, V_LIGHT);
    
    
    
    
    
    void before()
    {
      for (int sensorRel = 4, pin = RELAY_PIN; sensorRel <= NUMBER_OF_RELAYS; sensorRel++, pin++) {
        // Then set relay pins in output mode
        pinMode(pin, OUTPUT);
        // Set relay to last known state (using eeprom storage)
        digitalWrite(pin, loadState(sensorRel) ? RELAY_ON : RELAY_OFF);
      }
    }
    
    void setup()
    {
      // LEDS
      // Pull the gateway's current dim level - restore light level upon sendor node power-up
      for (int sensor = 1; sensor <= noLEDs; sensor++) {
        request( sensor, V_DIMMER );
      }
    }
    
    void presentation()
    {
      // Send the sketch version information to the gateway and Controller
      sendSketchInfo("mysz0n", "4.0");
      for (int sensorRel = 4, pin = RELAY_PIN; sensorRel <= NUMBER_OF_RELAYS; sensorRel++, pin++) {
        // Register all sensors to gw (they will be created as child devices)
        present(sensorRel, S_BINARY);
      }
    
      // Register the LED Dimmable Light with the gateway
      for (int sensor = 1; sensor <= noLEDs; sensor++) {
        present(sensor, S_DIMMER);
        wait(2);
      }
    
    
    
    }
    
    
    void loop()
    {
    
    }
    
    
    void receive(const MyMessage &message)
    {
      // We only expect one type of message from controller. But we better check anyway.
      if (message.type == V_STATUS) {
        // Change relay state
        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());
      }
    
    
    
      if (message.type == V_LIGHT || message.type == V_DIMMER) {
    
        if (message.sensor == 1) {
          //  Retrieve the power or dim level from the incoming request message
          int requestedLevel1 = atoi( message.data );
          // Adjust incoming level if this is a V_LIGHT variable update [0 == off, 1 == on]
          requestedLevel1 *= ( message.type == V_LIGHT ? 100 : 1 );
          // Clip incoming level to valid range of 0 to 100
          requestedLevel1 = requestedLevel1 > 100 ? 100 : requestedLevel1;
          requestedLevel1 = requestedLevel1 < 0   ? 0   : requestedLevel1;
          fadeToLevel1( requestedLevel1, message.sensor );
          send(light1Msg.set(currentLevel1 > 0 ? 1 : 0));
          send(dimmer1Msg.set(currentLevel1) );
        }
        if (message.sensor == 2) {
          //  Retrieve the power or dim level from the incoming request message
          int requestedLevel2 = atoi( message.data );
          // Adjust incoming level if this is a V_LIGHT variable update [0 == off, 1 == on]
          requestedLevel2 *= ( message.type == V_LIGHT ? 100 : 1 );
          // Clip incoming level to valid range of 0 to 100
          requestedLevel2 = requestedLevel2 > 100 ? 100 : requestedLevel2;
          requestedLevel2 = requestedLevel2 < 0   ? 0   : requestedLevel2;
          fadeToLevel2( requestedLevel2, message.sensor );
          send(light2Msg.set(currentLevel2 > 0 ? 1 : 0));
          send(dimmer2Msg.set(currentLevel2) );
        }
    
        if (message.sensor == 3) {
          //  Retrieve the power or dim level from the incoming request message
          int requestedLevel3 = atoi( message.data );
          // Adjust incoming level if this is a V_LIGHT variable update [0 == off, 1 == on]
          requestedLevel3 *= ( message.type == V_LIGHT ? 100 : 1 );
          // Clip incoming level to valid range of 0 to 100
          requestedLevel3 = requestedLevel3 > 100 ? 100 : requestedLevel3;
          requestedLevel3 = requestedLevel3 < 0   ? 0   : requestedLevel3;
          fadeToLevel3( requestedLevel3, message.sensor );
          send(light3Msg.set(currentLevel3 > 0 ? 1 : 0));
          send(dimmer3Msg.set(currentLevel3) );
        }
      }
    
    
    }
    
    
    
    /***
        This method provides a graceful fade up/down effect
    */
    void fadeToLevel1( int toLevel1, int ledid1 ) {
      int delta1 = ( toLevel1 - currentLevel1 ) < 0 ? -1 : 1;
      while ( currentLevel1 != toLevel1 ) {
        currentLevel1 += delta1;
        analogWrite(LED_Pin[ledid1 - 1], (int)(currentLevel1 / 100. * 255) );
        wait( FADE_DELAY );
      }
    }
    void fadeToLevel2( int toLevel2, int ledid2 ) {
    
      int delta2 = ( toLevel2 - currentLevel2 ) < 0 ? -1 : 1;
    
      while ( currentLevel2 != toLevel2 ) {
        currentLevel2 += delta2;
        analogWrite(LED_Pin[ledid2 - 1], (int)(currentLevel2 / 100. * 255) );
        wait( FADE_DELAY );
      }
    }
    void fadeToLevel3( int toLevel3, int ledid3 ) {
    
      int delta3 = ( toLevel3 - currentLevel3 ) < 0 ? -1 : 1;
    
      while ( currentLevel3 != toLevel3 ) {
        currentLevel3 += delta3;
        analogWrite(LED_Pin[ledid3 - 1], (int)(currentLevel3 / 100. * 255) );
        wait( FADE_DELAY );
      }
    }```
    Development
  • Login

  • Don't have an account? Register

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