lnwshop logo
  • ตอบกระทู้
  • ตั้งกระทู้ใหม่
QUOTE 

สอบถามเรื่องวาง sensor

(Guest)
PungZill (Guest)
IP: 203.144.156.x
1 ปีที่ผ่านมา

พี่ครับ ผมอยากสอบถามว่า ถ้าผมจะวาง 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);

 }

 

 }

 

QUOTE 
ความคิดเห็นที่ #1
เจ้าของร้าน
เจ้าของร้าน
1 ปีที่ผ่านมา

ลองทำจุดเดียวก่อนครับ จากนั้นก็เพิ่มดัดแปลงโคดเป็น 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

 

QUOTE 
ความคิดเห็นที่ #2
(Guest)
PungZill (Guest)
IP: 171.6.18.x
1 ปีที่ผ่านมา

ขอบคุณครับ

QUOTE 
ความคิดเห็นที่ #3
เจ้าของร้าน
เจ้าของร้าน
1 ปีที่ผ่านมา

ยินดีครับ Smile

1
แสดงความคิดเห็นที่ 1-3 จากทั้งหมด 3 ความคิดเห็น
ชื่อ
อีเมล
ข้อความ
  • ตอบกระทู้

หมวดหมู่สินค้า

สมาชิก Arduino All

เข้าสู่ระบบด้วย
เข้าสู่ระบบ
สมัครสมาชิก

ยังไม่มีบัญชีเทพ สร้างบัญชีใหม่ ไม่เกิน 5 นาที
สมัครสมาชิก (ฟรี)

Arduino All ขายดี

รหัสสินค้า A015
300.00 บาท
  • สั่งซื้อ
รหัสสินค้า A233
5.00 บาท
  • สั่งซื้อ
รหัสสินค้า A115
10.00 บาท
สินค้าหมด
รหัสสินค้า A238
4.00 บาท
  • สั่งซื้อ
รหัสสินค้า A237
4.00 บาท
  • สั่งซื้อ
รหัสสินค้า A014
90.00 บาท
  • สั่งซื้อ
รหัสสินค้า A225
5.00 บาท
  • สั่งซื้อ
รหัสสินค้า A097
4.00 บาท
  • สั่งซื้อ
รหัสสินค้า A474
7.00 บาท
สินค้าหมด
Go to Top