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

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

Previous topic - Next topic

pomcoe

แต่ถ้าได้โปรแกรมที่แยกการทำงานจะดีกว่าคับ


olee




pomcoe

ตอนนี้ได้แระคับ
  แต่ว่ามันยังเพี้ยนๆๆ บ้างทีมันก็ติดเอง
ทำไงดีอะคับ

pomcoe

ที่คิดไว้คือ พอคนเข้ามาไม่ต้องทำงานก่อน
   แต่พอคนออกไปจึงค่อยทำงาน
เขียนโปรแกรมไม่ถูก อิอิ

skytec

ช้อมูลของเราไม่เพียงพอที่จะช่วย หากอยากให้ช่วย เราต้องให้ข้อมูล มากกว่านี้ เช่น วงจร สิ่งที่เราต้องการ และอื่นๆ
"จินตนาการสำคัญกว่าความรู้ ความรู้มีข้อจำกัด จิตนาการไร้ขอบเขต " --อัลเบิร์ต ไอสไตน์

pomcoe

นี่เป็นโค็ดเดิม
#include <16F88.h>         // Standard Header file for the PIC16F877A
#device ADC = 10
#fuses HS,NOWDT,NOPROTECT,NOLVP   
#use delay(clock=10000000)   
#define vbe 0.0048875855327468230694037145650049 // Vref/1023 ;Vref = 5 volt
float infa1,vinfa1;

void start(int1 pin)
{
   if(pin==0) output_high(PIN_B1);
   else output_high(PIN_B2);
}

void stop(int1 pin)
{
   if(pin==0) output_low(PIN_B1);
   else output_low(PIN_B2);
}
void delay_1mingreen(void){     
      start(0);
      delay_ms(500);
      stop(0);
      delay_ms(500);
}
     
void main(void)
{
    setup_adc_ports(all_analog);
    setup_adc(adc_clock_internal);
 
    while(TRUE)
{
//NUM 1
    set_adc_channel(0);
    delay_us(10);
    infa1 = read_adc();
    vinfa1 = vbe * (float)infa1;
   
    output_high(PIN_B1); //led green on    // คือตอนแรกให้แสดงสถานะไฟพร้อมทำงาน
    if (vinfa1<0.6){   //ตรงนี้คนเดินเข้ามา แล้วหน่วงเวลาไม่ให้ทำงาน
      delay_ms(6000);     //delay 6 s.
      output_low(PIN_B0);   // solinoid valve off
      }
      else if (vinfa1>1.4){ //ตรงนี้พอคนเข้ามาแล้วได้ระยะ ก้ให้แสดงสถานะกำลังทำงาน
         delay_1mingreen(); //led green blink
      }
      else if((vinfa1>=0.6)&&(vinfa1<=0.8 ))    //ตรงนี้คนเดินออกไป แล้วตรงระยะ ก็เลยให้ทำงาน  มันติดตรงนี้แหละถ้าเกิดเดิน    ไม่ตรงระยะมันก็ไม่ทำงาน
         {
         //delay_ms(2000);
         output_low(PIN_B1);  //led green off
         output_high(PIN_B2); // led red on
         output_high(PIN_B0);  // solinoid valve on     
         delay_ms(6000);        //delay 6 s.
         output_low(PIN_B0);     // solinoid valve off
         output_low(PIN_B2);      // led red off
         }
                 
      else{
         output_low(PIN_B0);  // solinoid valve off
         output_high(PIN_B1);  //led green on 
         reset_cpu();
         }
}
}
โค็ดเดิมมีปัญหาตรงที่
   บางทีก็ทำงานปรกติ
แต่บางทีก็ทำงานเองแบบ งง

แต่ตอนนี้เปลี่ยนใหม่แล้ว
   คืออยากให้  พอคนเข้ามา แล้วตรงระยะที่อินฟาเรดเซนเซอร์ทำงาน  ที่ 0.6 หรือมากกว่า ก็ยังไม่ต้องทำงานก่อน
   แต่พอคนออกไปจึงค่อยทำงาน 

  จุดประสงค์คือ รับอินพุตมาจากอินฟาเรทเซนเซอร์
แล้วควบคุมการเปิด ปิด solinoid valve

เอาไปใช้กับโถปัสสาวะชายคับ