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

  • 73 Replies
  • 15427 Views
*

Offline JENG

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

Facebook
www.facebook.com/groups/coopmicro

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

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

แนวคิด

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; อะคับ

เขียนแบบ 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 ทำงานเสร็จก่อน
 

*

Offline JENG

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

Facebook
www.facebook.com/groups/coopmicro

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

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

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

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

 :) :) :) :)

รบกวนหน่อยแล้วนะคับ

ผมใช้บอร์ดของ ETT
ตัวนี้คับ
http://www.etteam.com/prod2010/PIC/PIC-et-base-pic16f628-v1.html

และใช้ PIC16f88 คับ

*

Offline ozuke

  • *****
  • 118
    • View Profile
    • MCU & Computer Programing Learning by Wittawat Sompong
เอ่อ มัน 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.

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