Arduino平台ESP32基础:点灯与中断函数

实验1:waterBlink流水灯实验

先设置200延迟后设置400延迟是为了让每个灯珠都亮灭1s,具体没要求,按照个人喜好即可。

void setup()
{
  pinMode(19, OUTPUT); //设置19号管脚为输出管脚
  pinMode(5, OUTPUT);  //设置5号管脚为输出管脚
  pinMode(16, OUTPUT); //设置16号管脚为输出管脚
  pinMode(0, OUTPUT);  //设置0号管脚为输出管脚
}
void loop()
{
  digitalWrite(19, HIGH); //设置19号管脚为高电平
  delay(200);             //延迟200ms
  digitalWrite(5, HIGH);  //设置5号管脚为高电平
  delay(200);             //延迟200ms
  digitalWrite(16, HIGH); //设置16号管脚为高电平
  delay(200);             //延迟200ms
  digitalWrite(0, HIGH);  //设置0号管脚为高电平
  delay(400);             //延迟400ms
  digitalWrite(19, LOW);  //设置19号管脚为低电平
  delay(200);             //延迟200ms
  digitalWrite(5, LOW);   //设置5号管脚为低电平
  delay(200);             //延迟200ms
  digitalWrite(16, LOW);  //设置16号管脚为低电平
  delay(200);             //延迟200ms
  digitalWrite(0, LOW);   //设置10号管脚为低电平
  delay(400);             //延迟400ms
}

杜邦线连接GND一排接地,串口-灯珠-电阻-接地。

实验2:buttonSerial串口按钮

使用中断函数来监控按钮,当按下时就运行对应函数。

int pushButton = 22; //设置21号管脚名叫pushButton
void setup()
{
  Serial.begin(115200);       //设置串口波特率为115200
  pinMode(pushButton, INPUT); //设置pushButton管脚为输入管脚
  attachInterrupt(pushButton, serviceRoutine, FALLING);
  //当pushButton管脚变为FALLING时serviceRoutine函数运行
}
void serviceRoutine()
{
  int buttonState = digitalRead(pushButton); //把pushButton的数字信号传递给buttonState
  Serial.println(buttonState);               //串口输出buttonState
}
void loop() {}

电源-管脚-开关-上拉电阻-接地。

实验3:buttonWaterBlink按钮控制流水灯

结合实验1和实验2即可

int pushButton = 22;
void setup()
{
  pinMode(pushButton, OUTPUT);//设置button管脚为输入管脚
  pinMode(19, OUTPUT);//设置19号管脚为输出管脚
  pinMode(5, OUTPUT);//设置5号管脚为输出管脚
  pinMode(16, OUTPUT);//设置16号管脚为输出管脚
  pinMode(0, OUTPUT);//设置0号管脚为输出管脚
  attachInterrupt(pushButton, waterBlink, FALLING);
}
void waterBlink()
{
  digitalWrite(19, HIGH);//设置19号管脚为高电平
  delay(200);//延迟200ms
  digitalWrite(5, HIGH);//设置5号管脚为高电平
  delay(200);//延迟200ms
  digitalWrite(16, HIGH);//设置16号管脚为高电平
  delay(200);//延迟200ms
  digitalWrite(0, HIGH);//设置0号管脚为高电平
  delay(400);//延迟400ms
  digitalWrite(19, LOW);//设置19号管脚为低电平
  delay(200);//延迟200ms
  digitalWrite(5, LOW);//设置5号管脚为低电平
  delay(200);//延迟200ms
  digitalWrite(16, LOW);//设置16号管脚为低电平
  delay(200);//延迟200ms
  digitalWrite(0, LOW);//设置10号管脚为低电平
  delay(400);//延迟400ms
}
void loop()
{
  while(digitalRead(pushButton) == HIGH){}
  if(digitalRead(pushButton) == LOW)
    waterBlink();
}

串口-灯珠-电阻-接地。电源-管脚-开关-上拉电阻-接地。

实验4:touchInterrupt触摸串口

中断函数attachInterrupt(digitalPinToInterrupt(pin), ISR, mode)。pin是接收INPUT的GPIO,接收来自填入数字的引脚的信号。当接收到的信号满足mode时,就会执行ISR。

int threshold = 40;//设置触发阈值
bool touch = false;//默认不触发
void touchDetected()
{
  touch = true;//ISR触发
}
void setup()
{
  Serial.begin(115200);//设置串口波特率
  delay(500);//稍加延迟等待
  Serial.println("ready");
  touchAttachInterrupt(27, touchDetected, threshold);
  //当27号管脚触摸超过阈值时执行函数
}
void loop()
{
  if (touch)
  {
    Serial.println("GPIO_27");//串口输出信息
    touch = false;//恢复成未触发
  }
  delay(500);//稍加延迟等待
}

串口示意图。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值