所以......我是Arduino的新手,我现在正努力做这项工作......但是我已经做了一个小时了,运气不在我身边。 .. 以下是我正在做的事情的摘要:我有一个Gizduino + 644(Arduino的副本,其中有ATmega 644在这里),一个红外接近传感器(3个PIN - VCC,GRND,OUT),2个LED& #39; s(红色和黄色)和2个100ohms电阻。
到目前为止,这是我能做的:
这就是问题所在:
在我的代码中,名称如下:
这是我在IDE中的代码:
int LOCK = 13; //RED LED, in pin 13
int PROX = 12; //PROXIMITY, in pin 12
int ANALOG = 0; //OUT of Proximity, in Analog 0
int PROX_SENSOR_LED = 7; //Yellow LED, in pin 7
int val = 0; //value to store
void setup()
{
Serial.begin(9600);
pinMode(LOCK, OUTPUT); //set the pin # as output (VCC of the hardware)
pinMode(PROX, OUTPUT); //set the pin # as output (VCC of the hardware)
pinMode(PROX_SENSOR_LED, OUTPUT); //set the pin # as output (VCC of the hardware)
}
void loop()
{
digitalWrite(PROX_SENSOR_LED, LOW); //sets the output pin initially to LOW (but doesnt work.. T_T)
val = analogRead(ANALOG); //read the input pin 0 to 1023
if (val > 800) //if the sensor value is higher threshold set OUTPUT HIGH
{
digitalWrite(PROX_SENSOR_LED, HIGH); //sets output pin HIGH
delay(100); //waits for .1 second
}
char data = Serial.read(); //read 9600
switch (data) //start of case... like 'ON' 'OFF'
{
case 'QRIN': //this is my 'ON'
digitalWrite(PROX, HIGH); //turn the proximity to ON
digitalWrite(LOCK, HIGH); //turn the lock to ON
break;
case 'QROUT': //this is my off 'OFF'
digitalWrite(PROX, LOW); //turn the proximity to OFF
digitalWrite(LOCK, HIGH); //turn the lock to ON
delay(10000); //for 10 seconds
digitalWrite(LOCK, LOW); //then off
if (ANALOG = HIGH) // I need this 'if' condition because if
{ //this is not here... the Yellow LED is turn ON...
digitalWrite(PROX_SENSOR_LED, LOW); //I don't know why.. T_T
}
break;
}
}
答案 0 :(得分:0)
将行放在setup()的末尾:
digitalWrite(PROX_SENSOR_LED, LOW);
同样if (ANALOG = HIGH)
是一个错误的陈述,你为你的ANALOG分配HIGH。将其更改为if (ANALOG == HIGH)
。
答案 1 :(得分:0)
所有GPIO都将在高阻抗输入状态下启动,以便对LED的控制浮动 - 在这种情况下LED的状态将取决于LED驱动电路以及它是否具有上拉或拉 - 电阻器。也就是说它是硬件问题而不是软件问题。
在上传期间,Arduino引导加载程序正在运行,并且它不会初始化上载过程不需要的任何I / O.如果您无法修复硬件设计以使其浮动到关闭状态,那么您需要modify the bootloader以便尽早关闭LED - (仍然会出现故障,可能会也可能不会可见)。这可能是一个坏主意,因为那时你有一个特定于应用程序的引导加载程序而不是通用引导加载程序,而对于其他应用程序来说,设置这个I / O引脚可能是完全不合需要的。
尽管如此,还不完全清楚为什么在上传过程中LED处于打开状态的问题,在setup()
中简单地初始化输出在大多数情况下似乎是可以接受的。