带arduino按钮的开/关开关

带arduino按钮的开/关开关,arduino,Arduino,我正在尝试创建一个运行此代码的Arduino电路。基本上,通过超声波传感器模块,我设置了不同的距离范围。 在每个范围内,我都选择播放蜂鸣器,并用不同的组合点亮RGB led 到目前为止,一切正常,直到我决定添加一个按钮作为开关: 我想不出一个“打开/关闭”电路的代码。更具体地说,我想在电路关闭时点亮一个led(引脚n.11),并在它打开时正常工作,但现在只有当我一直按下按钮时,它才能在“打开”状态下工作,如果我松开它,电路会在最后一组频率(用于蜂鸣器)和颜色(用于RGB led)上“自我锁定”

我正在尝试创建一个运行此代码的Arduino电路。基本上,通过超声波传感器模块,我设置了不同的距离范围。 在每个范围内,我都选择播放蜂鸣器,并用不同的组合点亮RGB led


到目前为止,一切正常,直到我决定添加一个按钮作为开关: 我想不出一个“打开/关闭”电路的代码。更具体地说,我想在电路关闭时点亮一个led(引脚n.11),并在它打开时正常工作,但现在只有当我一直按下按钮时,它才能在“打开”状态下工作,如果我松开它,电路会在最后一组频率(用于蜂鸣器)和颜色(用于RGB led)上“自我锁定”

//蜂鸣器和超声波传感器的针脚
int const trigPin=10;
int const echoPin=9;
int const buzzPin=2;
//rgb led引脚(当我靠近一个对象时颜色会改变)
佛得角常数=3;
常数int BLU=5;
罗索常数=6;
//表示电路主状态的led引脚
常数int accPin=7;
//我想用作开/关开关的按钮的针脚
常量int buttonPin=11;
int stato=0;
int old=0;
常数int delayTime=5;
无效设置()
{
pinMode(VERDE,输出);
pinMode(蓝光,输出);
pinMode(ROSSO,输出);
pinMode(accPin,输出);
digitalWrite(VERDE,低位);
数字写入(蓝光,低电平);
digitalWrite(ROSSO,低端);
数字写入(accPin,低电平);
pinMode(按钮输入,输入);
pinMode(trigPin,输出);//trig pin将有脉冲输出
pinMode(echoPin,输入);//应输入echoPin以获得脉冲宽度
pinMode(buzzPin,输出);//输出buzzPin以控制蜂鸣器
}
void循环(){
stato=数字读取(按钮输入);
//如果电路关闭,我按下按钮打开,或者如果电路已经打开,那么就做这些事情
如果((stato==1)和&(old==0))| |((stato==0)和&(old==1))){
数字写入(accPin,低电平);
int duration,distance;//duration是输入脉冲宽度,distance是到障碍物的距离,单位为厘米
digitalWrite(trigPin,高);//在trigPin上输出宽度为1ms的脉冲
延迟(1);
数字写入(trigPin,低电平);
持续时间=脉冲信号(echoPin,高);//测量echoPin中的脉冲输入
//距离为29.1(从数据表中)偏差的持续时间的一半
距离=(持续时间/2)/29.1;
//下面的代码只是一个测试,以查看当从面对的对象移动时,从蜂鸣器获得不同的频率和从rgb led获得不同的颜色
如果(距离=0){
//嗡嗡声
音调(buzzPin,2000年);
digitalWrite(罗索高中);
}
如果(距离10){
//嗡嗡声
音调(buzzPin,1750);
数字写入(蓝色,高);
digitalWrite(罗索高中);
}
如果(距离20){
//嗡嗡声
音调(buzzPin,1250);
数字写入(蓝色,高);
}
如果(距离30){
//嗡嗡声
音调(buzzPin,1000);
数字写入(蓝色,高);
digitalWrite(VERDE,高);
}
如果(距离50){
//嗡嗡声
音调(buzzPin,750);
digitalWrite(VERDE,高);
}
如果(距离>=81){
noTone(buzzPin);//如果超出范围,请闭嘴
}
延迟(60);//等待60毫秒不会伤害任何人
digitalWrite(VERDE,低位);
数字写入(蓝光,低电平);
digitalWrite(ROSSO,低端);
old=1;
}
//如果电路接通,我按下按钮,就把它关掉
如果((old==1)和(&(stato=1)){old=0;}
//如果电路是关闭的,如果我让它像这样,不要做什么,但打开a led使其明显(引脚n.11)
如果((old==0)和&(stato==0)){
digitalWrite(VERDE,低位);
数字写入(蓝光,低电平);
digitalWrite(ROSSO,低端);
诺通(buzzPin);
数字写入(accPin,高);
}
}

使用整个代码或启动流程的部分创建一个函数,然后将中断连接到按钮插脚(您必须更换按钮插脚)。使用布尔键切换按钮按下

//pins for buzzer and ultrasonic sensor
int const trigPin = 10;
int const echoPin = 9;
int const buzzPin = 2;
//pins for rgb led(color changes  as i get closer to an object)
const int VERDE = 3;  
const int BLU = 5;  
const int ROSSO = 6;  
//pin for led representing main state of the circuit
const int accPin = 7;
// pins for button i want to use as an on/off switch
const int buttonPin = 11;
int stato=0;
int old = 0;

const int delayTime = 5; 
void setup()
{
  pinMode(VERDE, OUTPUT);  
  pinMode(BLU, OUTPUT);  
  pinMode(ROSSO, OUTPUT);
  pinMode(accPin,OUTPUT);  

  digitalWrite(VERDE, LOW);  
  digitalWrite(BLU, LOW);  
  digitalWrite(ROSSO, LOW); 
  digitalWrite(accPin,LOW); 

  pinMode(buttonPin,INPUT);

  pinMode(trigPin, OUTPUT); // trig pin will have pulses output
  pinMode(echoPin, INPUT); // echo pin should be input to get pulse width
  pinMode(buzzPin, OUTPUT); // buzz pin is output to control buzzering
}

void loop(){
  stato=digitalRead(buttonPin);

  //if the circuit is off and i turn it on by pressing the button, or if the circuit's already on, then do the things
  if(((stato==1)&&(old==0))||((stato==0)&&(old==1))){

  digitalWrite(accPin,LOW);

  int duration, distance;     // Duration will be the input pulse width and distance will be the distance to the obstacle in centimeters

  digitalWrite(trigPin, HIGH);   // Output pulse with 1ms width on trigPin
  delay(1);
  digitalWrite(trigPin, LOW);

  duration = pulseIn(echoPin, HIGH);  // Measure the pulse input in echo pin
  // Distance is half the duration devided by 29.1 (from datasheet)
  distance = (duration/2) / 29.1;

 // the following code is just a test to see get a different frequency from the buzzer and a different color from the rgb led, while moving from the facing object
    if (distance <= 10 && distance >= 0) {
      // Buzz
      tone(buzzPin, 2000);
        digitalWrite(ROSSO, HIGH);
    }
    if (distance <= 20 && distance > 10) {
      // Buzz
      tone(buzzPin, 1750);
        digitalWrite(BLU, HIGH);
        digitalWrite(ROSSO, HIGH);

    }
    if (distance <= 30 && distance > 20) {
      // Buzz
      tone(buzzPin, 1250);
      digitalWrite(BLU, HIGH);
    }
    if (distance <= 40 && distance > 30) {
      // Buzz
      tone(buzzPin, 1000);
      digitalWrite(BLU, HIGH);
      digitalWrite(VERDE, HIGH);
    }
    if (distance <= 80 && distance > 50) {
      // Buzz
      tone(buzzPin, 750);
      digitalWrite(VERDE, HIGH);
    }
    if(distance>=81){
      noTone(buzzPin);// if out of range then shut up
      }

   delay(60);   // Waiting 60 ms won't hurt any one
   digitalWrite(VERDE, LOW);  
   digitalWrite(BLU, LOW);  
   digitalWrite(ROSSO, LOW);
    old=1;
   }

  //if the circuit is on and i press the button, turn it off
  if((old==1)&&(stato=1)){old=0;}


  //if the circuit is off and if i let it like this, don't do nothing, but turn on the a led to make it obvious(pin n.11)
  if((old==0)&&(stato==0)){
    digitalWrite(VERDE, LOW);  
   digitalWrite(BLU, LOW);  
   digitalWrite(ROSSO, LOW);
   noTone(buzzPin);
   digitalWrite(accPin,HIGH);
    }
}