当前位置:首页Arduino > 正文

【内部资料】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秒钟,防止重复触发
}

\"c36fe37f65e79f77857a876a27c299e.png\"/


\"028338a798483acb34c2ba38be3e6d2.png\"/


代码二:

第二段就是按下按钮 舵机开始旋转 再按一次停下(可以按很多次那种)磁铁靠近霍尔元件五时 播放第五段音频 磁铁靠近霍尔元件六时 播放第六段音频  磁铁靠近霍尔元件七时 播放第七段音频 磁铁靠近霍尔元件八时 播放第八段音频 磁铁靠近霍尔元件九时 播放第九段音频 磁铁靠近霍尔元件十时 播放第十段音频 磁铁靠近霍尔元件十一时 播放第十一段音频 (磁铁靠近这几个霍尔元件是没有顺序的 随机的)

#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
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击