-3

在此先感谢您的帮助。

所以我正在研究压力传感器。这个想法是,当压力传感器达到某个值时,比如 10,然后在达到 10 后急剧下降,激活蜂鸣器。(就像,我把我的汽车轮胎打到 10,我想知道是否有泄漏)

我只是为了我的生活不能让这件事发生。我知道我只是错过了一些非常小的东西,但我将非常感谢任何帮助。

下面是我的代码:

    #include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

      // These constants won't change: const int analogPin = A0;    // pin that the sensor is attached to const int ledPin = 13;       // pin that the LED is attached to const int threshold = 5;   // an arbitrary threshold level that's in the range of the analog input const int buzzer = 9;  // pin that the buzzer is connected to.

void setup() {   // initialize the LED pin as an output:   pinMode(ledPin, OUTPUT);  // initilizes the pin as an output.   pinMode(buzzer, OUTPUT); // Set buzzer - pin 9 as an output

  // initialize serial communications:   Serial.begin(9600);   lcd.begin(16, 2);   lcd.print ("Pressure in kpa"); }

void loop() {   // read the value of the pressure sensor:   float sensorValue = analogRead(analogPin);   // int kpa = (((sensorValue*5)/1024)*(120/5)-116); // 116 was subtracted to equilibrate the sensor   int kpa = ((sensorValue * 5 / 1024) * (15 / 5) * (6.894 / 1) - 10); //   // if the analog value is greater than whatever threshold we use , turn on the LED:

  if (kpa > threshold )

    {
    digitalWrite(ledPin, HIGH);
    digitalWrite(buzzer, HIGH);
    tone(buzzer, 1000); // this controls the picth of the sound. (Hz)
    delay(1000);   } else {
    digitalWrite(ledPin, LOW);
    digitalWrite(buzzer, LOW);
    noTone(buzzer);     // Stop sound...
    delay(1000);   }


  // print the analog value:   Serial.println(kpa);   delay(1);        // delay in between reads for stability   lcd.setCursor (0, 1);   lcd.print (kpa);

}

Thanks.
4

1 回答 1

0

我已经编辑了代码以反映您正在尝试做的事情。

本质上,您需要检查您的压力是增加还是减少。因此,为此您可以读取两个读数并进行比较;一个读数先于另一个读数。如果最新读数高于前一个读数,则它会上升,无需惊慌。

如果最新读数低于前一个读数,则压力正在下降。所以,引起恐慌,但还不是……

在警报响起之前需要满足两个条件,压力需要处于下降路径并且压力需要低于阈值。

kpa 必须下降并且低于阈值:

(val < previous && val < threshold)

看看这是否有效,抱歉我有点匆忙并且根本没有测试它:

#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// These constants won't change:
const int analogPin = A0;    // pin that the sensor is attached to
const int ledPin = 13;       // pin that the LED is attached to
const int threshold = 5;   // an arbitrary threshold level that's in the range of the analog input
const int buzzer = 9;  // pin that the buzzer is connected to.
int val = 0;  // store value
int previous; // previous reading

void setup()
{
  pinMode(ledPin, OUTPUT);  // initialize the LED pin as an output:
  pinMode(buzzer, OUTPUT); // Set buzzer - pin 9 as an output
  Serial.begin(9600);   // initialize serial communications:
  lcd.begin(16, 2);
  lcd.print ("Pressure in kpa");
}

void loop() {
  float sensorValue = analogRead(analogPin);   // read the value of the pressure sensor:
  int kpa = ((sensorValue * 5 / 1024) * (15 / 5) * (6.894 / 1) - 10);

  // we want to check if this is going up or down.
  previous = val;
  val = kpa;

  if (val > previous) {
    digitalWrite(ledPin, HIGH);
    delay(1000);
    digitalWrite(ledPin, HIGH);  // make LED flashy-flashy if its going up
    delay(1000);
  }
  else if (val < previous && val < threshold) {
    digitalWrite(ledPin, LOW); // ... and we switch off the LED
    tone(buzzer, 1000);     // WEE WAH WEE WAH WEE WAH
    delay(1000);
  }

}

我在代码中添加了一个闪烁的 LED,因为闪烁的 LED 更好。我也用了一个else...if语句。

希望这会奏效。

干杯,英格威。

于 2017-04-06T10:52:16.923 回答