const int ledPin = 12;
void setup(){
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop(){
if (Serial.available()) {
light(Serial.read() – '0');
}
delay(500);
}
void light(int n){
for (int i = 0; i < n; i++) {
digitalWrite(ledPin, HIGH);
delay(100);
digitalWrite(ledPin, LOW);
delay(100);
}
}
by Oscar Liang
awesome little piece of code which taught me how to setup connection by serial. yet one part I don't understand fully. Why does this line:
light(Serial.read() – '0');
make the code run once, and this line an infinite times.
light(Serial.read());
has this something to do with binary? I don't get why subtracting the string 0 would run the code once.
Thanks in Advance!
1 Answer 1
Serial.read() -'0'
Such code is often used to convert a character to a digit (e.g. int).
Like if the character is '2', than '2' - '0' = ascii 50 - ascii 48 = 2
However, if you use
Serial.read()
the value will be 50 instead of 2.... maybe looping 50 times (or 48 to 58, for values 0 to 9) will give you the impression it runs infinite?
-
oh wow Thank you, so that is just a way to convert to a int. Never knew that!Anton van der Wel– Anton van der Wel2017年06月15日 14:31:34 +00:00Commented Jun 15, 2017 at 14:31
-
Yes, it is a way to convert one digit (so a character from '0' to '9') to an integer. Nb if this answer is good, consider upvoting and accepting it as your answer.Michel Keijzers– Michel Keijzers2017年06月15日 15:07:07 +00:00Commented Jun 15, 2017 at 15:07
-
cant upvote yet. I don't have enough rep, but you will get it in the end :)Anton van der Wel– Anton van der Wel2017年06月15日 20:44:21 +00:00Commented Jun 15, 2017 at 20:44
-
Thanks for accepting. No problem (geen probleem). Enjoy programming!Michel Keijzers– Michel Keijzers2017年06月15日 22:36:37 +00:00Commented Jun 15, 2017 at 22:36