ArchAggie
ArchAggie

Reputation: 3

(Lua) How do I increment a variable every time one of three if statements runs?

I'm building a moving and sensing bot in CoppelliaSim for school. CopelliaSim uses Lua for scripting. Basically every time the bot's forward sensors hit something, one of three if statements will run. I want it to count how many times any of these if statements runs, and once that count gets to a certain amount (like 20), I'll run something else, which will do the same thing (find collisions, add to the count, reach an amount, and switch back to the first).

i=0

result=sim.readProximitySensor(noseSensor) -- Read the proximity sensor
-- If we detected something, we set the backward mode:
if (result>0) then backUntilTime=sim.getSimulationTime()+3 
   print("Collision Detected")
   i=i+1
   print(i)
end 

result=sim.readProximitySensor(noseSensor0) -- Read the proximity sensor
-- If we detected something, we set the backward mode:
if (result>0) then backUntilTime=sim.getSimulationTime()+3 
   print("Collision Detected") 
   i=i+1
   print(i)
end 

result=sim.readProximitySensor(noseSensor1) -- Read the proximity sensor
-- If we detected something, we set the backward mode:
if (result>0) then backUntilTime=sim.getSimulationTime()+3 
   print("Collision Detected") 
   i=i+1
   print(i)
end 

Above is the start of a function and one of the three If statements. I'm printing just to see if it actually increments. It is printing, but it is not incrementing (just 1 over and over). This bot has 3 sensors on it (an if statement for each sensor) and it adds 1 to i for the first collision and ignores the rest, even if it's from the same sensor. I feel like my problem is just some simple syntax issue with Lua that I don't know and can't find how to properly fix.

I'm happy to provide more code if this little snippet was not sufficient to answer this question.

Upvotes: 0

Views: 2077

Answers (1)

Ali Deym
Ali Deym

Reputation: 142

Assuming that you have a looping function such as sysCall_actuation which is being executed per simulation step. As Joseph Sible-Reinstate Monica has already stated, you are setting your variable i back to zero every time a simulation step is executed. To achieve your goal, you would have to set your variable to 0 outside your function. There are two appropriate approaches to achieve that:

  1. Define the variable outside any function, in the beginning of your file (or before you define any function that uses your variable e.g right before the definition of sysCall_actuation).
-- Beginning of the file.
local i = 0

..

function sysCall_actuation()
    ..
    i = i + 1
    ..
end
  1. Define your variable in sysCall_init function, which is the appropriate approach in CoppeliaSim.
    function sysCall_init()
        i = 0
        ..
    end

Finally, you can use your variable in your sysCall_actuation function with basic comparison operations:

function sysCall_actuation()
    ..
    if i > 20 then
        i = 0 -- Reset 'i' so this function will not be running every step again and again.
        -- Do something here.
    ..
end

As a side note, practice using local variables whenever you can, to keep the memory clean and avoid having ambiguous variables.

Upvotes: 1

Related Questions