学习任务:
学会使用旋转编码器
关注微信公众号:爱享生活科技 \color{#FF0000}{关注微信公众号:爱享生活科技} 关注微信公众号:爱享生活科技
组件:
- Arduion主板
- ULN2003达林阵列驱动
- 触摸开关
- 风扇组件
- 直流电机
- 杜邦线
- 面包板
- USB数据线
下图是风扇组件
下图是ULN2003达林阵列组件
实验步骤:
1.建立电路
Arduion | ULN2003达林阵列组件 |
---|---|
9 | CLK |
10 | DT |
GND | - |
5v | + |
Arduion | 触摸开关 |
---|---|
2 | GIS |
5v | VCC |
GND | GND |
2.烧录代码
const int buttonPin = 2;
//LED引脚编号
const int ledPin = 13;
const int motorIn1 = 9;
const int motorIn2 = 10;
int stat = 0;
#define rank1 150
#define rank2 200
#define rank3 250
int buttonState;
int lastButtonState = LOW;
long lastDebounceTime = 0;
long debounceDelay = 50;
void setup()
{
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(motorIn1,OUTPUT);
pinMode(motorIn2,OUTPUT);
Serial.begin(9600);
}
void loop() {
int reading = digitalRead(buttonPin);
if (reading != lastButtonState)
{
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay)
{
if (reading != buttonState)
{
buttonState = reading;
// 只有当按钮状态为“高”时,才切换LED
if (buttonState == HIGH)
{
digitalWrite(ledPin, HIGH); //turn on the LED
stat = stat + 1;
if(stat >= 4)
{
stat = 0;
}
}
else
digitalWrite(ledPin, LOW);
}
}
switch(stat)
{
case 1:
//当stat=1时,将电机转速设置为rank1=150
clockwise(rank1);
break;
case 2:
//当stat=2时,将电机转速设置为rank2=200
clockwise(rank2);
break;
case 3:
//当stat=3时,将电机转速设置为rank3=250
clockwise(rank3);
break;
default:
clockwise(0);
}
lastButtonState = reading;
}
void clockwise(int Speed)//
{
analogWrite(motorIn1,0);
analogWrite(motorIn2,Speed);
}
3.实验现象
按下按钮的次数会改变风扇的转速,按下一次会使其快速旋转,按下第四次会使其停止旋转。