jinnianliuxing 2022-03-25 20:27
浏览 451
已结题

ESP32实现控制led灯闪烁,

之前用的esp8266,做到后面发现引脚不够了,就改成用esp32,
这是之前用的代码
const int ledPin = 23; //led接D0引脚
int ledState = LOW; //led引脚状态变量
int hw = 15; //设置红外传感器的引脚为D6
int MQ = 4; //设置烟雾传感器的引脚为D5
int fmq= 2; //蜂鸣器接D3引脚
int keyt=5; //复位按键接D1引脚
int x = 0; //转换紧急状态和正常状态的变量
unsigned long previousMillis = 0; //上一次100毫秒的millis值
const long interval = 100; //定时100毫秒

void setup() {
//设置各引脚的工作方式
pinMode(ledPin ,OUTPUT);
pinMode(fmq,OUTPUT);
pinMode(keyt,INPUT);
//设置波特率
Serial.begin(115200);
Serial.println(digitalRead(hw));
Serial.println(digitalRead(MQ));
//初始化各引脚
digitalWrite(ledPin, LOW);
digitalWrite(fmq,LOW);
}

void loop() {
unsigned long currentMillis = millis(); //将Arduino开机后运行的毫秒数赋给currentMillis
Serial.println(digitalRead(hw));
if(digitalRead(hw)==LOW){ // 如果红外传感器输出高电平
x = 1;
digitalWrite(ledPin, HIGH);//灯1亮
digitalWrite(fmq,HIGH);
}
Serial.println(digitalRead(MQ));
if(digitalRead(MQ)==LOW){ // 如果烟雾传感器输出高电平
x = 1;
digitalWrite(ledPin, HIGH);//灯1亮
digitalWrite(fmq,HIGH);
}
Serial.println(digitalRead(keyt));
if(digitalRead(keyt)==HIGH){
x = 0;
digitalWrite(fmq,LOW);
digitalWrite(ledPin, LOW);

}

else {
digitalWrite(ledPin, LOW);}

//100毫秒led状态反转

if (currentMillis - previousMillis >= interval&&x) {
previousMillis = currentMillis; // 每100毫秒将currentMillis值赋给previousMillis
if (ledState == LOW) { //led状态反转
ledState = HIGH;
} else {
ledState = LOW;
}
digitalWrite(ledPin, ledState);
}
else if (millis() - previousMillis <= 0) //防止millis函数溢出
{
previousMillis = millis();
}
}

现在只能给信号灯亮,不能闪灯,想要闪灯,和蜂鸣器搭配做声光报警。

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 4月2日
    • 创建了问题 3月25日

    悬赏问题

    • ¥15 为啥画版图在Run DRC会出现Connect Error?可我Calibre的hostname和计算机的hostname已经设置成一样的了。
    • ¥20 网站后台使用极速模式非常的卡
    • ¥20 Keil uVision5创建project没反应
    • ¥15 mmseqs内存报错
    • ¥15 vika文档如何与obsidian同步
    • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
    • ¥15 陆空双模式无人机飞控设置
    • ¥15 sentaurus lithography
    • ¥100 求抖音ck号 或者提ck教程
    • ¥15 关于#linux#的问题:子进程1等待子进程A、B退出后退出(语言-c语言)