3. 序列埠的輸出以及按鈕消抖
序列埠的輸出以及按鈕消抖
0. 一段簡短的廢話:
由於我的電腦重置之後很多之前使用的軟件都不見了,包括用來畫圖的軟件,所以以後我不一定會提供電路圖.
1. 上一期的答案:
1 /* 2 * 使用按鈕控制LED燈的交替閃爍 3 */ 4 5 int buttonState = 0; 6 7 void setup() { 8 // 定義11,12腳為輸出,控制LED的亮滅 9 pinMode(11, OUTPUT); 10 pinMode(12, OUTPUT); 11 // 定義7腳為輸入,判斷按鈕的狀態 12 pinMode(7, INPUT); 13 } 14 15 void loop() { 16 // 獲取按鈕的狀態 17 buttonState = digitalRead(7); 18 19 if(buttonState == HIGH) { 20 // 低電平,11腳的燈熄滅,12腳的燈亮起 21 digitalWrite(11, LOW); 22 digitalWrite(12, HIGH); 23 } else { 24 // 高電平,12腳的燈熄滅,11腳的燈亮起 25 digitalWrite(12, LOW); 26 digitalWrite(11, HIGH); 27 } 28 }
帶我我放在這個地方,儘管注釋很詳細,希望大家自己多動手和思考.
2. 序列埠的輸出
序列埠的輸出講白了就是指由Arduino通過串口發送消息給電腦所以我們今天要做的就是記錄一個按鈕被按下的次數(按下,鬆開為一次,按下不放不計數).
- 代碼展示:
- 簡要說明:
- 13行的9600通信速度可以使用其他的,但是一般都是使用9600
- 20行中與操作使用的是&&,除了&&你還可以使用and.同理||可以使用or
- 23行加一操作使用的是自加一操作++,你也可以使用count += 1,或者count = count +1;
- 簡要說明:
/* 序列埠的輸出(向電腦傳輸數據) 統計按鈕的按下次數 */ // 按鈕上一次的狀態 int beforState = 0; // 按鈕按下的次數 int count = 0; void setup() { // 串口通信速度 Serial.begin(9600); pinMode(7, INPUT); } void loop() { // 定義按鈕的當前狀態,并從7號腳讀取 int buttonState = digitalRead(7); if( buttonState == HIGH && beforState == LOW ) { // 如果按鈕是高電位,並且前一次是低電位 // 按鈕按下,按下的次數加一 count++; // 傳送給電腦 Serial.println(count); } // 按鍵消抖 if ( buttonState != beforState ) { delay(20); } // 記錄本次的按鈕狀態 beforState = buttonState; //delay(100); }
代碼上傳之後點擊arduinoIDE右上角 放大鏡的圖標就能看見輸出
3. 關於消抖
其實消抖的代碼已經寫在上面了,我就不做過多的解釋.其實消抖的方法還有很多,除了這一種你還可以寫兩個if都是可以的.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用