thinkrobot 发表于 2013-4-28 16:30:17

麻烦大家看看

小弟写了一个程序想实现的功能是当读取模拟口A0,A4的电压为大于等于3.3v时,A0对应的数字7口和A4对应的数字8点亮,现在的情况是我把3.3v接在A0,或A4中任一一个两个灯都亮,麻烦大家看看啥问题
    void setup()
{
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
}
void loop()
{
int val0,val1;
val0=analogRead(A4);
val1=analogRead(A0);
if(val0>600&&val1>600)
{
   digitalWrite(7,LOW);
   digitalWrite(8,LOW);
}
else if(val0<600&&val1<600)
{
    digitalWrite(7,HIGH);
    digitalWrite(8,HIGH);
   
}
   if(val1>600&&val0<600)
{
   digitalWrite(7,HIGH);
   digitalWrite(8,LOW);
}
else if(val1<600&&val0>600)
{
   digitalWrite(7,LOW);
   digitalWrite(8,HIGH);
   }
   else
   {
   digitalWrite(7,HIGH);
   digitalWrite(8,HIGH);
   }
}

thinkrobot 发表于 2013-4-28 16:31:44

补充一下,我这边使用的是数字led灯模块,低电平点亮

贱客 发表于 2013-4-28 16:53:09

本帖最后由 贱客 于 2013-4-28 16:55 编辑

A0对应的数字7口和A4对应的数字8
分开控制代码和逻辑更简单#define THRESHOLD 600;        //阀值

void loop()
{
int val0,val1;
val0=analogRead(A4);
val1=analogRead(A0);

if (val0 > THRESHOLD) {
        digitalWrite(8,LOW);
} else {
        digitalWrite(8,HIGH);
}

if (val1 > THRESHOLD) {
        digitalWrite(7,LOW);
} else {
        digitalWrite(7,HIGH);
}
delay(500);//最好 delay 一下,等信号或动作执行
}至于3.3v接在A0,或A4中任一一个两个灯都亮,可能A0,A4要接下拉电阻,电子我是小白,等大牛回答

luhuaneda 发表于 2013-4-28 17:22:05

lz可以用example-》01basics -》AnalogReadSerial 这个例子观察 A0,A4不接任何东西的情况下读到的数值。
A0, A4 设为模拟输入,不接任何东西的情况是浮动的,理论上是在0~1024不断变化的。

thinkrobot 发表于 2013-4-28 17:56:44

贱客 发表于 2013-4-28 16:53 static/image/common/back.gif
A0对应的数字7口和A4对应的数字8
分开控制代码和逻辑更简单至于3.3v接在A0,或A4中任一一个两个灯都亮,可 ...

你这个程序实际用过没有,我下载后一点反应都没有,而且宏定义后面的分号应该去掉,不然无法编译通过

thinkrobot 发表于 2013-4-28 17:58:26

luhuaneda 发表于 2013-4-28 17:22 static/image/common/back.gif
lz可以用example-》01basics -》AnalogReadSerial 这个例子观察 A0,A4不接任何东西的情况下读到的数值。
...

这个我已经试过了,不接任何东西是在300-400之间浮动,接3.3v的时候在678左右浮动

贱客 发表于 2013-4-28 18:47:36

thinkrobot 发表于 2013-4-28 17:56 static/image/common/back.gif
你这个程序实际用过没有,我下载后一点反应都没有,而且宏定义后面的分号应该去掉,不然无法编译通过

没用过,这段只是根据你的需求和代码简化来的。
加宏只是为了方便修改阀值,C++不是我主语言,习惯写错了在所难免,呵呵,你改一下即可。
setup() 部分因为不需要改,我就没写,你抄回你代码里的即可

luhuaneda 发表于 2013-4-28 20:42:34

本帖最后由 luhuaneda 于 2013-4-28 20:44 编辑

/*
AnalogReadSerial
Reads an analog input on pin 0, prints the result to the serial monitor.
Attach the center pin of a potentiometer to pin A0, and the outside pins to +5V and ground.

This example code is in the public domain.
*/

// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
// read the input on analog pin 0:
int sensorValue = analogRead(A0);
// print out the value you read:
Serial.print(sensorValue);
Serial.print("");
sensorValue = analogRead(A4);
Serial.println(sensorValue);
delay(100);      // delay in between reads for stability
}

lz 你试一下上面的程序,其中一个端口不接,一个接3.3v,再交换,看一下串口数据就知道为什么了。

thinkrobot 发表于 2013-5-2 09:03:29

luhuaneda 发表于 2013-4-28 20:42 static/image/common/back.gif
/*
AnalogReadSerial
Reads an analog input on pin 0, prints the result to the serial monitor.


试了一下,出来的值还是一样的,接的A0的 时候A0在698左右,A4在675左右。接A4的时候,A0:657,A4:674,两个都不接的时候两个的值大致在260
页: [1]
查看完整版本: 麻烦大家看看