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. Troubleshooting
  3. Dynamic change of variable name

Dynamic change of variable name

Scheduled Pinned Locked Moved Troubleshooting
14 Posts 7 Posters 587 Views 6 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.
  • alowhumA Offline
    alowhumA Offline
    alowhum
    Plugin Developer
    wrote on last edited by
    #2

    Not to my knowledge.

    Generally you'd create a function that takes an input value, and change that?

    1 Reply Last reply
    0
    • G Greg_2502

      Hi, I can't find a solution to my problem.
      I'd like to change the name in a function in a for loop. If it is possible?

      for (i=1; i<5; i++){
      int value[i] = debouncer[i].read();
      }
      
      YveauxY Offline
      YveauxY Offline
      Yveaux
      Mod
      wrote on last edited by
      #3

      @greg_2502 do you mean to fill an array?
      Something like

      int value[5];
      for (i=1; i<5; i++){
        value[i] = debouncer[i].read();
      }
      

      http://yveaux.blogspot.nl

      skywatchS 1 Reply Last reply
      0
      • YveauxY Yveaux

        @greg_2502 do you mean to fill an array?
        Something like

        int value[5];
        for (i=1; i<5; i++){
          value[i] = debouncer[i].read();
        }
        
        skywatchS Offline
        skywatchS Offline
        skywatch
        wrote on last edited by
        #4

        @yveaux Shouldn't that be int value[4]; ? ;)

        mfalkviddM 1 Reply Last reply
        0
        • skywatchS skywatch

          @yveaux Shouldn't that be int value[4]; ? ;)

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

          @skywatch not if the 0th position is skipped

          skywatchS 1 Reply Last reply
          1
          • mfalkviddM mfalkvidd

            @skywatch not if the 0th position is skipped

            skywatchS Offline
            skywatchS Offline
            skywatch
            wrote on last edited by
            #6

            @mfalkvidd Hehehe...... ;)

            But i starts at 1 yes? and then increments in interger units whilst it is less than 5. So that should give 1,2,3,4. Or have I been under a misunderstanding?

            mfalkviddM 1 Reply Last reply
            0
            • skywatchS skywatch

              @mfalkvidd Hehehe...... ;)

              But i starts at 1 yes? and then increments in interger units whilst it is less than 5. So that should give 1,2,3,4. Or have I been under a misunderstanding?

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

              @skywatch arrays indexes in c/c++ always start at 0.
              int myarray[5] would have positions 0 thorugh 4. Position 5 would be outside the array. In the code above, position 0 is never used.

              So either make the array 1 element larger than actually needed (with position 0 unused), or let i start at 0:

              int value[4];
              for (i=0; i<4; i++){
                value[i] = debouncer[i].read();
              }
              
              Sergio RiusS skywatchS 2 Replies Last reply
              0
              • mfalkviddM mfalkvidd

                @skywatch arrays indexes in c/c++ always start at 0.
                int myarray[5] would have positions 0 thorugh 4. Position 5 would be outside the array. In the code above, position 0 is never used.

                So either make the array 1 element larger than actually needed (with position 0 unused), or let i start at 0:

                int value[4];
                for (i=0; i<4; i++){
                  value[i] = debouncer[i].read();
                }
                
                Sergio RiusS Offline
                Sergio RiusS Offline
                Sergio Rius
                wrote on last edited by Sergio Rius
                #8

                @mfalkvidd said in Dynamic change of variable name:

                int myarray[5] would have positions 0 thorugh 4. Position 5 would be outside the array. In the code above, position 0 is never used.

                So either make the array 1 element larger than actually needed (with position 0 unused), or let i start at 0:

                In fact, I interpreted it more like @skywatch
                Notice the <=

                 int value[5];
                 for (i=1; i<=5; i++){
                   value[i] = debouncer[i].read();
                 }
                

                I just made something like this for indexing sensors in a node, where idx 0 was the node itself, and thus already filled before the loop.

                YveauxY 1 Reply Last reply
                0
                • Sergio RiusS Sergio Rius

                  @mfalkvidd said in Dynamic change of variable name:

                  int myarray[5] would have positions 0 thorugh 4. Position 5 would be outside the array. In the code above, position 0 is never used.

                  So either make the array 1 element larger than actually needed (with position 0 unused), or let i start at 0:

                  In fact, I interpreted it more like @skywatch
                  Notice the <=

                   int value[5];
                   for (i=1; i<=5; i++){
                     value[i] = debouncer[i].read();
                   }
                  

                  I just made something like this for indexing sensors in a node, where idx 0 was the node itself, and thus already filled before the loop.

                  YveauxY Offline
                  YveauxY Offline
                  Yveaux
                  Mod
                  wrote on last edited by
                  #9

                  @sergio-rius said in Dynamic change of variable name:

                  Notice the <=

                  That will cause a buffer overrun at the end again...

                  http://yveaux.blogspot.nl

                  skywatchS Sergio RiusS 2 Replies Last reply
                  2
                  • YveauxY Yveaux

                    @sergio-rius said in Dynamic change of variable name:

                    Notice the <=

                    That will cause a buffer overrun at the end again...

                    skywatchS Offline
                    skywatchS Offline
                    skywatch
                    wrote on last edited by
                    #10

                    @yveaux Can you please explain why as I want to learn why it won't run the code the way I expected it to! -

                    1 Reply Last reply
                    0
                    • mfalkviddM mfalkvidd

                      @skywatch arrays indexes in c/c++ always start at 0.
                      int myarray[5] would have positions 0 thorugh 4. Position 5 would be outside the array. In the code above, position 0 is never used.

                      So either make the array 1 element larger than actually needed (with position 0 unused), or let i start at 0:

                      int value[4];
                      for (i=0; i<4; i++){
                        value[i] = debouncer[i].read();
                      }
                      
                      skywatchS Offline
                      skywatchS Offline
                      skywatch
                      wrote on last edited by skywatch
                      #11

                      @mfalkvidd That won't get '0 through 4' as it will never produce i=4 in this case. I would expect it to need to be

                      int value[4];
                      for (i=0; i<=4; i++){
                        value[i] = debouncer[i].read();
                      }
                      

                      in order to get 0 through 4 (note the extra '=' in line 2 above to make this work. Or am I still misunderstanding something? ???

                      1 Reply Last reply
                      0
                      • YveauxY Yveaux

                        @sergio-rius said in Dynamic change of variable name:

                        Notice the <=

                        That will cause a buffer overrun at the end again...

                        Sergio RiusS Offline
                        Sergio RiusS Offline
                        Sergio Rius
                        wrote on last edited by
                        #12

                        It's as easy as trying it.

                        @yveaux said in Dynamic change of variable name:

                        That will cause a buffer overrun at the end again...

                        Really? I can't see why a loop trough 1, 2, 3, 4 could overflow a 5 elements array.

                        In my code, I manually add 0 (the device itself, for vcc) before entering the loop. So in this case, still 5 elements.

                        badmannenB 1 Reply Last reply
                        0
                        • Sergio RiusS Sergio Rius

                          It's as easy as trying it.

                          @yveaux said in Dynamic change of variable name:

                          That will cause a buffer overrun at the end again...

                          Really? I can't see why a loop trough 1, 2, 3, 4 could overflow a 5 elements array.

                          In my code, I manually add 0 (the device itself, for vcc) before entering the loop. So in this case, still 5 elements.

                          badmannenB Offline
                          badmannenB Offline
                          badmannen
                          wrote on last edited by
                          #13

                          @sergio-rius
                          the loop will run even at "5".
                          that is the problem. if you write "i<5" , then it would be ok

                          rPi 3 - UNO R3 - Mini - Nano - custom

                          1 Reply Last reply
                          0
                          • Sergio RiusS Offline
                            Sergio RiusS Offline
                            Sergio Rius
                            wrote on last edited by
                            #14

                            @badmannen @Yveaux You're absolutely right. I was lazy, only changed a symbol and gave a bad advice. My response should be changed to <=4.

                            Still I don't understand what the original question was.

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


                            18

                            Online

                            11.7k

                            Users

                            11.2k

                            Topics

                            113.1k

                            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