多个if语句和

时间:2017-04-06 09:42:17

标签: c++ if-statement arduino pressure

提前感谢您的帮助。

所以我正在研究压力传感器。这个想法是当压力传感器达到一定值时,比如说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.

1 个答案:

答案 0 :(得分: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语句。

希望这会奏效。

干杯, Ingwe。