Thai microtron community

Electronic Knowledge Base => Microcontoller & Electronics => Topic started by: pomcoe on March 23, 2013, 04:57:08 PM



Title: อีกอย่างนึงคับ ช่วยดูที
Post by: pomcoe on March 23, 2013, 04:57:08 PM
ก็คือว่าผมใช้ เซนเซอร์ตรวจความเคลื่อนไหวคับ

 การทำงานคือว่าเมื่อมีคนเข้ามาแล้วให้ไฟติดและ delay 2 นาที
   แต่ว่าในขณะที่มัน delay 2นาที อยู่ ถ้าเกิดเจอความเคลื่อนไหวก็ให้มันเริ่มนับ delay ใหม่คับ
แก้ code ไงดีคับ

Code:
#include <16F88.h>         // Standard Header file for the PIC16F877A
#fuses HS, NOWDT, NOPROTECT, BROWNOUT, NOPUT, NOLVP  
#use delay(clock=10000000)  
int j;


void delay_2min(void){
      for(j=0;j<120;j++){
      delay_ms(1000);
      }}  

void main(void)
{
   set_tris_a(0x07);
   set_tris_b(0x00);
   output_b(0x00);
   delay_ms(200);
   while(TRUE)
 {      
   if(input(PIN_A0))    
      {
       output_high(PIN_B0);
       if(input(PIN_A0))
         {
         output_high(PIN_B0);
         }
         delay_2min();
         output_high(PIN_B0);
      }
      output_low(PIN_B0);
 }
}



Title: Re: อีกอย่างนึงคับ ช่วยดูที
Post by: Hanajiji on March 24, 2013, 04:02:57 AM
ใส่ ไว้ใน while นะครับ
if (พอรตของเซนเซอร์ == 1)
{
     j = 0;
     
     เอ้าพุตรีเลย์ออนครับ
     
     for(j=0;j<120;j++){
     delay_ms(1000);
     if (พอรตของเซนเซอร์ == 1)
          j=0; //ถ้ามีเซนเซอร์มาโดนอีกก็รีเซทค่า j เป็น 0 ซะ
     }
 
    เอ้าพุตรีเลย์ออฟครับ
}

เอาฟังก์ชั่นหน่วงเวลาออกเลยก็ได้ครับ


Title: Re: อีกอย่างนึงคับ ช่วยดูที
Post by: pomcoe on March 24, 2013, 10:58:59 AM
ใส่ ไว้ใน while นะครับ
if (พอรตของเซนเซอร์ == 1)
{
     j = 0;
    
     เอ้าพุตรีเลย์ออนครับ
    
     for(j=0;j<120;j++){
     delay_ms(1000);
     if (พอรตของเซนเซอร์ == 1)
          j=0; //ถ้ามีเซนเซอร์มาโดนอีกก็รีเซทค่า j เป็น 0 ซะ
     }
  
    เอ้าพุตรีเลย์ออฟครับ
}

เอาฟังก์ชั่นหน่วงเวลาออกเลยก็ได้ครับ

 
     for(j=0;j<120;j++){
     delay_ms(1000);
     if (พอรตของเซนเซอร์ == 1)
          j=0; //ถ้ามีเซนเซอร์มาโดนอีกก็รีเซทค่า j เป็น 0 ซะ

ก็คือตรงนี่ ขณะที่มันวนอยู่  ถ้ามีอินพุตเข้ามา =1 มันก็จะเริ่มนับใหม่ใช่มะคับ
ผมเข้าใจถูกมั้ยคับ



Title: Re: อีกอย่างนึงคับ ช่วยดูที
Post by: Hanajiji on March 24, 2013, 02:14:09 PM
ครับผม


Title: Re: อีกอย่างนึงคับ ช่วยดูที
Post by: pomcoe on March 24, 2013, 02:17:55 PM
ขอบคุณมากจิงๆเลยคับที่ช่วยเหลือ   ;D ;D
  ไม่รู้จะตอบแทนยังไงดี


Title: Re: อีกอย่างนึงคับ ช่วยดูที
Post by: pomcoe on March 24, 2013, 02:20:27 PM
แต่ตอนนี้มีปัญหานึงคือในขณะทีไฟดับ  ในห้องไม่มีการเคลื่อนไหว   แต่ว่าบางทีไฟกลับติดเอง

 บางทีอาจจะเป็นที่เซนเซอร์ PIR ที่ไม่เสถียรใช่มั้ยคับ


Title: Re: อีกอย่างนึงคับ ช่วยดูที
Post by: Hanajiji on March 24, 2013, 09:30:30 PM
ผ... ผีป่าว ฮ่าๆๆๆ  ล้อเล่น
ลองเพิ่มดีเลย์ในการเชคครับ ลองให้ว่าถ้ามีสัญญาณเข้ามา
ระยะหนึ่งค่อยให้ไฟติด ไม่ใช่ติดเลยน่ะครับ


Title: Re: อีกอย่างนึงคับ ช่วยดูที
Post by: pomcoe on March 24, 2013, 09:34:22 PM
ผ... ผีป่าว ฮ่าๆๆๆ  ล้อเล่น
ลองเพิ่มดีเลย์ในการเชคครับ ลองให้ว่าถ้ามีสัญญาณเข้ามา
ระยะหนึ่งค่อยให้ไฟติด ไม่ใช่ติดเลยน่ะครับ


55 สงสัยผีหลอกแล้วเรา  ;D ;D ;D

แบบนี้เลยคับที่คิดไว้

 
Code:
 set_tris_a(0x07);             //set port ao,a1,a2 to input (0000 0111)
   set_tris_b(0x00);             //set port b to output
   delay_ms(100);
   while(TRUE)
 {      
   if (input(PIN_A0)||input(PIN_A1)||input(PIN_A2))  //input == 1
   {
      delay_ms(500);
      if (input(PIN_A0)||input(PIN_A1)||input(PIN_A2))
      {
         i = 0;    
         output_high(PIN_B0);    //open light  
         for(i=0;i<120;i++){     // delay 2min
            delay_ms(1000);
            if (input(PIN_A0)||input(PIN_A1)||input(PIN_A2))
               i=0;              //set time=0
      }  
      output_low(PIN_B0);        //close light
      }
      reset_cpu();               // reset cpu
   }
 }




Title: Re: อีกอย่างนึงคับ ช่วยดูที
Post by: Hanajiji on March 25, 2013, 03:20:56 AM
ครับ ลองเชคพวกวงเล็บดูอีกทีนะครับ แล้วก็เบิรนลงชิปได้เลย สู้ๆครับ


Title: Re: อีกอย่างนึงคับ ช่วยดูที
Post by: pomcoe on March 25, 2013, 12:49:33 PM
คับ   ขอบคุณมากนะคับ    :D :D