JoeColin 2022-07-20 18:02 采纳率: 0%
浏览 84
已结题

Arduino 蜂鸣器+按键+旋钮 编程代码

求解Arduino 蜂鸣器+按键+旋钮 (自学)

img

根据图片的布线编写代码

按下按键,旋转旋钮播放不同响声,松开按键声音停止,同时旋转旋钮无效。

感恩感恩

  • 写回答

3条回答 默认 最新

  • ilmss 2022-07-20 20:47
    关注
    获得10.00元问题酬金
    
    int Left_motor_go=8;     //左电机前进(IN1)
    
    int Left_motor_back=9;     //左电机后退(IN2)
    
    
    
    int Right_motor_go=10;    // 右电机前进(IN3)
    
    int Right_motor_back=11;    // 右电机后退(IN4)
    
    
    
    int key=7;//定义按键 数字7 接口
    
    int beep=12;//定义蜂鸣器 数字12 接口
    
    
    
    void setup()
    
    {
    
      //初始化电机驱动IO为输出方式
    
      pinMode(Left_motor_go,OUTPUT); // PIN 8 (PWM)
    
      pinMode(Left_motor_back,OUTPUT); // PIN 9 (PWM)
    
      pinMode(Right_motor_go,OUTPUT);// PIN 10 (PWM) 
    
      pinMode(Right_motor_back,OUTPUT);// PIN 11 (PWM)
    
      pinMode(key,INPUT);//定义按键接口为输入接口
    
      pinMode(beep,OUTPUT);
    
    }
    
    void run(int time)     // 前进
    
    {
    
      digitalWrite(Right_motor_go,HIGH);  // 右电机前进
    
      digitalWrite(Right_motor_back,LOW);     
    
      analogWrite(Right_motor_go,200);//PWM比例0~255调速,左右轮差异略增减
    
      analogWrite(Right_motor_back,0);
    
      digitalWrite(Left_motor_go,LOW);  // 左电机前进
    
      digitalWrite(Left_motor_back,HIGH);
    
      analogWrite(Left_motor_go,0);//PWM比例0~255调速,左右轮差异略增减
    
      analogWrite(Left_motor_back,200);
    
      delay(time * 100);   //执行时间,可以调整  
    
    }
    
    
    
    void brake(int time)         //刹车,停车
    
    {
    
      digitalWrite(Right_motor_go,LOW);
    
      digitalWrite(Right_motor_back,LOW);
    
      digitalWrite(Left_motor_go,LOW);
    
      digitalWrite(Left_motor_back,LOW);
    
      delay(time * 100);//执行时间,可以调整  
    
    }
    
    
    
    void left(int time)         //左转(左轮不动,右轮前进)
    
    {
    
      digitalWrite(Right_motor_go,HIGH);  // 右电机前进
    
      digitalWrite(Right_motor_back,LOW);
    
      analogWrite(Right_motor_go,200); 
    
      analogWrite(Right_motor_back,0);//PWM比例0~255调速
    
      digitalWrite(Left_motor_go,LOW);   //左轮后退
    
      digitalWrite(Left_motor_back,LOW);
    
      analogWrite(Left_motor_go,0); 
    
      analogWrite(Left_motor_back,0);//PWM比例0~255调速
    
      delay(time * 100);  //执行时间,可以调整  
    
    }
    
    
    
    void spin_left(int time)         //左转(左轮后退,右轮前进)
    
    {
    
      digitalWrite(Right_motor_go,HIGH);  // 右电机前进
    
      digitalWrite(Right_motor_back,LOW);
    
      analogWrite(Right_motor_go,200); 
    
      analogWrite(Right_motor_back,0);//PWM比例0~255调速
    
      digitalWrite(Left_motor_go,HIGH);   //左轮后退
    
      digitalWrite(Left_motor_back,LOW);
    
      analogWrite(Left_motor_go,200); 
    
      analogWrite(Left_motor_back,0);//PWM比例0~255调速
    
      delay(time * 100);  //执行时间,可以调整  
    
    }
    
    
    
    void right(int time)        //右转(右轮不动,左轮前进)
    
    {
    
      digitalWrite(Right_motor_go,LOW);   //右电机后退
    
      digitalWrite(Right_motor_back,LOW);
    
      analogWrite(Right_motor_go,0); 
    
      analogWrite(Right_motor_back,0);//PWM比例0~255调速
    
      digitalWrite(Left_motor_go,LOW);//左电机前进
    
      digitalWrite(Left_motor_back,HIGH);
    
      analogWrite(Left_motor_go,0); 
    
      analogWrite(Left_motor_back,200);//PWM比例0~255调速
    
      delay(time * 100);  //执行时间,可以调整  
    
    }
    
    
    
    void spin_right(int time)        //右转(右轮后退,左轮前进)
    
    {
    
      digitalWrite(Right_motor_go,LOW);   //右电机后退
    
      digitalWrite(Right_motor_back,HIGH);
    
      analogWrite(Right_motor_go,0); 
    
      analogWrite(Right_motor_back,200);//PWM比例0~255调速
    
      digitalWrite(Left_motor_go,LOW);//左电机前进
    
      digitalWrite(Left_motor_back,HIGH);
    
      analogWrite(Left_motor_go,0); 
    
      analogWrite(Left_motor_back,200);//PWM比例0~255调速
    
      delay(time * 100);  //执行时间,可以调整    
    
    }
    
    
    
    void back(int time)          //后退
    
    {
    
      digitalWrite(Right_motor_go,LOW);  //右轮后退
    
      digitalWrite(Right_motor_back,HIGH);
    
      analogWrite(Right_motor_go,0);
    
      analogWrite(Right_motor_back,150);//PWM比例0~255调速
    
      digitalWrite(Left_motor_go,HIGH);  //左轮后退
    
      digitalWrite(Left_motor_back,LOW);
    
      analogWrite(Left_motor_go,150);
    
      analogWrite(Left_motor_back,0);//PWM比例0~255调速
    
      delay(time * 100);     //执行时间,可以调整  
    
    }
    
    
    
    void keysacn()
    
    {
    
      int val;
    
      val=digitalRead(key);//读取数字7 口电平值赋给val
    
      while(!digitalRead(key))//当按键没被按下时,一直循环
    
      {
    
        val=digitalRead(key);//此句可省略,可让循环跑空
    
      }
    
      while(digitalRead(key))//当按键被按下时
    
      {
    
        delay(10);  //延时10ms
    
        val=digitalRead(key);//读取数字7 口电平值赋给val
    
        if(val==HIGH)  //第二次判断按键是否被按下
    
        {
    
          digitalWrite(beep,HIGH);    //蜂鸣器响
    
          while(!digitalRead(key))  //判断按键是否被松开
    
            digitalWrite(beep,LOW);   //蜂鸣器停止
    
        }
    
        else
    
          digitalWrite(beep,LOW);//蜂鸣器停止
    
      }
    
    }
    
    
    
    void loop()
    
    {
    
      keysacn();     //调用按键扫描函数
    
      back(10); //后退1s
    
      brake(5); //停止0.5s
    
      run(10);//前进1s
    
      brake(5); //停止0.5s
    
      left(10);//向左转1s
    
      right(10);//向右转1s
    
      spin_left(20);//向左旋转2s
    
      spin_right(20);//向右旋转2s
    
      brake(5);  //停车
    
    } 
    
    评论

报告相同问题?

问题事件

  • 系统已结题 7月28日
  • 创建了问题 7月20日