极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13666|回复: 8

麻烦大家看看

[复制链接]
发表于 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);
   }
}
回复

使用道具 举报

 楼主| 发表于 2013-4-28 16:31:44 | 显示全部楼层
补充一下,我这边使用的是数字led灯模块,低电平点亮
回复 支持 反对

使用道具 举报

发表于 2013-4-28 16:53:09 | 显示全部楼层
本帖最后由 贱客 于 2013-4-28 16:55 编辑

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

  2. void loop()
  3. {
  4.   int val0,val1;
  5.   val0=analogRead(A4);
  6.   val1=analogRead(A0);
  7.   
  8.   if (val0 > THRESHOLD) {
  9.           digitalWrite(8,LOW);
  10.   } else {
  11.           digitalWrite(8,HIGH);
  12.   }

  13.   if (val1 > THRESHOLD) {
  14.           digitalWrite(7,LOW);
  15.   } else {
  16.           digitalWrite(7,HIGH);
  17.   }
  18.   delay(500);  //最好 delay 一下,等信号或动作执行
  19. }
复制代码
至于3.3v接在A0,或A4中任一一个两个灯都亮,可能A0,A4要接下拉电阻,电子我是小白,等大牛回答
回复 支持 反对

使用道具 举报

发表于 2013-4-28 17:22:05 | 显示全部楼层
lz可以用example-》01basics -》AnalogReadSerial 这个例子观察 A0,A4不接任何东西的情况下读到的数值。
A0, A4 设为模拟输入,不接任何东西的情况是浮动的,理论上是在0~1024不断变化的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-4-28 17:56:44 | 显示全部楼层
贱客 发表于 2013-4-28 16:53
A0对应的数字7口和A4对应的数字8
分开控制代码和逻辑更简单至于3.3v接在A0,或A4中任一一个两个灯都亮,可 ...

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

使用道具 举报

 楼主| 发表于 2013-4-28 17:58:26 | 显示全部楼层
luhuaneda 发表于 2013-4-28 17:22
lz可以用example-》01basics -》AnalogReadSerial 这个例子观察 A0,A4不接任何东西的情况下读到的数值。
...

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

使用道具 举报

发表于 2013-4-28 18:47:36 | 显示全部楼层
thinkrobot 发表于 2013-4-28 17:56
你这个程序实际用过没有,我下载后一点反应都没有,而且宏定义后面的分号应该去掉,不然无法编译通过

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

使用道具 举报

发表于 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,再交换,看一下串口数据就知道为什么了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-2 09:03:29 | 显示全部楼层
luhuaneda 发表于 2013-4-28 20:42
/*
  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
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-8 01:19 , Processed in 0.039432 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表