【问题标题】:Arduino infiniti toneArduino 英菲尼迪语气
【发布时间】:2020-04-06 19:22:23
【问题描述】:

我正在制作烟雾探测器。 当它检测到烟雾时,应该用蜂鸣器发出警报。 有什么办法可以让它永远嗡嗡作响,直到外部中断(例如重启引脚)? 或者我可以从tone() 函数中删除时间。 这是我使用的代码。

int sensorValue;

int digitalValue;
int green = 8;
int red = 7;

void setup(){

  Serial.begin(9600);

  pinMode( 0, INPUT);
  pinMode(green, OUTPUT);
  pinMode(red, OUTPUT);


}

void start(){
    digitalWrite(green, HIGH);
}

void loop() {

sensorValue = analogRead(0);       
digitalValue = digitalRead(0); 

Serial.println(sensorValue,DEC);  
Serial.println(digitalValue,DEC);

delay(2000);                    
  if(analogRead(0) < 100){
    tone(9,200,1000);
    digitalWrite(red,HIGH);
  }
 }

【问题讨论】:

    标签: arduino


    【解决方案1】:

    “永远”播放声音很简单:

    if(analogRead(A0) < 100 ) {
      tone(9,2000); // once triggered, will play the sound forever
    }
    

    要关闭它,您似乎喜欢 RESET 按钮。所以没有必要打电话

    noTone(9);
    

    顺便说一句:阅读reference 怎么样?

    【讨论】:

    • 来自github.com/bhagman/Tone#ugly-details - 持续时间是可选的。如果没有指定持续时间,则提示音将持续播放,直到调用 stop()。
    • 是的,但这不是“丑陋的细节”。官方 arduino 参考地址为arduino.cc/reference。而且您没有在我们正在讨论的代码中使用 github.com/bhagman 库。
    • Tone Ref page 将您推荐给Bhagman。官方参考没有详细说明如果持续时间不存在会发生什么。官方的 Arduino Tone 库就是基于这个音色库。丑陋的细节参考不应该包含在我的链接中,因为它会让你进入文档的错误部分。而是使用这个:github.com/bhagman/Tone#methods
    【解决方案2】:

    有很多方法:

    更改激活蜂鸣器的逻辑。

    while (analogRead(0) < 100){
      tone(9,200,1000);
    }
    

    只需使用无限循环:

    while (1) {
      tone(9,200,1000);
    }
    

    重置 Arduino 以退出无限循环。

    对此的一种变体是将(1) 替换为检查引脚以退出循环或读取传感器的代码。

    【讨论】:

      【解决方案3】:

      如果你真的想使用中断 你没有指定你正在使用什么板,但是 对于 uno,2 3 个引脚可以作为中断连接,并触发一个关闭音调的功能 看看这个: attachinterrupt

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多