การรับข้อมูลที่เป็นเลขจำนวนเต็มจากพอร์ทอนุกรม
วิธีที่ 1 ใช้ฟังก์ชั่น Serial.parseInt()
ตัวอย่าง
void setup()
{
Serial.begin(9600);
}
void loop()
{
//waiting for input
while (Serial.available() == 0);
int val = Serial.parseInt(); //read int or parseFloat for.float.
Serial.println(val+100);
}
วิธีนี้มีข้อจำกัดต้องส่งเฉพาะตัวเลขเท่านั้นห้ามส่งระหัส line feed (LF = 0x0A) หรือ carriage return (CR = 0x0D)
(เพราะถ้ามีระหัสตัวใดตัวหนึ่งหรือทั้งสองตัว ฟังก์ชั่นจะถือว่าเป็นเลขอีกจำนวนที่มีค่าเท่ากับ 0) ตัวอย่างโปรแกรมที่ให้มา เมื่อรับตัวเลขได้จะบวกเพิ่มอีก 100 แล้วส่งกลับไปยังพอร์ทอนุกรม ผลการทำงานตามรูปที่ 1 เมื่อไม่มีรหัส CR LF รับตัวเลข 125 ส่งกลับเป็น 225 ส่วนรูปที่ 2 สงแบบมี CR LF เมื่อส่งตัวเลข 23 จะรับได้เลข 23 กับ เลข 0 ทำให้ส่งกลับเป็น 123 กับ 100
รูปที่ 1
รูปที่ 2
วิธีที่ 2 ใช้ฟังก์ชั่น inString.toInt()
ตัวอย่าง
String inString = ""; // string to hold input
void setup() {
Serial.begin(9600);
}
void loop() {
int v;
// Read serial input:
while (Serial.available() > 0) {
int inChar = Serial.read();
if (isDigit(inChar)) {
// convert the incoming byte to a char
// and add it to the string:
inString += (char)inChar;
}
// if you get a newline, print the string,
// then the string's value:
if (inChar == '\n') {
Serial.print("String: ");
Serial.println(inString);
v = inString.toInt();
Serial.print("Value:");
Serial.println(v);
Serial.print("Result: ");
Serial.println(v+300);
// clear the string for new input:
inString = "";
}
}
}
ตัวอย่างนี้เมื่อรับข้อมูลเข้ามาที่ละไบต์ (inChar) จะนำมาต่อเป็น String (inString) และตรวจสอบว่ารหัสที่รับเข้ามาเป็น รหัส CR LF หรือไม่ ถ้าเป็น จะทำการพิมพ์สตริงออกทางพอร์ทอนุกรม แล้วเปลี่ยค่าสตริงเป็นเลขจำนวนเต็ม (inString.toInt()) แล้วส่งออกทางพอร์ทอนุกรม และบวกตัวเลขจำนวนเต็มนั้นขึ้นอีก 300 ล้วส่งออกทางพอร์ทอนุกรม เช่นกัน ตัวอย่างตามรูปที่ 3
รูปที่ 3