Navigation

    • Register
    • Login
    • OpenHardware.io
    • Categories
    • Recent
    • Tags
    • Popular
    1. Home
    2. mysz0n
    • Profile
    • Following
    • Followers
    • Topics
    • Posts
    • Best
    • Groups

    mysz0n

    @mysz0n

    0
    Reputation
    3
    Posts
    204
    Profile views
    0
    Followers
    0
    Following
    Joined Last Online

    mysz0n Follow

    Best posts made by mysz0n

    This user hasn't posted anything yet.

    Latest posts made by mysz0n

    • RE: DimmableLED+Relay problem

      @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?

      posted in Development
      mysz0n
      mysz0n
    • DimmableLED+Relay problem

      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 );
        }
      }```
      posted in Development
      mysz0n
      mysz0n