Building a Line Following Robot: Issues & Solutions

AI Thread Summary
The discussion focuses on building a line-following robot for a class project, utilizing five sensors to track a black tape path. The user encounters issues with defining macros in C, specifically questioning the syntax and functionality of a macro intended to invert a variable for LED control. Responses clarify that the macro correctly assigns the inverted value and emphasize the importance of using parentheses to prevent bugs related to operator precedence. Additionally, while more complex macros can be defined, caution is advised due to the potential for errors and debugging difficulties. The conversation highlights the complexities of using preprocessor macros in C programming.
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.
 
Back
Top