Guten Morgen Leute,
ich bin dabei mit einen Code zusammenzuschstern aus allem was ich weiss, kann und irgendwo finde. So sieht dieser Code aktuell vermutlich auch aus.
Was will ich haben und wofür?
Ich will einen Tacho für ein Oldtimer Modep. Warum kein Originales? Weil ich die Teile nur schwer oder gar nicht finden kann. Warum dann eins mit Arduino? Warum auch nicht, es macht ja Spaß.
Was soll es können?
- Geschwindigkeit in km/h anzeigen
- Gefahrene Kilometer aufzeichnen, speichern und beim einschalten wieder auslesen
- Temperatur anzeigen (als nettes Extra, muss aber nicht)
Was habe ich bisher?
Einen Code, der aus meiner Sicht gut aussieht aber vermutlich genau das Gegenteil davon ist.
Was brauche ich?
Dringend Hilfe. Ich habe 1. keine Ahnung ob das so gut geschrieben ist und 2. fehlt mir jeglicher Ansatz für die EEPRom Geschichte und das zählen der Kilometer.
Ich muss aber auch sagen, dass meine Skills blutig anfängerisch sind. EIgentlich ist dieses Projekt für meinen Wissen/Können etliche Nummern zu groß.
Was verwende ich hierzu?
- Hall Sensor (als Baugruppe mit Platine)
- OLED Display (128x64)
- Arduino Nano / Atmega 328P
Im Anhang ein paar Fotos und folgend dann der Code. Über jede Hilfe die ich bekomme bin ich dankbar.
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4 // not used / nicht genutzt bei diesem Display
Adafruit_SSD1306 display(OLED_RESET);
byte DZM_InputPin = 2;
volatile unsigned long RPM_T2, RPM_Count;
unsigned long RPM , RPM_T1;
int KMH;
//int URad = 1.571; // Umfag des Rad in METER
int RaD = 0.25; // Halber Raddurchmesser in METER
const float Pi = 3.14159265359; // Zahl Pi für die Formel zur Berechnun der Geschwindigkeit in km/h
void setup() {
// initialize with the I2C addr 0x3C / mit I2C-Adresse 0x3c initialisieren
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
// random start seed / zufälligen Startwert für Random-Funtionen initialisieren
randomSeed(analogRead(0));
pinMode(DZM_InputPin, INPUT_PULLUP);
RPM_T1 = 0;
RPM_T2 = 0;
RPM_Count = 0;
attachInterrupt(0, RPM_Meter, FALLING); // Interrupt0 wird bei fallender Flanke auf Pin2
}
#define DRAW_DELAY 118
#define D_NUM 47
void loop() {
char RPMStr[5];
display.clearDisplay();
// set text color / Textfarbe setzen
display.setTextColor(WHITE);
// set text size / Textgroesse setzen
display.setTextSize(1);
// set text cursor position / Informationen
display.setCursor(1,0);
// show text / Text anzeigen
display.println(" Derbi Antorcha 2019"); // Info Text frei wählbar (X Wert / Y Wert)
display.setTextSize(4);
display.setCursor(17,15);
display.println(KMH);
display.setTextSize(2);
display.setCursor(80,15);
display.println("km/h"); // Info-Anziege km/h
display.setTextSize(1);
display.setCursor(14,56);
display.println("000000 km");
display.setCursor(80,56);
display.println("T: 21 C"); // Temperatur-Anzeige
display.display();
delay(100);
if (RPM_T2 > RPM_T1) {
RPM = (unsigned)(long)(60000 * RPM_Count / (RPM_T2 - RPM_T1));
KMH = ((2 * 0.25 * Pi * ((unsigned)(long)(60000 * RPM_Count / (RPM_T2 - RPM_T1))) * 60) / 1000) ;
RPM_T1 = RPM_T2;
RPM_Count = 0;
}
else {
RPM = 0;
KMH = 0;
}
}
void RPM_Meter () {
RPM_Count++;
RPM_T2 = millis();
}
Viele liebe Grüße