模拟输出
boolean pushButton1;
boolean pushButton2;
int ledPin = 9;
int brightness = 128;
void setup() {
pinMode(2, INPUT_PULLUP);
pinMode(8, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
pushButton1 = digitalRead(2);
pushButton2 = digitalRead(8);
if (!pushButton1 && brightness > 0){
brightness--;
} else if (!pushButton2 && brightness < 255) {
brightness++;
}
analogWrite(ledPin, brightness);
Serial.println(brightness);
delay(10);
}
只有带有波浪线的可以调节LED亮度。
当长按右边的键,输出从255降到0,灯亮度降至熄灭;
当长按左边的键,输出从0升到255,灯亮度逐渐变亮。
analogWrite()指定引脚输出,并控制亮度(0~255范围内)。支持356911引脚。
执行analogWrite()时,会给该引脚一个指定的PWM频率,除了5,6引脚(980Hz),一般频率是490Hz左右。
analogWrite()不需要pinMode()设置引脚,但是也可以设置。
PWM
主板上有一句话:PWM=~
当修改analogWrite()的第二个参数时,就是修改在一个周期内LED亮的部分的占比。比如127就是127/255的时间处于亮的状态,其他时间处于灭的状态,频率过快时看起来就觉得亮度低了。
模拟输入
电位器
Potentiometer 电位器,本课学习中使用的电位器类似一个螺丝侧面长者3个引脚的东西。原理类似滑动变阻器。
有一个旋钮,三个引脚,电位器上写着电阻值(13号引脚之间的),比如我的是10000.
旋钮向哪边转,哪边电阻降低。
旋钮左转到头,则12间电阻为0,23间电阻为10000.
电位器可以把0~5v输入电压映射到0~1023范围,旋转旋钮模拟输入会从0~1023变化。
void setup() {
Serial.begin(9600);
}
void loop() {
int analogInputVal = analogRead(A0);
Serial.println(analogInputVal);
}
Arduino每0.1毫秒读取一次输入。
当模拟输入引脚没有连线的时候,读取到的值无法确定。甚至我们把手靠近该引脚,值都会变化。
randomSeed()就是利用一个没连线的空引脚赋值。
示例:电位器控制LED灯亮度
其实很简单,analogInputVal获取到的值通过~引脚输出给电灯就可以了。
一个小问题在于:analogInputVal的范围是01023,analogWrite输出电灯亮度范围是0255,要怎么处理?有一个线程的函数:map
int ledpin=9;
void setup() {
Serial.begin(9600);
pinMode(ledpin,OUTPUT);
}
void loop() {
int analogInputVal = analogRead(A0);
Serial.print("analogInputVal:");
Serial.println(analogInputVal);
int brightness=map(analogInputVal,0,1023,0,255);
Serial.print("brightness:");
Serial.println(brightness);
analogWrite(ledpin,brightness);
}
|