I am really new to using Arduinos, less than a week in fact, so my query is rather basic. Can someone explain what the following command is likely to do:
then "shifting" it right i bits. So if i was 4, 1<<i would be
00010000
See, the 1 is now 4 digits more to the left. This is exactly the same as saying
i * 16 // 16 is 2^4
The & is the bitwise AND. This means that it cycles through each bit in each byte, and if they are the same, it makes the corresponding resulting bit 1. Example:
01011001 &
11011101 =
01011001
Since 1<<i will be all zeros except for one digit, the answer will either have all 0's if that bit wasn't 1, or one 1 if the bit was one. Lucky for us, C interprets any value that's not 0 as "true" in an if-statement.
So, all in all, that define checks whether or not the "i"th bit of "bits" is 1.
Ah! I think I get it now.
In my hopeless confusion, I was thinking this #define was defining a variable called BIT_IS_SET. But, from what you say, this is almost a function right? Which returns true or false depending on the result of bitwise ANDing?
Just one more question, can I do something like 6<<i so that the binary number for 6 (0000011) becomes 00000110 (i.e. 12)?
#define IRpin_PIN PIND
#define IRpin 2
// while (digitalRead(IRpin)) { // this is too slow!
while (IRpin_PIN & (1 << IRpin)) {
// pin is still HIGH
// count off another few microseconds
highpulse++;