วิวัฒน์ IP: 49.228.244.x
3 ปีที่ผ่านมา
https://www.img.in.th/image/w4coHl
จากรูปครับ สัญญาณ input รับมาจาดเซนเซอร์ วัดรอบ อยากสร้างรูแคลื่นตาม output 1 ,2
โดยสามารถกำหนด ว่าจะหน่วงเวลาหลังได้สัญญาณ จาก input และสามารถ ปรับ duty cycle ได้
ที่ผมทำแล้วไม่สำเร็จ วิธีแรก จับเวลา 1 รูปคลื่น โดนใช้คำสั่ง milles() แล้วเอามาหาร 360 เพือให้ได้ เวลา ต่อ 1 องศา แล้วกำหนด ถ้ามี อินเตอรัพ ของขาขึ้น ให้ delayMicroseconds(องศา) ทำการสั่ง digitalwrite(HIGH) delayMicroseconds(duty)
digitalwrite(LOW) ***** ทำงานไม่ได้ สัญญาณเพียน
วิธีที่ 2
กำหนดให้ timer2 เป็น CTC mode
boolean toggle2 = 0;
TCCR2A = 0;// set entire TCCR2A register to 0
TCCR2B = 0;// same for TCCR2B
TCNT2 = 0;//initialize counter value to 0
OCR2A = 249;// อันนี้ผมลองมั่วๆดู จะดูรูปคลื่น
// turn on CTC mode
TCCR2A |= (1 << WGM21);
// Set CS21 bit for 8 prescaler
TCCR2B |= (1 << CS21);
// enable timer compare interrupt
TIMSK2 |= (1 << OCIE2A);
ISR(TIMER2_COMPA_vect)
if (toggle2){
digitalWrite(9,HIGH);
toggle2 = 0;
}
else{
digitalWrite(9,LOW);
toggle2 = 1;
}
}
ผมมองไม่ออกว่าจะทำอย่างไร ช่วยแนะนำด้วยครับ ที่ผมเข้าใจคือ ค่า TCNT=เวลา1 รูปสัญญาณ
ผมสามารถวัดค่า OCR2A ได้ไหม เพื่อเอามาหาร 360 องศา