我目前正在做一个原型,它结合了2个传感器,由赛创的PIR运动传感器。
和一个光电二极管(很小,有三条腿,型号未知)
原型的工作方式是,当没有光,并且有运动时,led将亮起。否则,它将关闭。
我已经编写了代码来分别测试这两个传感器,它工作得很好。
当我组合这两个编码时,我遇到了led输出的问题。如下图所示:
// include
//==========================================================================
# include <pic.h>
# include <htc.h>
// configuration
//==========================================================================
__CONFIG (0x3F32);
// define
//==========================================================================
#define sensor RB3
#define led RA5
#define led2 RB7
#define light RB5
#define _XTAL_FREQ 4000000
#define delay ms(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000.0)))
// main function
//==========================================================================
void main(void)
{
// unsigned long delay_time=5000;
TRISA = 0b00000000;
TRISB = 0b01111111; //Configure Port B as Input
ADCON1 =0B00000110;
led=0;
led2=0;
int i;
while(1) //Infinity Loop
{
if(!light)
{
if(sensor)
{
for(i=5;i>0;i--)
{
led2=0;
led=1;
__delay_ms(10000);
}
}
else if(!sensor)
{
if (i>0)
{ for(i=5;i>0;i--)
{
led2=0;
led=1;
__delay_ms(10000);
}
}
else if(i<=0)
{
led=0;
led2=1;
}
}
}
else if(light)
{
led=0;
led2=1;
}
}
}我很感谢你提前给予的帮助。请帮帮忙。谢谢。
发布于 2012-11-14 05:41:07
您声明了变量i,但是没有将其初始化为一个值(我认为C编译器也不会将其初始化为0,我不确定)。如果不是这样,那么想象一下下面的场景:,在执行的第一个开始:它是(!light)和(!sensor),它开始比较i>0或i<=0,但我最初是什么??
您只假设if (传感器)主体至少执行了一次,以便为i提供一个初始值。我不知道你的程序需求或流程的细节,但我认为这是一个不安全的隐藏的bug。
发布于 2016-07-10 23:08:46
虽然我不是PIC micro的专家,但我想知道你用来访问RAx和RBx的方法是否合适,即"led = 0",而不是"led &= ~(1 << led)“或类似的东西。
您似乎也没有初始化"int“变量,我认为这会导致if语句出现问题。
诚挚的问候。
发布于 2012-11-13 16:38:54
不如这样吧:
while (1)
{
led_on = 0;
if (!light && !sensor)
{
if (led_on == 0)
{
/* Turn on LED... */
led_on = 1;
}
}
else if (led_on == 1)
{
/* Turn off LED... */
led_on = 0;
}
}https://stackoverflow.com/questions/13357410
复制相似问题