Arduino 学习笔记

一、基础概念

Arduino 是一个很有趣的硬件开发板,我们可以用它来做很多好玩的东西,像控制小灯亮灭、读取按键信号 。写程序的时候,有 setuploop 两个重要函数:

  • setup:程序一开始会先执行这里面的内容,一般用来设置引脚模式(比如让某个引脚当输入或输出)、初始化串口这些准备工作,只执行一次。
  • loopsetup 执行完后,就会不断重复执行 loop 里的代码,让我们的功能一直运行 。

二、代码案例逐句解析

案例 1:读取引脚数字信号并串口打印

// sketch_jul07c.ino 文件,这是 Arduino 程序的代码文件
void setup() { 
  // 设置引脚 4 为输入模式,这样引脚 4 就能接收外部的信号啦,比如按键的信号
  pinMode(4, INPUT); 
  // 初始化串口,波特率设为 9600,这样电脑和 Arduino 就能通过串口通信,把数据传送到电脑上显示
  Serial.begin(9600); 
  // 这里本来有定义变量 a 的代码,被注释掉了,注释就是把代码变成说明文字,程序不会执行
  // int a; 
}
// 定义全局变量 a,全局变量在整个程序里都能用到,不像在函数里定义的变量只能在函数里用
int a; 
void loop() { 
  // 从引脚 4 读取数字信号,要么是 0(低电平,比如按键没按下),要么是 1(高电平,比如按键按下),把读到的值存到变量 a 里
  a = digitalRead(4); 
  // 通过串口把变量 a 的值打印出来,还会自动换一行,这样我们在电脑串口监视器就能看到啦
  Serial.println(a); 
  // 延时 20 毫秒,让程序稍微停一停,别跑得太快,这样读取信号更稳定
  delay(20); 
}

案例 2:读取信号并满足条件时串口打印特定内容

// sketch_jul07c.ino 文件
void setup() { 
  pinMode(4, INPUT); 
  Serial.begin(9600); 
  // int a; 
}
int a; 
void loop() { 
  a = digitalRead(4); 
  // 如果读到引脚 4 的信号是 1(也就是条件成立),就执行花括号里的代码
  if (a == 1) { 
    // 在串口打印一串横线,这样我们就知道检测到按键按下(假设高电平是按下)的信号啦
    Serial.println("-------------------"); 
  }
  delay(20); 
}

案例 3:用标志变量翻转状态并串口打印

// sketch_jul12a.ino 文件
void setup() { 
  pinMode(4, INPUT); 
  Serial.begin(9600); 
}
int a; 
// 定义标志变量 flag,初始值设为 1,用它来标记某种状态,比如可以标记小灯该不该亮
int flag = 1; 
void loop() { 
  a = digitalRead(4); 
  // 要是引脚 4 读到的信号是 1,就把 flag 的值翻转,1 变 -1,-1 变 1
  if (a == 1) { 
    flag = -flag; 
    // 把翻转后的 flag 值通过串口打印出来,看看状态变化
    Serial.println(flag); 
  }
  delay(20); 
}

案例 4:处理按键抖动(简单延时消抖)并翻转标志

// sketch_jul12b.ino 文件
void setup() { 
  pinMode(4, INPUT); 
  Serial.begin(9600); 
}
int a; 
int flag = 1; 
void loop() { 
  a = digitalRead(4); 
  if (a == 1) { 
    flag = -flag; 
    Serial.println(flag); 
    // 这里延时 1000 毫秒(1 秒),因为按键按下的时候,可能会有抖动,也就是信号会乱跳几下,延时一下就可以消掉这些抖动,让程序准确识别按键按下这一次操作
    delay(1000); 
  }
  delay(20); 
}

案例 5:根据标志变量控制引脚输出电平

// sketch_jul12b.ino 文件
void setup() { 
  pinMode(4, INPUT); 
  Serial.begin(9600); 
  // 设置引脚 2 为输出模式,这样引脚 2 就可以输出电平,控制小灯这些设备啦
  pinMode(2, OUTPUT); 
}
int a; 
int flag = 1; 
void loop() { 
  a = digitalRead(4); 
  if (a == 1) { 
    flag = -flag; 
    Serial.println(flag); 
    delay(1000); 
  }
  // 如果 flag 等于 1,就把引脚 2 设为高电平(比如让小灯亮)
  if (flag == 1) { 
    digitalWrite(2, HIGH); 
  } else { 
    // 如果 flag 不是 1(也就是 -1 啦),就把引脚 2 设为低电平(比如让小灯灭)
    digitalWrite(2, LOW); 
  }
  delay(20); 
}

案例 6:清晰标注分支结构的控制逻辑

// sketch_jul12b.ino 文件
void setup() { 
  pinMode(4, INPUT); 
  Serial.begin(9600); 
  pinMode(2, OUTPUT); 
}
int a; 
int flag = 1; 
void loop() { 
  a = digitalRead(4); 
  if (a == 1) { 
    flag = -flag; 
    Serial.println(flag); 
    delay(1000); 
  }
  // 这里说明是双分支结构,满足 flag == 1 走一个分支,不满足走另一个分支
  if (flag == 1) { 
    digitalWrite(2, HIGH); 
  } else { 
    // 注释说明 else 后面不用再接条件啦,直接执行对应的操作
    digitalWrite(2, LOW); 
  }
  delay(20); 
}

案例 7:按键计数并串口打印计数结果

// sketch_jul12c.ino 文件
void setup() { 
  pinMode(4, INPUT); 
  Serial.begin(9600); 
  pinMode(2, OUTPUT); 
}
// 原来的全局变量 a 被注释掉啦,现在不用它啦
// int a; 
// 定义计数变量 cnt,初始值 0,用来数按键按了多少次
int cnt = 0; 
// 注释教大家怎么给变量取名字,能包含大写字母、小写字母、下划线、美元符号、数字字符,但是数字不能放开头哦
// 如何给变量取名字 可以包括大写字母、小写字母、下划线、美元符号、数字字符。但是数字字符不能放在开头
void loop() { 
  // 原来的读取引脚 4 信号给 a 的代码被注释掉啦
  // a = digitalRead(4); 
  // 直接读取引脚 4 的信号,判断是否为 1(按键按下)
  if (digitalRead(4) == 1) { 
    // 每次按键按下,cnt 就加 1,记录按键次数
    cnt = cnt + 1; 
    // 串口打印“按键的值:”,不换行,这样后面打印计数结果能连在一起
    Serial.print("按键的值:"); 
    // 接着打印 cnt 的值,还会换行,这样每次按键后,串口就会显示“按键的值:X”(X 是计数)
    Serial.println(cnt); 
    // 延时 1000 毫秒消抖,让按键按下一次只计数一次
    delay(1000); 
  }
  delay(20); 
}

三、总结

这些代码都是围绕着读取引脚 4 的数字信号(比如按键信号),然后做不同的事情,像串口打印、控制另一个引脚电平、计数 。关键的点有:

  • pinMode 设置引脚是输入还是输出模式。
  • digitalRead 读取输入引脚的数字信号(0 或 1 )。
  • digitalWrite 控制输出引脚的电平(高电平 HIGH 或低电平 LOW )。
  • if 语句做条件判断,满足条件就执行对应的操作,还可以用 else 处理不满足条件的情况 。
  • 变量可以用来存数据,像标志变量 flag 标记状态,计数变量 cnt 记录按键次数 。
  • delay 可以用来延时,消消按键抖动,让程序运行更稳定 。

这样一步步跟着代码理解,就能慢慢学会用 Arduino 做一些简单好玩的小项目啦,比如做个按键控制小灯亮灭、按键计数的小装置 !

0 条评论

目前还没有评论...