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. My Project
  3. A little help with my first ever MySensors (and Arduido) sketch: Rotary Angle Sensor (knob) + Nano + esp8266 gateway

A little help with my first ever MySensors (and Arduido) sketch: Rotary Angle Sensor (knob) + Nano + esp8266 gateway

Scheduled Pinned Locked Moved My Project
14 Posts 2 Posters 3.3k Views 2 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.
  • vadimbzV Offline
    vadimbzV Offline
    vadimbz
    wrote on last edited by vadimbz
    #1

    UPD: I forgot to paste the important part, this:

    #error No forward link or gateway feature activated. This means nowhere to send messages! Pretty pointless.
    

    I want to show angular value (0-300) upstream to Home Assistant as a sensor, and lockstep to it from there to control home assistant services - volume control, scene selector, media seek, etc.
    Mysensors 2.11 in arduino, gateway is still 2.0. This is the sensor, not the same as encoder evidently:
    http://wiki.seeed.cc/Grove-Rotary_Angle_Sensor/
    and the code. Thanks!

    #include <SPI.h>
    #include <GroveEncoder.h>
    #include <MyConfig.h>
    #include <MySensors.h>
    #define ROTARY_ANGLE_SENSOR A0
    
    #define ADC_REF 5//reference voltage of ADC is 5v.If the Vcc switch on the seeeduino
                     //board switches to 3V3, the ADC_REF should be 3.3
    #define VCC 5//VCC of the grove interface is normally 5v
    #define FULL_ANGLE 300//full value of the rotary angle is 300 degrees
    // Enable debug prints to serial monitor
    #define MY_DEBUG 
    
    // Enable and select radio type attached
    #define MY_RADIO_NRF24
    #define SN "RotaryAngleSensor"
    #define SV "1.0"
    #define CHILD_ID
    unsigned long SLEEP_TIME = 100
    
    Rotary Angle Sensor;
    
    MyMessage msg(CHILD_ID, V_VAR1);
    int lastDegrees;
    
    void setup() 
    {
        Serial.begin(9600);
        pinsInit();
        sendSketchInfo(SN, SV);
        present(CHILD_ID, S_CUSTOM);
    }
    
    void loop() 
    {
        int degrees;
        degrees = getDegree();
        Serial.println(degrees);
        if (degrees != lastDegrees) {
            send(msg.set(degrees));
            lastDegrees = degrees;
        }
        
        sleep(SLEEP_TIME);
    }
    
    void pinsInit()
    {
        pinMode(ROTARY_ANGLE_SENSOR, INPUT);
    }
    
    /************************************************************************/
    /*Function: Get the angle between the mark and the starting position    */
    /*Parameter:-void                                                       */
    /*Return:   -int,the range of degrees is 0~300                          */
    int getDegree()
    {
        int sensor_value = analogRead(ROTARY_ANGLE_SENSOR);
        float voltage;
        voltage = (float)sensor_value*ADC_REF/1023;
        float degrees = (voltage*FULL_ANGLE)/VCC;
        return degrees;
    }```
    mfalkviddM 1 Reply Last reply
    0
    • vadimbzV vadimbz

      UPD: I forgot to paste the important part, this:

      #error No forward link or gateway feature activated. This means nowhere to send messages! Pretty pointless.
      

      I want to show angular value (0-300) upstream to Home Assistant as a sensor, and lockstep to it from there to control home assistant services - volume control, scene selector, media seek, etc.
      Mysensors 2.11 in arduino, gateway is still 2.0. This is the sensor, not the same as encoder evidently:
      http://wiki.seeed.cc/Grove-Rotary_Angle_Sensor/
      and the code. Thanks!

      #include <SPI.h>
      #include <GroveEncoder.h>
      #include <MyConfig.h>
      #include <MySensors.h>
      #define ROTARY_ANGLE_SENSOR A0
      
      #define ADC_REF 5//reference voltage of ADC is 5v.If the Vcc switch on the seeeduino
                       //board switches to 3V3, the ADC_REF should be 3.3
      #define VCC 5//VCC of the grove interface is normally 5v
      #define FULL_ANGLE 300//full value of the rotary angle is 300 degrees
      // Enable debug prints to serial monitor
      #define MY_DEBUG 
      
      // Enable and select radio type attached
      #define MY_RADIO_NRF24
      #define SN "RotaryAngleSensor"
      #define SV "1.0"
      #define CHILD_ID
      unsigned long SLEEP_TIME = 100
      
      Rotary Angle Sensor;
      
      MyMessage msg(CHILD_ID, V_VAR1);
      int lastDegrees;
      
      void setup() 
      {
          Serial.begin(9600);
          pinsInit();
          sendSketchInfo(SN, SV);
          present(CHILD_ID, S_CUSTOM);
      }
      
      void loop() 
      {
          int degrees;
          degrees = getDegree();
          Serial.println(degrees);
          if (degrees != lastDegrees) {
              send(msg.set(degrees));
              lastDegrees = degrees;
          }
          
          sleep(SLEEP_TIME);
      }
      
      void pinsInit()
      {
          pinMode(ROTARY_ANGLE_SENSOR, INPUT);
      }
      
      /************************************************************************/
      /*Function: Get the angle between the mark and the starting position    */
      /*Parameter:-void                                                       */
      /*Return:   -int,the range of degrees is 0~300                          */
      int getDegree()
      {
          int sensor_value = analogRead(ROTARY_ANGLE_SENSOR);
          float voltage;
          voltage = (float)sensor_value*ADC_REF/1023;
          float degrees = (voltage*FULL_ANGLE)/VCC;
          return degrees;
      }```
      mfalkviddM Offline
      mfalkviddM Offline
      mfalkvidd
      Mod
      wrote on last edited by
      #2

      Welcome to the MySensors community @vadimbz

      Remove #include <MyConfig.h> and move #include <MySensors.h> to after the lines starting with #define

      1 Reply Last reply
      0
      • vadimbzV Offline
        vadimbzV Offline
        vadimbz
        wrote on last edited by
        #3

        New error. Also is it normal that IDE recognizes nano board, but not its port?

        WARNING: library GroveEncoder claims to run on [arc32] architecture(s) and may be incompatible with your current board which runs on [avr] architecture(s).
        encoderTest:22: error: 'Rotary' does not name a type
        
         Rotary Angle Sensor;
        
         ^
        
        encoderTest:24: error: expected primary-expression before ',' token
        
         MyMessage msg(CHILD_ID, V_VAR1);
        
                               ^
        
        C:\Users\Vadim\Documents\Arduino\encoderTest\encoderTest.ino: In function 'void setup()':
        
        encoderTest:32: error: expected primary-expression before ',' token
        
             present(CHILD_ID, S_CUSTOM);
        
                             ^
        
        exit status 1
        'Rotary' does not name a type
        
        
        mfalkviddM 1 Reply Last reply
        0
        • vadimbzV vadimbz

          New error. Also is it normal that IDE recognizes nano board, but not its port?

          WARNING: library GroveEncoder claims to run on [arc32] architecture(s) and may be incompatible with your current board which runs on [avr] architecture(s).
          encoderTest:22: error: 'Rotary' does not name a type
          
           Rotary Angle Sensor;
          
           ^
          
          encoderTest:24: error: expected primary-expression before ',' token
          
           MyMessage msg(CHILD_ID, V_VAR1);
          
                                 ^
          
          C:\Users\Vadim\Documents\Arduino\encoderTest\encoderTest.ino: In function 'void setup()':
          
          encoderTest:32: error: expected primary-expression before ',' token
          
               present(CHILD_ID, S_CUSTOM);
          
                               ^
          
          exit status 1
          'Rotary' does not name a type
          
          
          mfalkviddM Offline
          mfalkviddM Offline
          mfalkvidd
          Mod
          wrote on last edited by
          #4

          @vadimbz seems like the GroveEncoder library doesn't support avr (which is what Arduino Nano and Pro Mini uses). You'll need to find another library.

          1 Reply Last reply
          0
          • vadimbzV Offline
            vadimbzV Offline
            vadimbz
            wrote on last edited by
            #5

            It was never used in fact, and it wasn't used in a reference sketch either. removing it killed only the top error message.

            mfalkviddM 1 Reply Last reply
            0
            • vadimbzV vadimbz

              It was never used in fact, and it wasn't used in a reference sketch either. removing it killed only the top error message.

              mfalkviddM Offline
              mfalkviddM Offline
              mfalkvidd
              Mod
              wrote on last edited by
              #6

              @vadimbz could you post your current sketch?

              1 Reply Last reply
              0
              • vadimbzV Offline
                vadimbzV Offline
                vadimbz
                wrote on last edited by
                #7

                Rotary... line before mymessage is causing problems. I think I misunderstood its meaning

                #include <SPI.h>
                #define ROTARY_ANGLE_SENSOR A0
                
                #define ADC_REF 5//reference voltage of ADC is 5v.If the Vcc switch on the seeeduino
                                 //board switches to 3V3, the ADC_REF should be 3.3
                #define VCC 5//VCC of the grove interface is normally 5v
                #define FULL_ANGLE 300//full value of the rotary angle is 300 degrees
                // Enable debug prints to serial monitor
                #define MY_DEBUG 
                
                // Enable and select radio type attached
                #define MY_RADIO_NRF24
                #define SN "RotaryAngleSensor"
                #define SV "1.0"
                #define CHILD_ID
                
                #include <MySensors.h>
                
                unsigned long SLEEP_TIME = 100;
                
                Rotary Angle Sensor;
                
                MyMessage msg(CHILD_ID, V_VAR1);
                int lastDegrees;
                
                void setup() 
                {
                    Serial.begin(9600);
                    pinsInit();
                    sendSketchInfo(SN, SV);
                    present(CHILD_ID, S_CUSTOM);
                }
                
                void loop() 
                {
                    int degrees;
                    degrees = getDegree();
                    Serial.println(degrees);
                    if (degrees != lastDegrees) {
                        send(msg.set(degrees));
                        lastDegrees = degrees;
                    }
                    
                    sleep(SLEEP_TIME);
                }
                
                void pinsInit()
                {
                    pinMode(ROTARY_ANGLE_SENSOR, INPUT);
                }
                
                /************************************************************************/
                /*Function: Get the angle between the mark and the starting position    */
                /*Parameter:-void                                                       */
                /*Return:   -int,the range of degrees is 0~300                          */
                int getDegree()
                {
                    int sensor_value = analogRead(ROTARY_ANGLE_SENSOR);
                    float voltage;
                    voltage = (float)sensor_value*ADC_REF/1023;
                    float degrees = (voltage*FULL_ANGLE)/VCC;
                    return degrees;
                }```
                mfalkviddM 1 Reply Last reply
                0
                • vadimbzV vadimbz

                  Rotary... line before mymessage is causing problems. I think I misunderstood its meaning

                  #include <SPI.h>
                  #define ROTARY_ANGLE_SENSOR A0
                  
                  #define ADC_REF 5//reference voltage of ADC is 5v.If the Vcc switch on the seeeduino
                                   //board switches to 3V3, the ADC_REF should be 3.3
                  #define VCC 5//VCC of the grove interface is normally 5v
                  #define FULL_ANGLE 300//full value of the rotary angle is 300 degrees
                  // Enable debug prints to serial monitor
                  #define MY_DEBUG 
                  
                  // Enable and select radio type attached
                  #define MY_RADIO_NRF24
                  #define SN "RotaryAngleSensor"
                  #define SV "1.0"
                  #define CHILD_ID
                  
                  #include <MySensors.h>
                  
                  unsigned long SLEEP_TIME = 100;
                  
                  Rotary Angle Sensor;
                  
                  MyMessage msg(CHILD_ID, V_VAR1);
                  int lastDegrees;
                  
                  void setup() 
                  {
                      Serial.begin(9600);
                      pinsInit();
                      sendSketchInfo(SN, SV);
                      present(CHILD_ID, S_CUSTOM);
                  }
                  
                  void loop() 
                  {
                      int degrees;
                      degrees = getDegree();
                      Serial.println(degrees);
                      if (degrees != lastDegrees) {
                          send(msg.set(degrees));
                          lastDegrees = degrees;
                      }
                      
                      sleep(SLEEP_TIME);
                  }
                  
                  void pinsInit()
                  {
                      pinMode(ROTARY_ANGLE_SENSOR, INPUT);
                  }
                  
                  /************************************************************************/
                  /*Function: Get the angle between the mark and the starting position    */
                  /*Parameter:-void                                                       */
                  /*Return:   -int,the range of degrees is 0~300                          */
                  int getDegree()
                  {
                      int sensor_value = analogRead(ROTARY_ANGLE_SENSOR);
                      float voltage;
                      voltage = (float)sensor_value*ADC_REF/1023;
                      float degrees = (voltage*FULL_ANGLE)/VCC;
                      return degrees;
                  }```
                  mfalkviddM Offline
                  mfalkviddM Offline
                  mfalkvidd
                  Mod
                  wrote on last edited by
                  #8

                  @vadimbz just remove it?

                  1 Reply Last reply
                  0
                  • vadimbzV Offline
                    vadimbzV Offline
                    vadimbz
                    wrote on last edited by
                    #9

                    Cascading errors (

                    It seems that I needencoderTest:21: error: expected primary-expression before ',' token
                    
                     MyMessage msg(CHILD_ID, V_VAR1);
                    
                                           ^
                    
                    C:\Users\Vadim\Documents\Arduino\encoderTest\encoderTest.ino: In function 'void setup()':
                    
                    encoderTest:29: error: expected primary-expression before ',' token
                    
                         present(CHILD_ID, S_CUSTOM);
                    
                                         ^
                    
                    exit status 1
                    expected primary-expression before ',' token
                    
                    
                    
                    mfalkviddM 1 Reply Last reply
                    0
                    • vadimbzV Offline
                      vadimbzV Offline
                      vadimbz
                      wrote on last edited by
                      #10

                      Sketch notations were updated between 2.0 and 2.1.1, weren't they?

                      1 Reply Last reply
                      0
                      • vadimbzV vadimbz

                        Cascading errors (

                        It seems that I needencoderTest:21: error: expected primary-expression before ',' token
                        
                         MyMessage msg(CHILD_ID, V_VAR1);
                        
                                               ^
                        
                        C:\Users\Vadim\Documents\Arduino\encoderTest\encoderTest.ino: In function 'void setup()':
                        
                        encoderTest:29: error: expected primary-expression before ',' token
                        
                             present(CHILD_ID, S_CUSTOM);
                        
                                             ^
                        
                        exit status 1
                        expected primary-expression before ',' token
                        
                        
                        
                        mfalkviddM Offline
                        mfalkviddM Offline
                        mfalkvidd
                        Mod
                        wrote on last edited by
                        #11

                        @vadimbz change

                        #define CHILD_ID
                        

                        to something like

                        #define CHILD_ID 1
                        
                        1 Reply Last reply
                        0
                        • vadimbzV Offline
                          vadimbzV Offline
                          vadimbz
                          wrote on last edited by
                          #12

                          YES, that's it, compiled and flashed... at which point the board started acting out, but I can bounce from here J
                          Thanks!
                          While we're still here, is there a way to connect 3-pin sensors (with one signal pin) to digisparks along with radio? 3-pin radio connection scheme is not an option at the moment unfortunately...
                          ...and I feel like an idiot with a handful of those -)

                          mfalkviddM 1 Reply Last reply
                          0
                          • vadimbzV vadimbz

                            YES, that's it, compiled and flashed... at which point the board started acting out, but I can bounce from here J
                            Thanks!
                            While we're still here, is there a way to connect 3-pin sensors (with one signal pin) to digisparks along with radio? 3-pin radio connection scheme is not an option at the moment unfortunately...
                            ...and I feel like an idiot with a handful of those -)

                            mfalkviddM Offline
                            mfalkviddM Offline
                            mfalkvidd
                            Mod
                            wrote on last edited by mfalkvidd
                            #13

                            @vadimbz could you explain what a 3-pin sensor is? Many of the MySensors examples use sensors with multiple pins so that shouldn't be a problem.

                            1 Reply Last reply
                            0
                            • vadimbzV Offline
                              vadimbzV Offline
                              vadimbz
                              wrote on last edited by vadimbz
                              #14

                              I nwas about talking about digispark (attiny85) board that would be a good match for rolling out mysensors if only had a couple more pins:

                              0_1498271387766_s-l300.jpg

                              I was asking if it's possible to use them after all one way or another, at least for basic sensors with 3 pins (GND, Vcc, Signal) from which we need only Signal.
                              I also mentioned this as known, but unwated solution:
                              https://www.hackster.io/arjun/nrf24l01-with-attiny85-3-pins-74a1f2

                              1 Reply Last reply
                              0

                              Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                              Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                              With your input, this post could be even better 💗

                              Register Login
                              Reply
                              • Reply as topic
                              Log in to reply
                              • Oldest to Newest
                              • Newest to Oldest
                              • Most Votes


                              15

                              Online

                              12.0k

                              Users

                              11.2k

                              Topics

                              113.4k

                              Posts


                              Copyright 2025 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