【内部资料】arduino磁铁靠近霍尔元件播放音频
作者:野牛程序员:2023-12-23 09:22:28Arduino阅读 2519
按下按钮一 LED1亮起 再按一下灭掉(可以按很多次那种) 磁铁靠近霍尔元件1时 播放第一段音频 磁铁靠近霍尔元件二时 播放第二段音频 按下按钮二 LED2、LED3、LED4亮起 两秒后LED2熄灭 再过两秒LED3熄灭 再过两秒LED4熄灭 磁铁靠近霍尔元件三时播放第三段音频 磁铁靠近霍尔元件四时播放第四段音频
#include <SoftwareSerial.h> #include "DFRobotDFPlayerMini.h" // 定义引脚 const int button1Pin = 2; const int button2Pin = 3; const int led1Pin = 4; const int led2Pin = 5; const int led3Pin = 6; const int led4Pin = 7; const int hall1Pin = 8; const int hall2Pin = 9; const int hall3Pin = 10; const int hall4Pin = 11; // const int mp3Pin = 12; bool led1State = HIGH; bool led2State = LOW; bool led3State = LOW; bool led4State = LOW; SoftwareSerial mySoftwareSerial(10, 1); // RX, TX连接到DFPlayer Mini模块的RX, TX DFRobotDFPlayerMini myDFPlayer; void setup() { // 设置引脚模式 pinMode(button1Pin, INPUT); pinMode(button2Pin, INPUT); pinMode(led1Pin, OUTPUT); pinMode(led2Pin, OUTPUT); pinMode(led3Pin, OUTPUT); pinMode(led4Pin, OUTPUT); pinMode(hall1Pin, INPUT); pinMode(hall2Pin, INPUT); pinMode(hall3Pin, INPUT); pinMode(hall4Pin, INPUT); // pinMode(mp3Pin, OUTPUT); // 初始状态,LED灭 digitalWrite(led1Pin, led1State); digitalWrite(led2Pin, led2State); digitalWrite(led3Pin, led3State); digitalWrite(led4Pin, led4State); Serial.begin(9600); mySoftwareSerial.begin(9600); if (!myDFPlayer.begin(mySoftwareSerial)) { Serial.println(F("初始化失败:")); Serial.println(F("1. 请检查连接!")); Serial.println(F("2. 请插入SD卡!")); while(true); } Serial.println(F("DFPlayer Mini在线。")); // 设置DFPlayer Mini模块为正常工作模式 myDFPlayer.setTimeOut(500); // 设置串口通信超时时间为500毫秒 myDFPlayer.volume(20); // 设置音量(0~30) } void loop() { // 按钮一逻辑 if (digitalRead(button1Pin) == HIGH) { delay(50); // 防抖动延迟 if (digitalRead(button1Pin) == HIGH) { led1State = !led1State; digitalWrite(led1Pin, led1State); } } // 按钮二逻辑 if (digitalRead(button2Pin) == LOW) { delay(50); // 防抖动延迟 if (digitalRead(button2Pin) == LOW) { led2State = HIGH; led3State = HIGH; led4State = HIGH; digitalWrite(led2Pin, led2State); digitalWrite(led3Pin, led3State); digitalWrite(led4Pin, led4State); delay(2000); for (int i = 0; i < 3; ++i) { switch (i) { case 0: led2State = LOW; break; case 1: led3State = LOW; break; case 2: led4State = LOW; break; } digitalWrite(led2Pin, led2State); digitalWrite(led3Pin, led3State); digitalWrite(led4Pin, led4State); delay(2000); } } } // 播放音频逻辑 if (digitalRead(hall1Pin) == HIGH) { playMP3(1); } if (digitalRead(hall2Pin) == HIGH) { playMP3(2); } if (digitalRead(hall3Pin) == HIGH) { playMP3(3); } if (digitalRead(hall4Pin) == HIGH) { playMP3(4); } } void playMP3(int track) { // 实现播放MP3的代码 myDFPlayer.play(track); // 播放MP3文件编号为1的音频 delay(1000); // 等待1秒钟,防止重复触发 }
代码二:
第二段就是按下按钮 舵机开始旋转 再按一次停下(可以按很多次那种)磁铁靠近霍尔元件五时 播放第五段音频 磁铁靠近霍尔元件六时 播放第六段音频 磁铁靠近霍尔元件七时 播放第七段音频 磁铁靠近霍尔元件八时 播放第八段音频 磁铁靠近霍尔元件九时 播放第九段音频 磁铁靠近霍尔元件十时 播放第十段音频 磁铁靠近霍尔元件十一时 播放第十一段音频 (磁铁靠近这几个霍尔元件是没有顺序的 随机的)
#include "Arduino.h" #include <SoftwareSerial.h> #include "DFRobotDFPlayerMini.h" #include <Servo.h> // 定义引脚 const int button1Pin = 13; const int hall1Pin = 3; const int hall2Pin = 4; const int hall3Pin = 5; const int hall4Pin = 6; const int hall5Pin = 7; const int hall6Pin = 8; const int hall7Pin = 9; const int ServoPin = 12; // const int mp3Pin = 12; // SoftwareSerial mySoftwareSerial(10,11); // RX, TX连接到DFPlayer Mini模块的TX RX, // DFRobotDFPlayerMini myDFPlayer; SoftwareSerial mySoftwareSerial(10,11);// RX,TX DFRobotDFPlayerMini myDFPlayer; Servo myServo; int buttonState = 0; int lastButtonState = 0; int servoState = 0; // int rotating = 0; bool w=true; int rotating = 0; // 0表示停止旋转,1表示正在旋转 int rotateDirection = 1; // 1表示正向旋转,-1表示反向旋转 void setup() { // 设置引脚模式 pinMode(button1Pin, INPUT); pinMode(hall1Pin, INPUT); pinMode(hall2Pin, INPUT); pinMode(hall3Pin, INPUT); pinMode(hall4Pin, INPUT); pinMode(hall5Pin, INPUT); pinMode(hall6Pin, INPUT); pinMode(hall7Pin, INPUT); // pinMode(mp3Pin, OUTPUT); Serial.begin(9600); // mySoftwareSerial.begin(9600); // if (!myDFPlayer.begin(mySoftwareSerial)) { // Serial.println(F("初始化失败:")); // Serial.println(F("1. 请检查连接!")); // Serial.println(F("2. 请插入SD卡!")); // while (true); // } mySoftwareSerial.begin(9600); if (!myDFPlayer.begin(mySoftwareSerial)){ myDFPlayer.volume (9) ; Serial.println(F("1. 请检查连接!")); } myServo.attach(ServoPin); // 舵机控制引脚 myServo.write(0); // 初始位置 // 设置DFPlayer Mini模块为正常工作模式 // myDFPlayer.setTimeOut(500); // 设置串口通信超时时间为500毫秒 // myDFPlayer.volume(20); // 设置音量(0~30) } void loop() { // buttonState = digitalRead(button1Pin); // if (buttonState != lastButtonState) { // myServo.write(90); // delay(50); // 消抖 // }else{ // myServo.write(0); // } // lastButtonState = buttonState; // buttonState = digitalRead(button1Pin); // if (buttonState != lastButtonState) { // Serial.println(F("1")); // if (buttonState == LOW) { // // 按钮按下,切换舵机状态 // Serial.println(F("2")); // if (servoState == 0) { // Serial.println(F("3")); // for(int pos = 0;pos <= 180;pos += 1){ // myServo.write(pos); // delay(15); // } // for (int pos=180;pos >= 0;pos-= 1){ // myServo.write(pos); // delay(15); // } // servoState = 1; // } else { // Serial.println(F("4")); // myServo.write(0); // 停止旋转 // servoState = 0; // } // } // delay(50); // 消抖 // } // lastButtonState = buttonState; // buttonState = digitalRead(button1Pin); // if (buttonState != lastButtonState) { // if (buttonState == LOW) { // rotating = !rotating; // 切换旋转状态 // } // delay(50); // 消抖 // } // lastButtonState = buttonState; // if (rotating) { // // myServo.write(90); // 开始旋转 // Serial.println(F("3")); // for(int pos = 0;pos <= 180;pos += 1){ // myServo.write(pos); // delay(15); // } // for (int pos=180;pos >= 0;pos-= 1){ // myServo.write(pos); // delay(15); // } // } else { // Serial.println(F("4")); // myServo.write(0); // 停止旋转 // } buttonState = digitalRead(button1Pin); // Serial.print(F("buttonState")); // Serial.println(buttonState); if (buttonState != lastButtonState) { if (buttonState == LOW) { rotating = !rotating; // 切换旋转状态 if (!rotating) { // Serial.println(F("4")); myServo.write(0); // 停止舵机 }else{ if (rotating) { for(int i=1;i<=5;i++){ for(int pos = 0;pos <= 180;pos += 1){ myServo.write(pos); delay(15); } for (int pos=180;pos >= 0;pos-= 1){ myServo.write(pos); delay(15); } delay(15); // 控制舵机旋转速度 } myServo.write(0); } } } delay(50); // 消抖 } lastButtonState = buttonState; // Serial.print(F("rotating")); // Serial.println(rotating); Serial.print(F("hall1Pin")); Serial.println(digitalRead(hall1Pin)); Serial.print(F("hall2Pin")); Serial.println(digitalRead(hall2Pin)); Serial.print(F("hall3Pin")); Serial.println(digitalRead(hall3Pin)); Serial.print(F("hall4Pin")); Serial.println(digitalRead(hall4Pin)); Serial.print(F("hall5Pin")); Serial.println(digitalRead(hall5Pin)); Serial.print(F("hall6Pin")); Serial.println(digitalRead(hall6Pin)); Serial.print(F("hall7Pin")); Serial.println(digitalRead(hall7Pin)); //播放音频逻辑 if (digitalRead(hall1Pin) == LOW) { playMP3(1); } if (digitalRead(hall2Pin) == LOW) { playMP3(2); } if (digitalRead(hall3Pin) == LOW) { playMP3(3); } if (digitalRead(hall4Pin) == LOW) { playMP3(4); } if (digitalRead(hall5Pin) == LOW) { playMP3(5); } if (digitalRead(hall6Pin) == LOW) { playMP3(6); } if (digitalRead(hall7Pin) == LOW) { playMP3(7); } } void playMP3(int track) { // 实现播放MP3的代码 myDFPlayer.play(track); // 播放MP3文件编号为1的音频 delay(50); // 等待1秒钟,防止重复触发 }
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
