พี่ครับ ผมอยากสอบถามว่า ถ้าผมจะวาง water flow sensor เพิ่มอีกเป็น 4 จุด ผมต้องเพิ่มโค๊ดยังไงหรอครับ ผมลองแล้วแต่ก็ไม่ได้ อันนี้โค๊ดผมครับ
volatile int sum;
int Calc;
int hallsensor = 2;
//int hallsensor2 = 2;
int flowsensor;
int led1 = 11;
int led2 = 10;
//int led3 = 9;
//int led4 = 5;
int buzzer = 12;
void rpm ()
{
sum++;
}
void setup()
{
pinMode(hallsensor, INPUT);
//pinMode(hallsensor2, INPUT);
Serial.begin(9600);
attachInterrupt(0, rpm, RISING);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
//pinMode(led3, OUTPUT);
pinMode(buzzer,OUTPUT);
}
void Alarm(){
tone(buzzer, 300,1000);
}
void loop ()
{
sum = 0;
sei();
delay (1000);
cli();
flowsensor = (sum * 60 / 7.5);
Serial.print (flowsensor, DEC);
Serial.print (" L/hour\r\n");
Calc = digitalRead(flowsensor);
if (flowsensor == 0){
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
}else if (flowsensor >=50){
digitalWrite(led2, HIGH);
digitalWrite(led1, LOW);
}else if (flowsensor <50){
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
Alarm();
}else{
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
}
}
ลองทำจุดเดียวก่อนครับ จากนั้นก็เพิ่มดัดแปลงโคดเป็น 4 จุด
หลักการทำงานของ water flow sensor คือจะให้เอาต์พุตออกมาเป็นดิจิตอล แล้วเขียนโปรแกรมนับรอบ ตามตัวอย่างโคด ใช้การเช็คแบบ interrupt เวลาต่อต้องใช้ขาที่เป็น interrupt ด้วย
งานบางอย่างถ้าเรามานั่งเช็คตลอดก็จะทำให้เสียเวลาหรือทำงานอื่นได้ช้า เช่น
เราก็ต้องกวาดบ้าน แล้ววิ่งไปเช็คดูว่า มีใครมาหรือเปล่า อยู่ตลอดเวลา แต่ถ้าเรามีออดติดไว้หน้าบ้าน เราก็กวาดบ้านโดยไม่ต้องไปดู พอได้ยินเสียงออดมา ขัดจังหวะ ก็ค่อยออกไปเปิด เราเรียกการเกิดเหตุการณ์เสียงออดว่า การขัดจังหวะ หรือ Interrupt
Interrupt คือการสร้างเหตุการณ์ให้โปรแกรมทำงานเมื่อมีเหตุการณ์ที่กำหนดไว้เกิดขึ้น ทำให้ไม่ต้องเสียเวลาไปเช็คตลอดว่าเข้าเงื่อนไขนี้หรือเปล่า
ใน arduino มี 3 แบบ คือ เมื่อเกิดเหตุการณ์ ไฟเปลี่ยนระดับ , ไฟเปลี่ยนจาก 0 เป็น 1 , ไฟเปลี่ยนจาก 1 เป็น 0
ซึ่งจะต้องใช้ขาพิเศษที่มีความสามารถในการสร้างเหตุการณ์ interrupt ได้
ตำแหน่งขา ตามตารางนี้
ในโคดที่ถามมา เขียนคำสั่งสร้างเหตุการณ์ตรงนี้ attachInterrupt(0, rpm, RISING); เมื่อมีเหตุการณ์ไฟเปลี่ยนระดับ หรือ RISING ที่ขา interrupt 0 จะไปทำงานที่ฟังก์ชัน rpm ซึ่งในที่นี้ ถ้าเป็น arduino uno ขา interrupt 0 คือขา D2 หรือขา 2
หรือจะต่อแบบธรรมดาไม่ใช้ interrupt ก็ได้
ถ้าต่อตามนี้หลายตัว ก็ใช้ขาที่เป็น interrupt แล้วดัดแปลงโคดให้ตรงกันก็ใช้ได้ ถ้าต่อ 4 บอร์ด arduino uno ขา interrupt จะมีไม่พอ เพราะจากตารางจะเห็นว่ามี 2 ขา ถ้าต้องการใช้มากกว่านี้ลองดู arduino leonardo หรือ arduino mega ครับ
ข้อมูลเพิ่มเติมการใช้งาน interrupt ตามนี้ครับ https://www.arduino.cc/en/Reference/Interrupts