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

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

img

根据图片的布线编写代码

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

感恩感恩


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);  //停车

} 

https://blog.csdn.net/weixin_50198463/article/details/121485240?spm=1005.2026.3001.5635&utm_medium=distribute.pc_relevant_ask_down.none-task-blog-2~default~OPENSEARCH~Rate-4-121485240-ask-7760495.pc_feed_download_top3ask&depth_1-utm_source=distribute.pc_relevant_ask_down.none-task-blog-2~default~OPENSEARCH~Rate-4-121485240-ask-7760495.pc_feed_download_top3ask

这个不好搞。。