[TH] Arduino : repetition

การเขียนโปรแกรมเป็นการสั่งงานให้หน่วยประมวลผลกระทำตามคำสั่งที่ได้รับ โดย ณ​ เวลาหนึ่งจะมีคำสั่งเข้าประมวลผล 1 ชุด (กรณีที่ไม่ใช่การประมวลผลแบบคู่ขนาน) และเมื่อคำสั่งประมวลผลเสร็จสิ้นจะบันทึกผลการดำเนินคำสั่งเก็บในเรจิสเตอร์สถานะการทำงานแล้วเตรียมประมวลผคำสั่งถัดไป ทำให้การทำงานเป็นการทำทีละคำสั่งจากคำสั่งแรกไปยังคำสั่งถัด ๆ ไป และผู้เขียนโปรแกรมสามารถวางการทำงานให้กระทำตามเงื่อนไขเพื่อแยกการประมวลผล เช่น เมื่อเงื่อนไขใดเป็นจริงให้กระทำ หรือเงินไขใดไม่เป็นจริงไม่ต้องกระทำหรือกระทำสิ่งใด เป็นต้น และสุดท้ายการทำงานของโปรแกรมสามารถให้ทำซ้ำได้โดยอาศัยเงื่อนไขของการกระทำซ้ำ ด้วยเหตุนี้ หลักการเขียนโปรแกรมเบื้องต้นจึงประกอบไปด้วยการทำงาน 3 ลักษณะ คือ

  • กระทำครั้งละคำสั่งจากบนลงล่าง
  • สามารถเพิ่มเติมให้เกิดเงื่อนไขของการประมวลผลคำสั่ง
  • สามารถให้เกิดการทำซ้ำคำสั่งที่ต้องการ

การทำซ้ำ

หลักของการทำซ้ำของภาษา C++ หรือภาษาไพธอนใช้การตรวจสอบเงื่อนไขเพื่อใช้ตัดสินใจการทำซ้ำในกลุ่มของคำสั่งที่กำหนดไว้ ซึ่งพวกเราเลือกใช้คำสั่ง while และ do/while มาเป็นคำสั่งที่มาอธิบายในกลุ่มของการทำซ้ำ เนื่องจากเป็นรูปแบบพื้นฐานของการเขียนโปรแกรมในภาษาต่าง ๆ

การทำซ้ำเมื่อเป็นจริง

กรณีที่ต้องการทำซ้ำในส่วนของคำสั่งไปเรื่อย ๆ ตราบที่เงื่อนไขของการทำงานยังคงเป็นจริง ต้องใช้รูปแบบคำสั่ง while ดังนี้

while ( เงื่อนไข ) {
สิ่งที่ทำซ้ำเมื่อเงื่อนไขเป็นจริง
}

ตัวอย่างการเขียนโปรแกรมเพื่อวนรอบเพื่อหาผลรวมของเลขจำนวนเต็มในช่วง 1 ถึง 100 เขียนได้ดังนี้

// repetition: demo while
void setup() {
  word sum=0;
  word counter=0;
  word endNumber = 100;
  Serial.begin(115200);
  Serial.println("---------- Begin of program ------------");
  Serial.print("Before: sum = ");
  Serial.println(sum);
  while (counter <= endNumber) {
    sum += counter;
    counter += 1;
  }
  Serial.print("After: sum = ");
  Serial.println(sum);
  Serial.println("----------  End of Program  ------------");
}

void loop() {
}

ผลของการทำงานเป็นดังนี้

การทำซ้ำโดยทำก่อน  1 ครั้ง

กรณีที่ต้องการทำงานก่อนหนึ่งรอบแล้วค่อยตรวจสอบเงื่อนไขของการทำซ้ำ ถ้าเงื่อนไขเป็นจริงจะกลับไปทำคำสั่งที่ทำมาก่อนหน้านี้อีกครั้ง มีรูปแบบของคำสั่งดังนี้

do {
สิ่งที่ทำซ้ำ
} while (เงื่อนไข);

ตัวอย่างการเขียนโปรแกรมเพื่อวนรอบเพื่อหาผลรวมของเลขจำนวนเต็มในช่วง 1 ถึง 100 ด้วย do/while เป็นดังนี้

// repetition: demo do/while
void setup() {
  word sum=0;
  word counter=0;
  word endNumber = 100;
  Serial.begin(115200);
  Serial.println("---------- Begin of program ------------");
  Serial.print("Before: sum = ");
  Serial.println(sum);
  do {
  
    sum += counter;
    counter += 1;
  } while (counter <= endNumber);
  Serial.print("After: sum = ");
  Serial.println(sum);
  Serial.println("----------  End of Program  ------------");
}

void loop() {
}

สรุป

จากบทความนี้ ผู้อ่านได้รู้จักรูปแบบของคำสั่งทำซ้ำด้วย while และ do/while ซึ่งเป็นรูปแบบการสั่งงานแบบสุดท้ายของการเขียนโปรแกรมแบบโครงสร้าง คือ ทำงานเรียงตามลำดับจากก่อนไปหลัง สามารถให้เลือกกระทำได้ และสามารถทำซ้ำได้ ซึ่งเป็นโครงสร้างการเขียนโปรแกรมแบบพื้นฐานที่มีแนวคิดเหมือนกันกับภาษาอื่น ๆ ทางทีมงานจึงหวังว่าคงเป็นประโยชน์ต่อการนำไปประยุกต์ใช้หรืออ่านโค้ดโปรแกรมตัวอย่างต่าง ๆ ได้ดึขึ้นต่อไปในอนาคต สุดท้ายขอให้สนุกกับการเขียนโปรแกรมครับ และบทความคำสั่งพื้นฐานของภาษา C++ ที่ใช้กันบ่อย ๆ ใน Arduino ก็มีประมาณนี้ครับ

(C) 2020-2021, โดย อ.ดนัย เจษฎาฐิติกุล/อ.จารุต บุศราทิจ
ปรับปรุงเมื่อ 2021-06-08, 2021-09-25