Maybe something was changed from a macro to a function or the other way around. The round() macro is a serious problem: https://github.com/arduino/ArduinoCore-API/issues/76
The "round()" function is a standard 'C' function for floating point. Arduino has thrown the standard away in my opinion. The standard is sacred, I think that Arduino has made a very big mistake.
Every round() in your file is after calling the map() function. The round() does nothing, because the map() function already return a whole number, because it returns a 'long'. You can remove all those round() calls.
Thank you! It worked!
Yes, I was using an Arduino Uno.
Although your solution doesn't explain the error (update: post #4 did), I am not using round(); anymore so it doesn't matter.
As long as "x" is a number or a variable, then it is okay.
But if "x" is a function, then that function gets called multiple times and that function should be called just once. The function itself has also arguments.
The compiler tries to do the macro, but it gets tangled up.[EDIT] No, it was a mismatch of brackets as oqibidipo writes below here.
I think the compiler could just say: "NeoPixel_Hue_Rotater:559:0: error: This is nuts".
Macro's can be dangerous. A function is often better but a function has fixed variable types for the parameters. In C++ there is a flexible "template" which is not dangerous.
The round() macro assumes that its parameter is a number or a variable. But then it is used in a different way. Luckily the compiler gave an error message. If the compiler would accept a wrong-used macro, then someone would spend a lot of time to find the bug.
A typical dangerous scenario is calling a macro from another macro.
Also, a "#define" can be undefined or redefined anywhere in the code and the compiler accepts it. So also a macro can be changed. That's just nasty.
Thank you oqibidipo I totally missed that. I got triggered by the round() macro and didn't look further, that is a typical beginner's mistake on my side.