+
+
Posts List
  1. 硬件介绍
  2. 连接示意图
  3. 代码
  4. 问题以及解决方法
  5. 成果演示
  6. 小小的拓展——呼吸灯
    1. 代码
    2. 成果演示

Arduino基础(二)模拟输出和输入

硬件介绍


电位器两端一端接电源一端接地,哪一端接地是无所谓的,只决定是顺时针还是逆时针转电压的变化。中间一端接Arduino的模拟输入引脚(A0~A5)。

关于模拟输出,引脚数字边上有波浪线的代表支持模拟输出。

连接示意图

代码

#define LED 11

int readVal = 0;
int ledVal = 0;

void setup() {
// put your setup code here, to run once:
pinMode(LED,OUTPUT);
Serial.begin(9600);
}

void loop() { // put your main code here, to run repeatedly:
readVal = analogRead(A0);
ledVal = map(readVal, 0, 1024, 0, 255);
Serial.println(readVal);
analogWrite(LED, ledVal);
}

问题以及解决方法

旋转到亮度较大的时候很大一段亮度没有发生变化。这是因为LED灯的亮度变化数值范围是在[0,255](8个bit)而模拟输入是在[0,1023](10个bit),所以当电位器旋转超过255时,亮度没有变化。
解决方法也很简单,只用把[0,1023]映射到[0,255]。即代码中的map(readVal, 0, 1024, 0, 255);

成果演示

20181025215600

小小的拓展——呼吸灯

代码

#define LED 11

int readVal = 0;
int ledVal = 0;
int increment = 10;

void setup() {
// put your setup code here, to run once:
pinMode(LED,OUTPUT);
Serial.begin(9600);
}
void loop() { // put your main code here, to run repeatedly:
readVal += increment;
ledVal = map(readVal, 0, 1024, 0, 255);
Serial.println(ledVal);
analogWrite(LED, ledVal);
delay(50);
if (ledVal >= 250) increment = -10;
else if (ledVal <=5) increment = 10;
}

成果演示

soogif1 2

本文作者: rhinoc

本文链接: http://rhinoc.top/post/arduino_2.html

版权声明: 本博客所有文章除特别声明外,均采用BY-NC-SA 4.0国际许可协议,转载请注明。

Support
Support Me
  • Through WeChat
  • Through Alipay