มีเรื่องให้ช่วยหน่อยคับผม T_T

Started by pomcoe, February 12, 2013, 11:47:21 AM

Previous topic - Next topic

JENG

เขียนแบบ state machine ครับ ง่ายสุดแล้ว โจทย์ว่ายังไงครับ ผมดูตรงเงื่อนไขแล้ว งงๆ
สามารถติดตาม electoday ได้ที่

Facebook
www.facebook.com/groups/coopmicro

Google+
https://plus.google.com/communities/103482067769375459277

☺☺☺ความรู้ และความฉลาด ไม่ใช่สิ่งเดียวกัน จะมีประโยชน์อะไร ถ้าฉลาดแต่อยู่ในกะลา☺☺☺

pomcoe

Quote from: ozuke on February 17, 2013, 01:35:10 PM
แนวคิด

output_low(pin_b0);
output_low(pin_b1);

a=read_adc(0)*0.004888;
if(a>=1.2 && a<=2)
     output_high(pin_b0);

a=read_adc(0)*0.004888;
if(a>=1.2 && a<=2)
     output_high(pin_b1);

delay_ms(4000);
....................


มันอาจจะทำงานไม่ถึงกับเท่ากัน แต่ไกล้เคียง ถ้าอยากทำให้พร้อมกันก็ทำได้ ไม่ถึงกับ Interrupt หรอกครับ

เอ่อ มัน Run ไม่ผ่านอะคับ
ติดที่ a=read_adc(0)*0.004888; อะคับ

pomcoe

Quote from: JENG on February 17, 2013, 01:45:26 PM
เขียนแบบ state machine ครับ ง่ายสุดแล้ว โจทย์ว่ายังไงครับ ผมดูตรงเงื่อนไขแล้ว งงๆ

ก็คือว่า
รับอินพุตเข้ามา 2 ตัว พร้อมกันแล้วให้ Output ทำงานพร้อมกันอะคับ

//NUM 1
    set_adc_channel(0);
    delay_us(10);
    infa1 = read_adc();
    vinfa1 = vbe * (float)infa1;
   
    if (vinfa1<1){
      delay_ms(1000);
      output_low(PIN_B1);}
      else if((vinfa1>=1.2)&&(vinfa1<=2 ))
      {
      output_high(PIN_B0);
      delay_ms(4000);
      output_low(PIN_B0);}
      else{output_low(PIN_B0);}
  // ------------------------------------------------------------------------   
//NUM2           
    set_adc_channel(1);
    delay_us(10);
    infa2 = read_adc();
    vinfa2 = vbe * (float)infa2;
   
    if (vinfa2<1){
      delay_ms(1000);
      output_low(PIN_B1);}
      else if((vinfa2>=1.2)&&(vinfa2<=2 ))
      {
      output_high(PIN_B1);
      delay_ms(4000);
      output_low(PIN_B1);}
      else{output_low(PIN_B1);}

  จาก CODE คือว่า
คือผมจะเอาไปใช้ที่โถปัสสาวะชายอะคับ ให้น้ำราดเอง
คือเมื่อคนเข้ามา ระบบก็ยังไม่ทำงานก่อน
รอจนกว่าคนจะออกไปแล้วค่อยทำงาน แล้วหน่วงเวลาไว้ 4 วิ อะคับ

//NUM1
เมื่อรับ Input จากเซนเซอร์ทางขา A0 ถ้าน้อยกว่าระยะของเซนเซอร์น้อยกว่า 1 ก็หน่วงเวลา 1 วิ   //คือตรงนี้เมื่อมีคนเดินเข้ามามันก็จะช่วยให้ระบบยังไม่ทำงาน
และเมื่อรับ Input จากเซนเซอร์ทางขา A0 ถ้าอยู่ในช่วง 1.2 -2 ก็ให้มันทำงาน และหน่วงเวลาไว้ 4 วิ //คือตรงนี้ในกรณีที่คนเดินออกไป แล้วราดน้ำอะคับ

ตอนนี้อะมันทำงานได้อะคับ
ในกรณีที่เข้ามาพร้อมกัน  Output ตัวที่ 2 จะทำงานได้ก็ต้องให้ Output ตัวที่ 1 ทำงานเสร็จก่อน


JENG

มันยังแหม่งๆอยู่นะแต่เข้าใจแล้วล่ะว่าจะทำอะไร เดี๋ยวเย็นนี้กลับบ้านผมจะลองทำตัวอย่างให้ดู
สามารถติดตาม electoday ได้ที่

Facebook
www.facebook.com/groups/coopmicro

Google+
https://plus.google.com/communities/103482067769375459277

☺☺☺ความรู้ และความฉลาด ไม่ใช่สิ่งเดียวกัน จะมีประโยชน์อะไร ถ้าฉลาดแต่อยู่ในกะลา☺☺☺

pomcoe

Quote from: JENG on February 17, 2013, 02:42:36 PM
มันยังแหม่งๆอยู่นะแต่เข้าใจแล้วล่ะว่าจะทำอะไร เดี๋ยวเย็นนี้กลับบ้านผมจะลองทำตัวอย่างให้ดู

ขอบคุณมากนะคับผม

:) :) :) :)

pomcoe


pomcoe


ozuke

Quote from: pomcoe on February 17, 2013, 02:08:35 PM
เอ่อ มัน Run ไม่ผ่านอะคับ
ติดที่ a=read_adc(0)*0.004888; อะคับ

มันคือแนวคิด ครับ ถ้าอยากให้รันได้ต้องอ่านแล้วทำความเข้าใจครับ
นี่แสดงว่าไม่ยอมอ่าน ไม่ยอมทำความเข้าใจรึปล่าว หรือมันไม่รู้เรื่องจริงๆ
ถ้าอ่านนิด ทำความเข้าใจหน่อยมันก็ทำได้แ้ล้วครับ

1.สั่ง LOW pin_b1,pin_b0
2.อ่าน adc 0 แล้วมาคำนวนเป็นโวลต์เก็บไว้ที่ตัวแปร a
2.1 ถ้า a มากกว่า 1.2 และน้อยกว่า 2 ให้ pin_b0 เป็น high
3.อ่าน adc 1 แล้วมาคำนวนเป็นโวลต์ เก็บไว้ที่ตัวแปร a
3.1 ถ้า a มากกว่า 1.2 และน้อยกว่า 2 ให้ ยin_b1 เป็น high
4.delay 4000 ms
5.กลับไปทำข้อ 1.

โชคดีครับ
ถ้าผมบอกมากกว่านี้ มันก็ไม่ต่างอะไรกันกับลอกการบ้านส่ง
ผมอยากให้คุณเข้าใจ มากกว่า การได้ส่งงานแบบไม่รู้เรื่อง
คิดว่าคงเข้าใจผมนะ