好友
阅读权限10
听众
最后登录1970-1-1
|
作业要求器材:ESP32控制板*1、按键模块*1、24BJY48减速步进电机及驱动模块*1
1、控制板上电后步进电机无转动情况;
2、按下按键(按下并松开),步进电机开始转动;
3、再次按下按键,步进电机停止转动;
以下是完成程序:
// 步进电机 28BYJ-48 驱动引脚
const int IN1 = 33;
const int IN2 = 4;
const int IN3 = 2;
const int IN4 = 25;
// 按键引脚
const int keyPin = 26;
// 四相八拍步进电机节拍
int steps[8][4] = {
{1, 0, 0, 0},
{1, 1, 0, 0},
{0, 1, 0, 0},
{0, 1, 1, 0},
{0, 0, 1, 0},
{0, 0, 1, 1},
{0, 0, 0, 1},
{1, 0, 0, 1}
};
// 运行状态:false=停止,true=转动
bool motorRunning = false;
// 按键防抖
int lastKeyState = HIGH;
int keyState;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
void setup() {
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(keyPin, INPUT_PULLUP);
// 上电全部低电平,电机不转
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
void loop() {
// 按键检测(防抖)
int reading = digitalRead(keyPin);
if (reading != lastKeyState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != keyState) {
keyState = reading;
// 按键按下(低电平)
if (keyState == LOW) {
motorRunning = !motorRunning; // 切换启停状态
}
}
}
lastKeyState = reading;作业要求:器材:ESP32控制板*1、按键模块*1、24BJY48减速步进电机及驱动模块*1
1、控制板上电后步进电机无转动情况;
2、按下按键(按下并松开),步进电机开始转动;
3、再次按下按键,步进电机停止转动;
// 步进电机 28BYJ-48 驱动引脚
const int IN1 = 33;
const int IN2 = 4;
const int IN3 = 2;
const int IN4 = 25;
// 按键引脚
const int keyPin = 26;
// 四相八拍步进电机节拍
int steps[8][4] = {
{1, 0, 0, 0},
{1, 1, 0, 0},
{0, 1, 0, 0},
{0, 1, 1, 0},
{0, 0, 1, 0},
{0, 0, 1, 1},
{0, 0, 0, 1},
{1, 0, 0, 1}
};
// 运行状态:false=停止,true=转动
bool motorRunning = false;
// 按键防抖
int lastKeyState = HIGH;
int keyState;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
void setup() {
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(keyPin, INPUT_PULLUP);
// 上电全部低电平,电机不转
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
void loop() {
// 按键检测(防抖)
int reading = digitalRead(keyPin);
if (reading != lastKeyState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != keyState) {
keyState = reading;
// 按键按下(低电平)
if (keyState == LOW) {
motorRunning = !motorRunning; // 切换启停状态
}
}
}
lastKeyState = reading;
// 电机运行逻辑
if (motorRunning) {
for (int i = 0; i < 8; i++) {
digitalWrite(IN1, steps[i][0]);
digitalWrite(IN2, steps[i][1]);
digitalWrite(IN3, steps[i][2]);
digitalWrite(IN4, steps[i][3]);
delay(2);
}
} else {
// 停止时全部输出低,电机不耗电不抖动
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
}
|
免费评分
-
查看全部评分
|