Hallo,
ich bin kommpleter Neuling im Gebiet Arduino und ich hoffe das ich das Thema in die richtige Kategorie geschrieben hab.
Nun zur Frage:
Also ich möchte mit einem Ultrschallsensor den Abstand messen und in über eine RGB-LED und einen Buzzer ausgeben. Das funktioniert auch soweit einwandfrei.
Ich möchte aber das die Messung erst beginnt wenn ich den Taster einmal gedrückt habe und das ich den Messvorgang wieder abbrechen kann wenn ich den Taster erneut drücke. Das soll eigendlich mit der Variabel "z" funktionieren die einen zustand 0 oder 1 speicher, wie ich es oben im Code gemacht habe. Wo ich nur die beiden PowerLEDs hatte hat es auch geklappt. Ich konnte mit einmal drücken die rote LED ausschalten und die Grüne an und umgedreht.
Wenn ich diese if (z == 1)
Abfrage nehme kann ich zwar den Messvorgang starten und die PowerLED wechselt, aber ich kann den Messvorgang nicht mehr ausschalten. Man sieht aber ein ganz leichtes flackern wenn man den Knopf drückt. Also weiß ich nicht ob es ein Hard oder Softwarefehler ist.
Ich hoffe Ihr wisst was ich meine und könnt mir dementsprechen helfen.
Anbei ist mein bisheriger Code und mein Schaltplan (Autodesk Tinkercad) meines Projekts.
Ob der wiederstand beim Taster sein muss weiß ich nicht.
Vielen Dank für euere Hilfe schon im Voraus!
```cpp
//03.01.2022
#include "SR04.h"
#include "pitches.h"
#define TRIG_PIN 12
#define ECHO_PIN 11
#define Red 5
#define Green 6
#define Blue 3
SR04 sr04 = SR04(ECHO_PIN, TRIG_PIN);
long e; // Variabel wo das Messergebniss des SR04 gespeichert wird
int powerLedOn = 9;
int powerLedOff = 8;
int buzzer = 2;
int powerButton = 13;
int z; // Zustandsvariabel (0 oder 1)
void setup() //*****************************************************
{
pinMode(powerLedOn, OUTPUT);
pinMode(powerLedOff, OUTPUT);
pinMode(Red, OUTPUT);
pinMode(Green, OUTPUT);
pinMode(Blue, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(powerButton, INPUT_PULLUP);
}
void loop() //*********************************************************
{
if (digitalRead(powerButton) == LOW) {
if (z == 1) {
z = 0;
} else {
z = 1;
}
}
if (z == 1) {
digitalWrite(powerLedOn, HIGH);
digitalWrite(powerLedOff, LOW);
} else {
digitalWrite(powerLedOn, LOW);
digitalWrite(powerLedOff, HIGH);
}
if (z == 1) //-------------------------------------------------------------
{
e = sr04.Distance();
if (e > 100) {
analogWrite(Red, 0);
analogWrite(Green, 255);
analogWrite(Blue, 0);
tone(buzzer, NOTE_F6, 50);
delay(500);
} else {
if (e > 50) {
analogWrite(Red, 255);
analogWrite(Green, 70);
analogWrite(Blue, 0);
tone(buzzer, NOTE_F6, 50);
delay(325);
} else {
if (e > 30) {
analogWrite(Red, 255);
analogWrite(Green, 70);
analogWrite(Blue, 0);
tone(buzzer, NOTE_F6, 50);
delay(250);
} else {
if (e > 10) {
analogWrite(Red, 255);
analogWrite(Green, 0);
analogWrite(Blue, 0);
tone(buzzer, NOTE_F6, 50);
delay(100);
} else {
if (e > 0) {
analogWrite(Red, 255);
analogWrite(Green, 0);
analogWrite(Blue, 0);
tone(buzzer, NOTE_F6, 50);
}
}
}
}
}
}
}