Я пытаюсь заставить мой светодиод мигать, если выполняются несколько условий.
Следующий код работает нормально без части teller1 внутри оператора if else, но когда я добавляю счетчик elapsedmillis к оператору if else, светодиод не мигает, даже когда все условия выполнены.
Любая помощь?
Вот мой код:
#define trigPin D7
#define echoPin D8
#include <elapsedMillis.h>
elapsedMillis teller1;
elapsedMillis teller2;
const int RED = D5; //het ‘rode’ pootje zit in D5
const int GREEN = D4; //etc.
const int BLUE = D3;
void setup() {
Serial.begin(115200);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(D6, OUTPUT);
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(BLUE, OUTPUT);
}
void loop() {
if (teller1 > 500) {
int sensorValue = analogRead(A0);
Serial.println(sensorValue);
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;
Serial.print(distance);
Serial.println(" cm");
if ((sensorValue > 20) && (distance > 20) && (teller1 < 250)) {
analogWrite(RED, 255);
analogWrite(GREEN, 0);
analogWrite(BLUE, 0);
} else if ((sensorValue > 20) && (distance > 20) && (teller1 > 250)) {
analogWrite(RED, 0);
analogWrite(GREEN, 0);
analogWrite(BLUE, 0);
}
else if (sensorValue <20) {
analogWrite(RED, 0);
analogWrite(GREEN, 0);
analogWrite(BLUE, 0);
}
teller1 = 0;
}
delay(50);
}
РЕДАКТИРОВАТЬ: Я думаю, что я это исправил, но я не уверен, что это будет считаться хорошо написанным или правильный способ сделать это:
#define trigPin D7 //trigger pin voor de echo sensor definieren op D7
#define echoPin D8 //echo pin voor de echo sensor definieren op D8
#include <elapsedMillis.h> //elapsedMillis library aanroepen
elapsedMillis teller1; //teller1 aanmaken
elapsedMillis teller2; //teller 2 aanmaken
const int RED = D5; //het ‘rode’ pootje zit in D5
const int GREEN = D4; //etc.
const int BLUE = D3;
void setup() {
Serial.begin(115200);
pinMode(trigPin, OUTPUT); //confirugeer D7 als output
pinMode(echoPin, INPUT); //confirugeer D8 als input
pinMode(D6, OUTPUT); //confirugeer D6 als output
pinMode(RED, OUTPUT); //confirugeer D5 als output
pinMode(GREEN, OUTPUT); //confirugeer D4 als output
pinMode(BLUE, OUTPUT); //confirugeer D3 als output
}
void loop() {
if (teller1 > 500) { //als de timer boven 500ms komt
int sensorValue = analogRead(A0); //sla de sensorwaarde op
Serial.println(sensorValue); //druk de sensorwaarde af in de serial monitor
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1; //formule om afstand te berekenen
Serial.print(distance);
Serial.println(" cm");
if ((sensorValue > 20) && (distance < 20) && (teller1 < 750)) {
analogWrite(RED, 255);
analogWrite(GREEN, 0);
analogWrite(BLUE, 0);
digitalWrite(D6, HIGH);
}
else if (sensorValue <20) {
analogWrite(RED, 0);
analogWrite(GREEN, 0);
analogWrite(BLUE, 0);
}
teller1 = 0;
} else if (teller1 < 250) {
analogWrite(RED, 0);
analogWrite(GREEN, 0);
analogWrite(BLUE, 0);
digitalWrite(D6, LOW);
}
delay(50);
Serial.print("teller");
Serial.println(teller1);
}