อยากสอบถามว่าสามารถ เพิ่มความเร็วในการส่งข้อมูลขึ้นจอ LCD ได้ไหม
พอดีว่าเอาไปใช้นับเหรียญให้เหรียญตัดผ่านช่องเซนเซอร์ แต่ปรากฏว่า เซนเซอร์นับได้บ้างไม่ได้บ้าง พอเหรียญตัดผ่านบางทีก็นับให้ บางทีก็ไม่นับ เลยจะมาสอบถามว่ามันสารถตั้งเซ็นเซอร์ให้มันนับได้ทั้งหมดโดยไม่หลุดหรือไม่ข้าม ได้ไหมครับ
การทำงานบ้างไม่ทำงานบ้าง สาเหตุส่วนใหญ่มาจากโคดโปรแกรมกำลังทำงานส่วนอื่น ก่อนจะมาถึงเช็คเหรียญครับ
เช่นโคดนี้
void loop(){
digitalWrite(led,1);
delay(3000); // เมื่อหยอดเหรียญมาในขณะที่หน่วงเวลา จะไม่เช็คเหรียญ
CheckCoin(); // คำสั่งเช็คเหรียญจะยังไม่ถูกประมวลผล จนกว่าคำสั่ง delay จะครบ 3 นาที
}
วิธีแก้
ใช้คำสั่ง interrupt ในการอ่านค่า โดย interrupt จะขัดจังหวะมาทำงานทันที โดยไม่ต้องรอคำสั่งอื่น เมื่อทำเสร็จแล้ว ก็จะกลับไปทำคำสั่งที่ค้างไว้
มีวิธีการใช้งาน interrupt โดยละเอียด ในคอร์ส Arduino Starter ที่หน้าเว็บครับ
โค้ดจะมีประมาณนี้ พอจะมีแนะนำคร่าวๆได้บ้างไหมครับ
if (digitalRead(Sensor2)==HIGH) { // ถ้าขาที่ต่อกับ D0 มีสถานะเป็น HIGH
while(digitalRead(Sensor2)==HIGH); // ให้รอจนกว่าขาที่ต่อกับ D0 เป็น LOW
a++; // เพิ่มค่าในตัวแปร i ขึ้น 1 จำนวน
}
lcd.setCursor(0,0);
lcd.print("0.25= ");
lcd.setCursor(6,0);
lcd.print(a);
if ( a==2 )
digitalWrite(buzzer1 , HIGH); // สร้างเสียงเตือน
else if ( a==5 )
digitalWrite(buzzer1 , LOW); //ปิดเสียง
โคดนี้ไม่มีการใช้งาน interrupt ทำให้ผลลัพธ์ทำงานได้บางครั้ง
การแก้ไขใช้ interrupt ตามที่ได้แนะนำไปแล้วครับ