ประกาศ array มา 100 ตัว
เช่น int val[100];
กำหนดเงื่อนไขในการป้อนค่า เช่น ให้อ่านค่ามาทุก 0.5 วินาที แล้วเก็บไว้ในตัวแปร array
ตัวอย่างโคดดังนี้
for(int i=0;i<100;i++){
val[i] = analogRead(vr);
delay(500);
}
เมื่อจบ loop นี้ ก็จะได้ค่า 100 ตัว เก็บไว้ในตัวแปร array แล้วครับ
มีอีก หนึ่งคำถามคับ
การใช้คำสั่ง if () มากเกินไปมีผลต่อการเคลื่อนที่ช้าลงของ เซอร์โวมอเตอร์ไหมคับ
//พอดีผมทำแขนกลตัวเล็กๆ 3 แกนให้เซอร์โวมอเตอร์เคลื่อนที่ไปพร้อมกันโดยใช้การ interrupt และตรวจสอบเงื่อนไขด้วย if() ผลที่ได้คือเคลื่อนที่ smooth ได้ตามต้องการแต่ตัวเซอร์โวมอเตอร์เคลื่อนที่ช้าทั้งที่ไม่ได้ ดีเลย์
ถ้ากำลังทำคำสั่งก่อนหน้าอยู่ แล้วยังไม่ถึงเงื่อนไข if ก็จะทำให้ไม่ได้เช็คเงื่อนไข
เช่นตัวอย่างนี้
if(digitalRead(1)==1){
Serial.println("Click");
}
delay(5000);
จะเห็นว่า ถ้าทำคำสั่ง delay() อยู่ซึ่งใช้เวลา 5 วินาที
ระหว่างนี้ ถึงจะกดปุ่มเข้ามา ก็ไม่มีข้อความพิมพ์คำว่า Click ทำให้ดูเหมือนโปรแกรมทำงานไม่ถูกต้อง
วิธีแก้คือใช้คำสั่ง interrupt ซึ่งจะเป็นการขัดจังหวะ ในขณะที่ delay 5 วินาที แต่ถ้ามีคำสั่ง interrupt ก็จะไปทำในนั้นก่อนทันที
แต่ขา interrupt มีจำกัด และคำสั่งใน interrupt ไม่ควรยาวมาก
อีกวิธีที่แนะนำคือ ให้ทำงานเป็นแบบหลายงานพร้อมกัน ใช้ Timing ในการทำงาน มีไลบารีหลายตัว ลองดูตัวนี้ครับ
https://blog.protoneer.co.nz/arduino-task-scheduler/