Заранее спасибо за помощь.
Так что я работаю над датчиком давления. Идея состоит в том, что, когда датчик давления достигает определенного значения, скажем, 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.
Я отредактировал код, чтобы отразить то, что вы пытаетесь сделать.
По сути, вам нужно проверить, увеличивается или уменьшается ваше давление.
Так что для этого вы можете взять два чтения и сравнить их; одно чтение берется раньше другого. Если последнее значение выше, чем предыдущее, оно увеличивается, и нет причин для тревоги.
Если последнее значение меньше предыдущего, тогда давление снижается. Так что повод для тревоги, но не только пока …
Прежде чем раздастся сигнал тревоги, должны быть выполнены ДВА условия, давление должно быть направлено вниз и давление должно быть ниже порогового значения.
кпа должно быть вниз и быть ниже порога:
(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);
}
}
Я добавил мигающий светодиод в код, потому что мигающие светодиоды просто лучше.
Я также использовал else...if
заявление.
Надеюсь, это сработает.
Ура,
Ingwe.
Других решений пока нет …