Hallo zusammen,
Ich habe ein Problem mit meinem derzeitigen Projekt. Leider macht mein UNO nicht das, was er soll.
Nach der Suche nach einer Lösung bin ich über folgenden Thread gestoßen, allerdings konnte mir dort nicht geholfen werden.
https://forum.arduino.cc/index.php?topic=521671.0
Nun zu Beschreibung des Problems: Ich möchte eine Rechteckfrequenz (Zündsignal vom Hallgeber) auswerte, umrechnen und je nach RPM verschiedene LED's Ansteuern. Bei den Schaltschwellen 1-3 soll je eine Duo-Color LED in grün angesteuert werden, bei Schaltschwelle 4 soll bei LED's 1-3 die rote mit an gehen und bei LED 4 direkt beide. Bei Schaltschwelle 5 sollen bei den LED's 1-4 die grünen aus gehen und bei LED 5 rot angesteuert werden. Der Code steht auch schon soweit, allerdings Schaltet der Arduino beim übergang in loop LED's 1-4 grün sofort ein, selbst wenn keine Frequenz am Messeingang (Pin8) anliegt.
Leider habe ich heute noch nicht die möglichkeit, eine Frequenz am Eingang zu testen. Morgen kommt ein Paket vom großen C, dann werde ich das mal testet, allerdings rein nach Logik sollte bei Freq=0 RPM=0 sein, also alle LED's LOW.
Hier der Sketch:
#include <FreqMeasure.h>
int Ausgang2 = 2; // Digitaler Ausgang LED 1 Rot
int Ausgang3 = 3; // Digitaler Ausgang LED 1 Grün
int Ausgang4 = 4; // Digitaler Ausgang LED 2 Rot
int Ausgang5 = 5; // Digitaler Ausgang LED 2 Grün
int Ausgang6 = 6; // Digitaler Ausgang LED 3 Rot
int Ausgang7 = 7; // Digitaler Ausgang LED 3 Grün
int Ausgang9 = 9; // Digitaler Ausgang LED 4 Rot
int Ausgang10 = 10; // Digitaler Ausgang LED 4 Grün
int Ausgang11 = 11; // Digitaler Ausgang LED 5 Rot
int Ausgang12 = 12; // Digitaler Ausgang LED 5 Grün
int Schaltschwelle1 = 1000; // Drehzahl Schaltschwelle 1 - LED Gruen
int Schaltschwelle2 = 2000; // Drehzahl Schaltschwelle 2 - LED Gruen
int Schaltschwelle3 = 3000; // Drehzahl Schaltschwelle 3 - LED Gruen
int Schaltschwelle4 = 4000; // Drehzahl Schaltschwelle 4 - LED Orange
int Schaltschwelle5 = 5000; // Drehzahl Schaltschwelle 5 - LED Rot
int Schaltschwelle6 = 5500; // Drehzahl Schaltschwelle 6 = blinkende LEDs
int Zylinder = 4; //
int Faktor = 6; // Hier fehlt noch was zum Umrechnungsfaktor für Wasted Spark, COP, Dizzy...
int RPM = 0;
int ledBlink = LOW;
long previousMillis = 0;
long interval = 120; // Blinkintervall in Millisekunden
void setup() {
Serial.begin(9600);
pinMode(Ausgang2, OUTPUT); //1rd
pinMode(Ausgang3, OUTPUT); //1gn
pinMode(Ausgang4, OUTPUT); //2rd
pinMode(Ausgang5, OUTPUT); //2gn
pinMode(Ausgang6, OUTPUT); //3rd
pinMode(Ausgang7, OUTPUT); //3gn
pinMode(Ausgang9, OUTPUT); //4rd
pinMode(Ausgang10, OUTPUT); //4gn
pinMode(Ausgang11, OUTPUT); //5rd
pinMode(Ausgang12, OUTPUT); //5gn
FreqMeasure.begin();
digitalWrite (Ausgang2, HIGH); //rd 0.5
digitalWrite (Ausgang4, HIGH);
digitalWrite (Ausgang6, HIGH);
digitalWrite (Ausgang9, HIGH);
digitalWrite (Ausgang11, HIGH);
delay(500);
digitalWrite (Ausgang2, LOW);
digitalWrite (Ausgang4, LOW);
digitalWrite (Ausgang6, LOW);
digitalWrite (Ausgang9, LOW);
digitalWrite (Ausgang11, LOW);
delay(500);
digitalWrite (Ausgang3, HIGH); //ye 0.5
digitalWrite (Ausgang5, HIGH);
digitalWrite (Ausgang7, HIGH);
digitalWrite (Ausgang10, HIGH);
digitalWrite (Ausgang12, HIGH);
digitalWrite (Ausgang2, HIGH);
digitalWrite (Ausgang4, HIGH);
digitalWrite (Ausgang6, HIGH);
digitalWrite (Ausgang9, HIGH);
digitalWrite (Ausgang11, HIGH);
delay(500);
digitalWrite (Ausgang2, LOW);
digitalWrite (Ausgang4, LOW);
digitalWrite (Ausgang6, LOW);
digitalWrite (Ausgang9, LOW);
digitalWrite (Ausgang11, LOW);
digitalWrite (Ausgang3, LOW);
digitalWrite (Ausgang5, LOW);
digitalWrite (Ausgang7, LOW);
digitalWrite (Ausgang10, LOW);
digitalWrite (Ausgang12, LOW);
delay(500);
digitalWrite (Ausgang3, HIGH); //gn 0.5
digitalWrite (Ausgang5, HIGH);
digitalWrite (Ausgang7, HIGH);
digitalWrite (Ausgang10, HIGH);
digitalWrite (Ausgang12, HIGH);
delay(500);
digitalWrite (Ausgang3, LOW);
digitalWrite (Ausgang5, LOW);
digitalWrite (Ausgang7, LOW);
digitalWrite (Ausgang10, LOW);
digitalWrite (Ausgang12, LOW);
delay(1000);
}
double sum=0;
int count=0;
void loop() {
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
if (FreqMeasure.available()) {
// average several reading together
sum = sum + FreqMeasure.read();
count = count + 1;
if (count > 0) {
double frequency = F_CPU / ((sum / count) * Faktor);
Serial.print("Frequenz: ");
Serial.println(frequency);
Serial.print("CPU: ");
Serial.println(F_CPU);
Serial.print("RPM: ");
RPM = frequency * 60;
Serial.print(RPM);
sum = 0;
count = 0; }
if (RPM < 1000) digitalWrite(Ausgang3, LOW); digitalWrite (Ausgang5, LOW); digitalWrite (Ausgang7, LOW); digitalWrite (Ausgang10, LOW);
if (RPM >= Schaltschwelle1) { digitalWrite(Ausgang3, HIGH);
} else digitalWrite(Ausgang3, LOW);
if (RPM >= Schaltschwelle2) { digitalWrite(Ausgang5, HIGH);
} else digitalWrite(Ausgang5, LOW);
if (RPM >= Schaltschwelle3) { digitalWrite(Ausgang7, HIGH);
} else digitalWrite(Ausgang7, LOW);
if (RPM >= Schaltschwelle4) { digitalWrite(Ausgang9, HIGH); digitalWrite (Ausgang10, HIGH); digitalWrite (Ausgang2, HIGH); digitalWrite (Ausgang4, HIGH); digitalWrite (Ausgang6, HIGH); digitalWrite (Ausgang3, HIGH); digitalWrite (Ausgang5, HIGH); digitalWrite (Ausgang7, HIGH);
} else digitalWrite(Ausgang9, LOW); digitalWrite (Ausgang10, LOW); digitalWrite (Ausgang2, LOW); digitalWrite (Ausgang4, LOW); digitalWrite (Ausgang6, LOW);
if (RPM >= Schaltschwelle5){ digitalWrite (Ausgang3, LOW); digitalWrite (Ausgang5, LOW); digitalWrite (Ausgang7, LOW); digitalWrite (Ausgang10, LOW);
} else digitalWrite(Ausgang12, LOW); digitalWrite (Ausgang3, HIGH); digitalWrite (Ausgang5, HIGH); digitalWrite (Ausgang7, HIGH); digitalWrite (Ausgang10, HIGH);
if (RPM >= Schaltschwelle6)
if (ledBlink == LOW) ledBlink = HIGH;
else ledBlink = LOW;
digitalWrite(Ausgang2, ledBlink); digitalWrite(Ausgang4, ledBlink); digitalWrite(Ausgang6, ledBlink); digitalWrite(Ausgang9, ledBlink); digitalWrite(Ausgang11, ledBlink);
}
}
}
Der Teil vor dem loop funktioniert und ist nur prinzipiell nur eine Spielerei, damit sich die 5 LED's ins Tacho einpassen (Golf2 bzw. Jetta2).