I have been working with arduino for 3 years and program it with arduino IDE, but back than i did not know anything about c++ or programming, and i learned from my experience how to program arduino but not in a professional way or even close.
so from where i can learn advanced programming arduino ?(book or tutorials or sites or...)
boolean (8 bit) - simple logical true/false, Arduino does not use single bits for bool
byte (8 bit) - unsigned number from 0-255
char (8 bit) - signed number from -128 to 127. The compiler will attempt to interpret this data type as a character in some circumstances, which may yield unexpected results
unsigned char (8 bit) - same as 'byte'; if this is what you're after, you should use 'byte' instead, for reasons of clarity
word (16 bit) - unsigned number from 0-65535
unsigned int (16 bit)- the same as 'word'. Use 'word' instead for clarity and brevity
int (16 bit) - signed number from -32768 to 32767. This is most commonly what you see used for general purpose variables in Arduino example code provided with the IDE
unsigned long (32 bit) - unsigned number from 0-4,294,967,295. The most common usage of this is to store the result of the millis() function, which returns the number of milliseconds the current code has been running
long (32 bit) - signed number from -2,147,483,648 to 2,147,483,647
float (32 bit) - signed number from -3.4028235E38 to 3.4028235E38. Floating point on the Arduino is not native; the compiler has to jump through hoops to make it work. If you can avoid it, you should.
You should always select the 'data type' best suited for your variables.
ex:
your variable does not change and it defines a pin on the Arduino. const byte limitSwitchPin = 34;
since an analog variable can be 0 to 1023, a byte will not do, you can select 'int'. ex: int temperature;
if your variable needs to be within -64 to +64 a 'char' will do nicely. ex: char joystick;
if your variable is used for ASCII then you need type 'char', ex: char myText[] = {"Raspberry Pie Smells"};
if your variable enables some code then boolean can be used. ex: boolean enableFlag = false;
millis() returns the time in ms since rebooting, ex: unsigned long currentTime = millis();
etc.