遽終 发表于 2013-12-16 20:33:27

请求各位大神帮我看看哪里错了

int lightPin=12;
int voicePin=A1;
int ledPin=13;
int lightValue=0;
int voiceValue=0;
int a =800;   //此处需是环境基础亮度变量,请查看自己的亮度数值,填写到此处数值要略大于所测得的数据但小于灯光下的数据
intb=55; //此处需是环境基础变量,请查看自己的数值,填写到此处数值要略大于所测得的数据但小于数据
void setup ()
{
Serial.begin(9600);
pinMode(13,OUTPUT);
}
void loop()
{
int lightValue=digitalRead(lightPin);//读取模拟口A0数值
Serial.println(lightValue);
int voiceValue=analogRead(voicePin);//读取模拟口A1数值
Serial.println(voiceValue);
if (lightValue>=a)      //对光线和声音强度进行判断,如果比我们的预设值大 就点亮LED否则就关闭
{
    digitalWrite(13,HIGH);
}
else
{
    digitalWrite(13,LOW);
}
delay(1000);

if (voiceValue>=b)   
{
    digitalWrite(13,HIGH);
}
else
{
    digitalWrite(13,LOW);
}
delay(1000);
}

主要是用光照强度传感器和声音传感器控制LED的开关,只有当这两个传感器返回的值大于一定的值的时候,LED灯才会亮起来,但是把程序下载到arduino上的时候,只有光照强度传感器能控制LED的开关,并不能同时共同作用控制,还有这个错误:avrdude: stk500_getsync(): not in sync: resp=0x00请问各位大神,这是为什么呢??

tom 发表于 2013-12-16 21:32:20

试一试这个增加一个布尔型变量作为想要控制的开关。
boolean b;

当亮度和声音大于规定的时候,b值为真,控制LED的打开。
if ((lightValue>=a and voiceValue>=b)
{b=true;}

在循环程序段中加入

if(b==true)
digitalWrite(13,HIGH);
else
digitalWrite(13,LOW);

qptimus 发表于 2013-12-16 21:33:42

用什么测的光线,怎么接线的,接在哪个脚了,12脚没初始化,读数字引脚只有两个结果,0或1

isilcala 发表于 2013-12-16 22:14:07

int lightValue=digitalRead(lightPin);//读取模拟口A0数值

需要改成analog,并且接到A0脚或其他模拟输入脚。

setup里要把所有用到的脚都明确指明是INPUT还是OUTPUT

遽終 发表于 2013-12-16 23:21:14

tom 发表于 2013-12-16 21:32 static/image/common/back.gif
试一试这个增加一个布尔型变量作为想要控制的开关。
boolean b;



好的!谢谢:)
页: [1]
查看完整版本: 请求各位大神帮我看看哪里错了