Hallo an alle
Ich habe nur eine kurze Frage zu dem Code .
Ich habe eine Ortungspiepser gebaut.
Der läuft auch zuverlässig.
Das einzige was mich nur Stört ist das er sofort losgeht , wenn das Fahrzeug
für nur eine Sekunde steht. Daher habe ich versucht eine Verzögerung einzubauen. Was ich aber nicht hinbekomme.
Kann mir mal jemand einen Tip geben wie ich es besser nachen kann.
Danke Stefan
Setze Deinen Sketch bitte in Codetags. Wie das geht, steht hier.
Außerdem formatiere den Code bitte ordentlich. Strg+T in der IDE hilft Dir dabei.
Das kannst Du auch noch nachträglich ändern.
Hallo michael_x
Ich möchte nur das der Ortungspiepser nicht gleich los geht wenn das Fahrzeug steht. Es würde langen wenn der Ortungspiepser nach einer Minute anspringt.Nur für den fall das das Fahrzeug mal auser sichtweite kommt.
Wenn Xout unter 10 fällt, setzt du eine Zustandsvariable auf True und merkst dir den zurückgegebenen Wert von millis() in einer Variable.
Wenn millis() einen um X größeren Wert zurück liefert als der von dir gemerkte, dann führe dein Blinken (piepsen) aus.
Ich denke diese Codezeile macht nicht das was du dir vorstellst.
im Status 0 prüfst du auf Eintritt deines Events, merkst dir in previousMillis die Zeit und schaltest weiter in Status 1
im Status 1 prüfst du mit millis()-previousMillis ob die Zeit erreicht ist und schaltest gegebenenfalls deinen Beeper ein und schaltest in Status 2.
weiters prüfst du ob das Kritierum noch immer erfüllt ist und schaltest gegebenfalls zurück in den Status 0
im Status 2 prüfst du ob das Kriterium noch immer erfüllt ist und schaltest gegebenenfalls zurück in den Status 0/schaltest den beeper ab.
Hallo an alle
Ich habe mich jetzt mal mit der Finite State Machine beschäftigt.
Das Prinzip habe ich verstanden , und habe den Code geändert.
Aber der Code geht nicht richtig. Am Serial Monitor wird die achse auch angezeigt. Aber das mit den Leds klappt nicht.
Kann mir da mal jemand einen Tip geben was ich falsch mache.
Danke Stefan
#include <Wire.h>
int ADXL345 = 0x53; // The ADXL345 sensor I2C address
float X_out; //Y_out, Z_out; // Outputs
int Led_Blau = 9;
int Buzzer = 8;
int i = 10;
int PZ = 100;
enum LedStates {AUS, EIN, LED };
LedStates ledState = AUS;
unsigned long letzteZeit = 0; // Zeitpunkt letzte LED-Änderung
const long intervall = 5000; // Blinkintervall in ms (Konstante)
void setup() {
Serial.begin(9600);
Wire.begin();
pinMode(Led_Blau, OUTPUT);
pinMode(Buzzer, OUTPUT);
Wire.beginTransmission(ADXL345);
Wire.write(0x2D);
Wire.write(8); //
Wire.endTransmission();
delay(10);
digitalWrite (Led_Blau, HIGH);
digitalWrite (Buzzer, HIGH);
delay(1000);
digitalWrite (Led_Blau, LOW);
digitalWrite (Buzzer, LOW);
delay(2000);
while (i > 0) {
i--;
digitalWrite(Led_Blau, HIGH);
delay(PZ);
digitalWrite(Led_Blau, LOW);
delay(PZ);
Serial.println(i);
}
}
void loop() {
Wire.beginTransmission(ADXL345);
Wire.write(0x32);
Wire.endTransmission(false);
Wire.requestFrom(ADXL345, 6, true);
X_out = ( Wire.read() | Wire.read() << 2);
if (millis() - letzteZeit >= intervall)
letzteZeit = millis();
switch (ledState)
{
case AUS:
ledState = LED;
digitalWrite(Led_Blau, LOW);
digitalWrite(Buzzer, LOW);
break;
case EIN:
ledState = LED;
digitalWrite(Led_Blau, HIGH);
digitalWrite(Buzzer, HIGH);
break;
}
Serial.print("Xa= ");
Serial.print(X_out);
Serial.println();
}
Hallo Tommy
Wenn der Sensor nicht bewegt wird sollen die Leds b.w.z. der Busser nach 5 Sekungen anspringen. Am Serial Monitor wird der Wert der Achse auch angezeigt wenn die lage verändert wird.