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
  1. Home
  2. Development
  3. Repeater questions

Repeater questions

Scheduled Pinned Locked Moved Development
5 Posts 4 Posters 2.3k Views 3 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • E Offline
    E Offline
    ericvdb
    wrote on last edited by
    #1

    Can I send a heartbeat from the repeater node like this,

    unsigned long lastHeartbeat = 0;
    #define HEARTBEAT_INTERVAL 3600000
    
    void loop() {
    if (millis() - lastHeartbeat > HEARTBEAT_INTERVAL) {
      ... PING ....
      lastHeartbeat = millis();
      }
    }
    

    and will the status leds work on a repeater node?

    I thought I ask first before spending time making the modifications.

    Greetz

    1 Reply Last reply
    0
    • hekH Offline
      hekH Offline
      hek
      Admin
      wrote on last edited by
      #2

      Code looks fine... And yes you can enable status lead in MyConfig.h before compiling the repeater (1.5).

      1 Reply Last reply
      0
      • Tore André RosanderT Offline
        Tore André RosanderT Offline
        Tore André Rosander
        wrote on last edited by
        #3

        How should i include the heartbeat function in this sketch? (or any other)

        /**
         * The MySensors Arduino library handles the wireless radio link and protocol
         * between your home built sensors/actuators and HA controller of choice.
         * The sensors forms a self healing radio network with optional repeaters. Each
         * repeater and gateway builds a routing tables in EEPROM which keeps track of the
         * network topology allowing messages to be routed to nodes.
         *
         * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
         * Copyright (C) 2013-2015 Sensnology AB
         * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
         *
         * Documentation: http://www.mysensors.org
         * Support Forum: http://forum.mysensors.org
         *
         * This program is free software; you can redistribute it and/or
         * modify it under the terms of the GNU General Public License
         * version 2 as published by the Free Software Foundation.
         *
         *******************************
         *
         * REVISION HISTORY
         * Version 1.0 - Created by vil1driver
         * 
         * DESCRIPTION
         * RGB led strip controled with three dimmers + one On/Off for run/stop rgb color cycle :p
         * 
         */
         
        #define SN   "RGB Led strip 3D"
        #define SV   "v1"
        
        // Enable debug prints to serial monitor
        #define MY_DEBUG 
        
        // Enable and select radio type attached
        #define MY_RADIO_NRF24
        //#define MY_RADIO_RFM69
        
        #include <SPI.h>
        #include <MySensor.h>	
        
        // Arduino pin attached to MOSFET Gate pin
        #define RED_PIN 3 	
        #define GREEN_PIN 5
        #define BLUE_PIN 6
        
        // Define message name and type to send sensor info
        MyMessage RedStatus(RED_PIN, V_DIMMER);		
        MyMessage GreenStatus(GREEN_PIN, V_DIMMER);
        MyMessage BlueStatus(BLUE_PIN, V_DIMMER);
        MyMessage Status(1, V_DIMMER);
        MyMessage rgbShowState(0, V_LIGHT);
            
        // Serial.print translate sensor id to sensor name
        char color[][6] = {"","","","RED","","GREEN","BLUE"};	
           
        // Vars for rgbShow function
        int redval = 0;
        int greenval = 0;
        int blueval = 0;
        long time=0;
        int isShow;
             
        void setup() 
        {
          // Define pin mode (pin number, type)
          pinMode(RED_PIN, OUTPUT);		
          pinMode(GREEN_PIN, OUTPUT);
          pinMode(BLUE_PIN, OUTPUT);
        
          // Correct saved RGB value for first start
          saveState(RED_PIN, constrain((int8_t)loadState(RED_PIN), 0, 100)); 
          saveState(GREEN_PIN, constrain((int8_t)loadState(GREEN_PIN), 0, 100)); 
          saveState(BLUE_PIN, constrain((int8_t)loadState(BLUE_PIN), 0, 100)); 
                     
          // Get value from eeprom and write to output
          analogWrite(RED_PIN, 255 * loadState(RED_PIN) / 100); 		
          analogWrite(GREEN_PIN, 255 * loadState(GREEN_PIN) / 100);
          analogWrite(BLUE_PIN, 255 * loadState(BLUE_PIN) / 100);
                 
          // Write some debug info
          Serial.print("Load from eeprom RED: "); 
          Serial.print(loadState(RED_PIN)); 
          Serial.println("%"); 
          Serial.print("Load from eeprom GREEN: "); 
          Serial.print(loadState(GREEN_PIN)); 
          Serial.println("%"); 
          Serial.print("Load from eeprom BLUE: "); 
          Serial.print(loadState(BLUE_PIN)); 
          Serial.println("%");  
          
          // Send RGB value to controler (request ack back: true/false)
          Serial.println("Send eeprom value to controler"); 
          send( RedStatus.set(loadState(RED_PIN)), false );    
          send( GreenStatus.set(loadState(GREEN_PIN)), false );
          send( BlueStatus.set(loadState(BLUE_PIN)), false );
          
          // Correct RGB show state for first start and load it (set to 'On' at first start)
          saveState(0, constrain((int8_t)loadState(0), 0, 1));
          isShow=loadState(0);
               
          // Send RGB show state to controler (request ack back: true/false)
          send( rgbShowState.set(isShow), false);
          
          if (isShow==1){Serial.println("RGB show running..."); }
          Serial.println("Ready to receive messages...");  
        }
        
        void presentation()  {
          // Present sketch (name, version)
          sendSketchInfo(SN, SV);        
               
          // Register sensors (id, type, description, ack back)
          present(RED_PIN, S_DIMMER, "present RED light", false);
          present(GREEN_PIN, S_DIMMER, "present GREEN light", false);
          present(BLUE_PIN, S_DIMMER, "present BLUE light", false);
          present(0, S_LIGHT, "present Show button", false);
        }
        
        void loop()
        {
          // Run RGB show if is set
          if (isShow==1)
          {
            	rgbShow();
          	analogWrite(RED_PIN, redval);
          	analogWrite(GREEN_PIN, greenval);
          	analogWrite(BLUE_PIN, blueval);
           } 
        }
        
        
        void receive(const MyMessage &message)
        {
          if (message.isAck())
          {
           	Serial.println("Got ack from gateway");
          }
          if (message.type == V_LIGHT)
          {
          	// Incoming on/off command sent from controller ("1" or "0")
          	int lightState = message.getString()[0] == '1';
          
          	// if receive RGB Show On commands, start the show
          	if (message.sensor==0 && lightState==1){ rgbShowOn();	}
                // if receive RGB Show Off commands, stop the show
          	else if (message.sensor==0 && lightState==0){	rgbShowOff();	}
               
          	// if receive RGB switch On command
          	else if (lightState==1)
          	{
          		// Write some debug info
                  	Serial.print("Incoming change for ");
                  	Serial.print(color[message.sensor]);
                  	Serial.println(": On");
                  	Serial.print("Load from eeprom: ");
                  
          		if ( loadState(message.sensor) == 0)
          		{
          			// Pick up last saved dimmer level from the eeprom
                    		analogWrite(message.sensor, 255 * loadState(10*message.sensor) / 100);
                    		// Save loaded value to current
                    		saveState(message.sensor, loadState(10*message.sensor));
                    		Serial.print(loadState(10*message.sensor)); 
                    		Serial.println("%");
                    		// Send value to controler
                    		Serial.println("Send value to controler");
                    		send(Status.setSensor(message.sensor).set(loadState(10*message.sensor)),false);
                  	}
                  	else
                  	{
                    		// Pick up last saved dimmer level from the eeprom
                    		analogWrite(message.sensor, 255 * loadState(message.sensor) / 100);
                    		Serial.print(loadState(message.sensor));
                    		Serial.println("%"); 
                    		// Send value to controler
                    		Serial.println("Send value to controler");
                    		send(Status.setSensor(message.sensor).set(loadState(message.sensor)),false);
                  	} 
                  	// Stop the show if it's running
                  	if (isShow==1){ rgbShowStop(message.sensor); }
                }
          	// if recieve switch Off command
          	else if (lightState==0)
          	{
          		// Write output to 0 (Off)
                  	analogWrite(message.sensor, 0);
                  	// Save old value to eeprom if it'was not zero
                  	if ( loadState(message.sensor) != 0 )
                  	{
                    		saveState(10*message.sensor, constrain((int8_t)loadState(message.sensor), 0, 100)); 
                  	}
                  	// Save new value to eeprom
                  	saveState(message.sensor, 0); 
                  	// Write some debug info
          		Serial.print("Incoming change for ");
          		Serial.print(color[message.sensor]);
          		Serial.print(": ");
          		Serial.println("Off");	
                  	Serial.print("Store old value: ");
                  	Serial.print(loadState(10*message.sensor));  
                  	Serial.println("%");
                  	// Send value to controler
                  	Serial.println("Send value to controler");
                  	send(Status.setSensor(message.sensor).set(loadState(message.sensor)),false);
          		// Stop the show if it's running
          		if (isShow==1){ rgbShowStop(message.sensor); }
          	}
          }
          else if (message.type == V_DIMMER)
          {    
            	uint8_t incomingDimmerStatus = message.getByte();
            	// limits range of sensor values to between 0 and 100 
            	incomingDimmerStatus = constrain((int8_t)incomingDimmerStatus, 0, 100);
            	// Change Dimmer level
            	analogWrite(message.sensor, 255 * incomingDimmerStatus / 100);
            	//Save value to eeprom
            	saveState(message.sensor, incomingDimmerStatus); 
            	// Write some debug info
            	Serial.print("Incoming change for ");
            	Serial.print(color[message.sensor]);
            	Serial.print(": ");
            	Serial.print(incomingDimmerStatus);
            	Serial.println("%");
                // Send value to controler
                Serial.println("Send value to controler");
                send(Status.setSensor(message.sensor).set(loadState(message.sensor)),false);
            	// Stop the show if it's running
            	if (isShow==1){ rgbShowStop(message.sensor); }
            }
        }
           
        void rgbShow()
        {
          time = millis();
          redval = 128+250*cos(2*PI/300000*time);
          greenval = 128+250*cos(2*PI/300000*time-222);
          blueval = 128+250*cos(2*PI/300000*time-111);
          // limits range of sensor values to between 0 and 255 
          redval = constrain(redval, 0, 255);
          greenval = constrain(greenval, 0, 255);
          blueval = constrain(blueval, 0, 255);
        }
        
        void rgbShowOn()
        {
          // define show On
          isShow=1;
          // Save state
          saveState(0, 1); 
          // Write some debug info
          Serial.println("Show must go on");
        }
           
        void rgbShowOff()
        {
          // define show Off
          isShow=0;
          // Save state
          saveState(0, 0);
          // Save RGB value to eeprom
          saveState(RED_PIN, 100 * redval / 255); 
          saveState(GREEN_PIN, 100 * greenval / 255);
          saveState(BLUE_PIN, 100 * blueval / 255);
          // Write some debug info
          Serial.println("Stop the show");
          // Send actual RGB value and state to controler and request ack back (true/false)
          Serial.println("Send eeprom value to controler"); 
          send( RedStatus.set(loadState(RED_PIN)), false );    
          send( GreenStatus.set(loadState(GREEN_PIN)), false );
          send( BlueStatus.set(loadState(BLUE_PIN)), false );
          send( rgbShowState.set(0), false);
        }
        
        void rgbShowStop(int sensor)
        {
           // define show Off
           isShow=0;
           // Save state
           saveState(0, 0);
           // Write some debug info
           Serial.println("Stop the show");
           // Send actual RGB value and state to controler and request ack back (true/false)
           Serial.println("Send eeprom value to controler"); 
           if (sensor != RED_PIN)
           {
                saveState(RED_PIN, 100 * redval / 255); 
                send( RedStatus.set(loadState(RED_PIN)), false );  
            }
            if (sensor != GREEN_PIN)
            {
                saveState(GREEN_PIN, 100 * greenval / 255); 
                send( GreenStatus.set(loadState(GREEN_PIN)), false );
            }
            if (sensor != BLUE_PIN)
            {
                saveState(BLUE_PIN, 100 * blueval / 255);
                send( BlueStatus.set(loadState(BLUE_PIN)), false );
            }
            send( rgbShowState.set(0), false);
        }
                   
           
        
        AWIA 1 Reply Last reply
        0
        • Tore André RosanderT Tore André Rosander

          How should i include the heartbeat function in this sketch? (or any other)

          /**
           * The MySensors Arduino library handles the wireless radio link and protocol
           * between your home built sensors/actuators and HA controller of choice.
           * The sensors forms a self healing radio network with optional repeaters. Each
           * repeater and gateway builds a routing tables in EEPROM which keeps track of the
           * network topology allowing messages to be routed to nodes.
           *
           * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
           * Copyright (C) 2013-2015 Sensnology AB
           * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
           *
           * Documentation: http://www.mysensors.org
           * Support Forum: http://forum.mysensors.org
           *
           * This program is free software; you can redistribute it and/or
           * modify it under the terms of the GNU General Public License
           * version 2 as published by the Free Software Foundation.
           *
           *******************************
           *
           * REVISION HISTORY
           * Version 1.0 - Created by vil1driver
           * 
           * DESCRIPTION
           * RGB led strip controled with three dimmers + one On/Off for run/stop rgb color cycle :p
           * 
           */
           
          #define SN   "RGB Led strip 3D"
          #define SV   "v1"
          
          // Enable debug prints to serial monitor
          #define MY_DEBUG 
          
          // Enable and select radio type attached
          #define MY_RADIO_NRF24
          //#define MY_RADIO_RFM69
          
          #include <SPI.h>
          #include <MySensor.h>	
          
          // Arduino pin attached to MOSFET Gate pin
          #define RED_PIN 3 	
          #define GREEN_PIN 5
          #define BLUE_PIN 6
          
          // Define message name and type to send sensor info
          MyMessage RedStatus(RED_PIN, V_DIMMER);		
          MyMessage GreenStatus(GREEN_PIN, V_DIMMER);
          MyMessage BlueStatus(BLUE_PIN, V_DIMMER);
          MyMessage Status(1, V_DIMMER);
          MyMessage rgbShowState(0, V_LIGHT);
              
          // Serial.print translate sensor id to sensor name
          char color[][6] = {"","","","RED","","GREEN","BLUE"};	
             
          // Vars for rgbShow function
          int redval = 0;
          int greenval = 0;
          int blueval = 0;
          long time=0;
          int isShow;
               
          void setup() 
          {
            // Define pin mode (pin number, type)
            pinMode(RED_PIN, OUTPUT);		
            pinMode(GREEN_PIN, OUTPUT);
            pinMode(BLUE_PIN, OUTPUT);
          
            // Correct saved RGB value for first start
            saveState(RED_PIN, constrain((int8_t)loadState(RED_PIN), 0, 100)); 
            saveState(GREEN_PIN, constrain((int8_t)loadState(GREEN_PIN), 0, 100)); 
            saveState(BLUE_PIN, constrain((int8_t)loadState(BLUE_PIN), 0, 100)); 
                       
            // Get value from eeprom and write to output
            analogWrite(RED_PIN, 255 * loadState(RED_PIN) / 100); 		
            analogWrite(GREEN_PIN, 255 * loadState(GREEN_PIN) / 100);
            analogWrite(BLUE_PIN, 255 * loadState(BLUE_PIN) / 100);
                   
            // Write some debug info
            Serial.print("Load from eeprom RED: "); 
            Serial.print(loadState(RED_PIN)); 
            Serial.println("%"); 
            Serial.print("Load from eeprom GREEN: "); 
            Serial.print(loadState(GREEN_PIN)); 
            Serial.println("%"); 
            Serial.print("Load from eeprom BLUE: "); 
            Serial.print(loadState(BLUE_PIN)); 
            Serial.println("%");  
            
            // Send RGB value to controler (request ack back: true/false)
            Serial.println("Send eeprom value to controler"); 
            send( RedStatus.set(loadState(RED_PIN)), false );    
            send( GreenStatus.set(loadState(GREEN_PIN)), false );
            send( BlueStatus.set(loadState(BLUE_PIN)), false );
            
            // Correct RGB show state for first start and load it (set to 'On' at first start)
            saveState(0, constrain((int8_t)loadState(0), 0, 1));
            isShow=loadState(0);
                 
            // Send RGB show state to controler (request ack back: true/false)
            send( rgbShowState.set(isShow), false);
            
            if (isShow==1){Serial.println("RGB show running..."); }
            Serial.println("Ready to receive messages...");  
          }
          
          void presentation()  {
            // Present sketch (name, version)
            sendSketchInfo(SN, SV);        
                 
            // Register sensors (id, type, description, ack back)
            present(RED_PIN, S_DIMMER, "present RED light", false);
            present(GREEN_PIN, S_DIMMER, "present GREEN light", false);
            present(BLUE_PIN, S_DIMMER, "present BLUE light", false);
            present(0, S_LIGHT, "present Show button", false);
          }
          
          void loop()
          {
            // Run RGB show if is set
            if (isShow==1)
            {
              	rgbShow();
            	analogWrite(RED_PIN, redval);
            	analogWrite(GREEN_PIN, greenval);
            	analogWrite(BLUE_PIN, blueval);
             } 
          }
          
          
          void receive(const MyMessage &message)
          {
            if (message.isAck())
            {
             	Serial.println("Got ack from gateway");
            }
            if (message.type == V_LIGHT)
            {
            	// Incoming on/off command sent from controller ("1" or "0")
            	int lightState = message.getString()[0] == '1';
            
            	// if receive RGB Show On commands, start the show
            	if (message.sensor==0 && lightState==1){ rgbShowOn();	}
                  // if receive RGB Show Off commands, stop the show
            	else if (message.sensor==0 && lightState==0){	rgbShowOff();	}
                 
            	// if receive RGB switch On command
            	else if (lightState==1)
            	{
            		// Write some debug info
                    	Serial.print("Incoming change for ");
                    	Serial.print(color[message.sensor]);
                    	Serial.println(": On");
                    	Serial.print("Load from eeprom: ");
                    
            		if ( loadState(message.sensor) == 0)
            		{
            			// Pick up last saved dimmer level from the eeprom
                      		analogWrite(message.sensor, 255 * loadState(10*message.sensor) / 100);
                      		// Save loaded value to current
                      		saveState(message.sensor, loadState(10*message.sensor));
                      		Serial.print(loadState(10*message.sensor)); 
                      		Serial.println("%");
                      		// Send value to controler
                      		Serial.println("Send value to controler");
                      		send(Status.setSensor(message.sensor).set(loadState(10*message.sensor)),false);
                    	}
                    	else
                    	{
                      		// Pick up last saved dimmer level from the eeprom
                      		analogWrite(message.sensor, 255 * loadState(message.sensor) / 100);
                      		Serial.print(loadState(message.sensor));
                      		Serial.println("%"); 
                      		// Send value to controler
                      		Serial.println("Send value to controler");
                      		send(Status.setSensor(message.sensor).set(loadState(message.sensor)),false);
                    	} 
                    	// Stop the show if it's running
                    	if (isShow==1){ rgbShowStop(message.sensor); }
                  }
            	// if recieve switch Off command
            	else if (lightState==0)
            	{
            		// Write output to 0 (Off)
                    	analogWrite(message.sensor, 0);
                    	// Save old value to eeprom if it'was not zero
                    	if ( loadState(message.sensor) != 0 )
                    	{
                      		saveState(10*message.sensor, constrain((int8_t)loadState(message.sensor), 0, 100)); 
                    	}
                    	// Save new value to eeprom
                    	saveState(message.sensor, 0); 
                    	// Write some debug info
            		Serial.print("Incoming change for ");
            		Serial.print(color[message.sensor]);
            		Serial.print(": ");
            		Serial.println("Off");	
                    	Serial.print("Store old value: ");
                    	Serial.print(loadState(10*message.sensor));  
                    	Serial.println("%");
                    	// Send value to controler
                    	Serial.println("Send value to controler");
                    	send(Status.setSensor(message.sensor).set(loadState(message.sensor)),false);
            		// Stop the show if it's running
            		if (isShow==1){ rgbShowStop(message.sensor); }
            	}
            }
            else if (message.type == V_DIMMER)
            {    
              	uint8_t incomingDimmerStatus = message.getByte();
              	// limits range of sensor values to between 0 and 100 
              	incomingDimmerStatus = constrain((int8_t)incomingDimmerStatus, 0, 100);
              	// Change Dimmer level
              	analogWrite(message.sensor, 255 * incomingDimmerStatus / 100);
              	//Save value to eeprom
              	saveState(message.sensor, incomingDimmerStatus); 
              	// Write some debug info
              	Serial.print("Incoming change for ");
              	Serial.print(color[message.sensor]);
              	Serial.print(": ");
              	Serial.print(incomingDimmerStatus);
              	Serial.println("%");
                  // Send value to controler
                  Serial.println("Send value to controler");
                  send(Status.setSensor(message.sensor).set(loadState(message.sensor)),false);
              	// Stop the show if it's running
              	if (isShow==1){ rgbShowStop(message.sensor); }
              }
          }
             
          void rgbShow()
          {
            time = millis();
            redval = 128+250*cos(2*PI/300000*time);
            greenval = 128+250*cos(2*PI/300000*time-222);
            blueval = 128+250*cos(2*PI/300000*time-111);
            // limits range of sensor values to between 0 and 255 
            redval = constrain(redval, 0, 255);
            greenval = constrain(greenval, 0, 255);
            blueval = constrain(blueval, 0, 255);
          }
          
          void rgbShowOn()
          {
            // define show On
            isShow=1;
            // Save state
            saveState(0, 1); 
            // Write some debug info
            Serial.println("Show must go on");
          }
             
          void rgbShowOff()
          {
            // define show Off
            isShow=0;
            // Save state
            saveState(0, 0);
            // Save RGB value to eeprom
            saveState(RED_PIN, 100 * redval / 255); 
            saveState(GREEN_PIN, 100 * greenval / 255);
            saveState(BLUE_PIN, 100 * blueval / 255);
            // Write some debug info
            Serial.println("Stop the show");
            // Send actual RGB value and state to controler and request ack back (true/false)
            Serial.println("Send eeprom value to controler"); 
            send( RedStatus.set(loadState(RED_PIN)), false );    
            send( GreenStatus.set(loadState(GREEN_PIN)), false );
            send( BlueStatus.set(loadState(BLUE_PIN)), false );
            send( rgbShowState.set(0), false);
          }
          
          void rgbShowStop(int sensor)
          {
             // define show Off
             isShow=0;
             // Save state
             saveState(0, 0);
             // Write some debug info
             Serial.println("Stop the show");
             // Send actual RGB value and state to controler and request ack back (true/false)
             Serial.println("Send eeprom value to controler"); 
             if (sensor != RED_PIN)
             {
                  saveState(RED_PIN, 100 * redval / 255); 
                  send( RedStatus.set(loadState(RED_PIN)), false );  
              }
              if (sensor != GREEN_PIN)
              {
                  saveState(GREEN_PIN, 100 * greenval / 255); 
                  send( GreenStatus.set(loadState(GREEN_PIN)), false );
              }
              if (sensor != BLUE_PIN)
              {
                  saveState(BLUE_PIN, 100 * blueval / 255);
                  send( BlueStatus.set(loadState(BLUE_PIN)), false );
              }
              send( rgbShowState.set(0), false);
          }
                     
             
          
          AWIA Offline
          AWIA Offline
          AWI
          Hero Member
          wrote on last edited by
          #4

          @Tore-André-Rosander You can just include it in the loop. What is the purpose of the -"heartbeat " you are using? In the development branch there is also a special implementation of a heartbeat service.
          One other observation in your code: you are constraining and converting a lot between percentages an byte values. Converting only where needed (when communicating with the controller) and using the "map" function makes the code more straightforward.
          Nice reading and examples for color manipulation can be found with the Fastled library also.

          Tore André RosanderT 1 Reply Last reply
          1
          • AWIA AWI

            @Tore-André-Rosander You can just include it in the loop. What is the purpose of the -"heartbeat " you are using? In the development branch there is also a special implementation of a heartbeat service.
            One other observation in your code: you are constraining and converting a lot between percentages an byte values. Converting only where needed (when communicating with the controller) and using the "map" function makes the code more straightforward.
            Nice reading and examples for color manipulation can be found with the Fastled library also.

            Tore André RosanderT Offline
            Tore André RosanderT Offline
            Tore André Rosander
            wrote on last edited by
            #5

            @AWI The code is from the MySensors examples and i use it to control 3 mosfets that controls a ledstrip.

            I need the heartbeat because i use the RPi gateway with the NRF24 chip directly connected to the RPi, and the gateway software for the raspberry dont store the network map so if i reboot the RPi the nodes loose connection to the gateway.

            1 Reply Last reply
            1
            Reply
            • Reply as topic
            Log in to reply
            • Oldest to Newest
            • Newest to Oldest
            • Most Votes


            10

            Online

            11.7k

            Users

            11.2k

            Topics

            113.0k

            Posts


            Copyright 2019 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
            • Login

            • Don't have an account? Register

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