Building a Line Following Robot: Issues & Solutions

Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
2 replies · 2K views
Lancelot59
Messages
640
Reaction score
1
I'm working on a robot for my final project in class. It's your basic line following deal. It has 5 sensors that face the floor on the front and it just follows a track made of black tape.

I'm just going to use this one thread for all my issues.

Current issue: I don't get a certain type of define.

When I do something like this:

Code:
#define setLED5(a) PORTDbits.RD4 = ~a;

To my knowledge I create a "function" that takes a variable a that sets the port to the inverse of that variable. Is this correct? Also is it possible to define more complex functions? Such as creating a simple calculator function?
 
Physics news on Phys.org
What language is it?
Yes, it assigns the value of ~a to PORTDbits.RD4.
More exactly wherever the macro is used, it creates code to do the above.
It is a good idea to always use parentheses with macro argument, like ~(a), to avoid hard-to chase down bugs due to operator precedence.
Be always aware that #define is evaluated in preprocessor time.
You can certainly define rather complex macros, but you do not want to do so without a very good reason. With preprocessor macros it is easy to do mistakes, and hard to nail down bugs.
 
It's written in C. I'll add in the brackets. Thanks.