Line Following Robot (Arduino IDE)

Go to https://bitbot.l33t.uk/arduino-ide/ultrasonic-example-arduino-ide for instructions on how to configure Arduino IDE for use with the BBC Micro:bit if you haven’t already. This code builds on the code found at https://bitbot.l33t.uk/arduino-ide/porting-bitbot-code-from-micropython-to-c

The ported code is below. It’s not a complete port I have added a clause when the robot sees 2 black lines it will go backwards. The method below was added to the ported code found here (under a new tab). Create a new tab and name it _01_LineFollower, select the new tab and paste the below code into the IDE.

[pastacode lang=”c” manual=”%2F*%0A%20*%20Simple%20line%20following%20algorithm%20for%20the%204Tronix%20Bit%3ABot%0A%20*%20Author%20David%20Bradshaw%202018%0A%20*%2F%0A%0Avoid%20followLine()%0A%7B%0A%20%20%20%20boolean%20isLeftLine%20%3D%20detectLine(0)%3B%20%20%2F%2FLeft%20line%20detector%0A%20%20%20%20boolean%20isRightLine%20%3D%20detectLine(1)%3B%20%2F%2FRight%20line%20detector%0A%0A%20%20%20%20if(isLeftLine%20%3D%3D%20true%20%26%26%20isRightLine%20%3D%3D%20true)%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%2F%2Fboth%20sensors%20can%20see%20a%20line%0A%20%20%20%20%20%20%20%20setColourRight(32%2C0%2C0)%3B%0A%20%20%20%20%20%20%20%20setColourLeft(32%2C0%2C0)%3B%0A%20%20%20%20%20%20%20%20while%20(isLeftLine%20%3D%3D%20true%20%26%26%20isRightLine%20%3D%3D%20true)%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20isLeftLine%20%3D%20detectLine(0)%3B%20%20%2F%2FLeft%20line%20detector%0A%20%20%20%20%20%20%20%20%20%20%20%20isRightLine%20%3D%20detectLine(1)%3B%20%2F%2FRight%20line%20detector%0A%20%20%20%20%20%20%20%20%20%20%20%20backwards(125)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20delay(350)%3B%20%2F%2Fcarry%20on%20going%20backwards%20for%20350mS%0A%20%20%20%20%20%20%20%20forwards(0)%3B%20%2F%2FStop%20bitbot%0A%20%20%20%20%7D%20%20%20%0A%20%20%20%20if%20(isLeftLine%20%3D%3D%20true%20%26%26%20isRightLine%20%3D%3D%20false)%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%2F%2FLine%20on%20left%20hand%20side%0A%20%20%20%20%20%20%20%20setColourRight(0%2C32%2C0)%3B%0A%20%20%20%20%20%20%20%20setColourLeft(32%2C0%2C0)%3B%0A%20%20%20%20%20%20%20%20while%20(isLeftLine%20%3D%3D%20true%20%26%26%20isRightLine%20%3D%3D%20false)%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20isLeftLine%20%3D%20detectLine(0)%3B%20%20%2F%2FLeft%20line%20detector%0A%20%20%20%20%20%20%20%20%20%20%20%20isRightLine%20%3D%20detectLine(1)%3B%20%2F%2FRight%20line%20detector%0A%20%20%20%20%20%20%20%20%20%20%20%20left(50)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20delay(50)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20forwards(0)%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%20(isLeftLine%20%3D%3D%20false%20%26%26%20isRightLine%20%3D%3D%20true)%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%2F%2Fline%20on%20right%20hand%20side%0A%20%20%20%20%20%20%20%20setColourRight(32%2C0%2C0)%3B%0A%20%20%20%20%20%20%20%20setColourLeft(0%2C32%2C0)%3B%0A%20%20%20%20%20%20%20%20while%20(isLeftLine%20%3D%3D%20false%20%26%26%20isRightLine%20%3D%3D%20true)%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20isLeftLine%20%3D%20detectLine(0)%3B%20%20%2F%2FLeft%20line%20detector%0A%20%20%20%20%20%20%20%20%20%20%20%20isRightLine%20%3D%20detectLine(1)%3B%20%2F%2FRight%20line%20detector%0A%20%20%20%20%20%20%20%20%20%20%20%20right(50)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20delay(50)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20forwards(0)%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%20if%20(isLeftLine%20%3D%3D%20false%20%26%26%20isRightLine%20%3D%3D%20false)%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%2F%2Fno%20line%20detected%0A%20%20%20%20%20%20%20%20setColourRight(0%2C32%2C0)%3B%0A%20%20%20%20%20%20%20%20setColourLeft(0%2C32%2C0)%3B%0A%20%20%20%20%20%20%20%20forwards(50)%3B%0A%20%20%20%20%7D%0A%7D” message=”Simple Line Follower” highlight=”” provider=”manual”/]

I then added the following line in the void loop() method in the tab named _00_programLoop;

[pastacode lang=”c” manual=”followLine()%3B” message=”Call the above Function” highlight=”” provider=”manual”/]

Now were using Arduino IDE we have freed up a lot of memory we can write a more complicated line following algorithm. The above algorithm is as simple as it gets for this stuff, in the near future I will add a much more complicated line follower algorithm.

You can download the full code from the resources section or by clicking Bitbot_Lib_LF.