Ich hab ein wenig am Code gebastelt
Arduino ist schon toll, da kommt auch ein Anfänger wie ich ans Ziel.
Die Basis ist da!
Ich muss noch das eeprom beschreiben, Bluetooth integrieren, und eine Android App Programmieren
#include <LiquidCrystal.h> // LCD Library einbinden
LiquidCrystal lcd(12, 11, 10, 9, 8, 7); // Display Anschlußpins definieren
// Variablen und Pin Definitionen -----------------------------------------------------------------------------------------
const byte HallsensorPin = 2; // Pin 2 ist HallsensorPin für Sensor
float Raddurchmesser = 1.780 ; // in m Raddurchmesser in mm
int StreckeOelen = 2000 ; // in m nach welcher gefahrenen Strecke soll geschmiert werden
byte AnzMagnete = 1 ; // Wie viele Magnete/Impulse je Radumdrehung)
int ImpulsHallgeber = 0; // Zählt die Impulse vom Hallsensor
float AnzahlImpOelen = 0; // Anzahl der Impulse vom Hallsensor bei der Erreichung ein Ölintervall beginnt
// Pumpe
const byte PumpePin = 13; // Da ist die Pumpe angeschlossen
byte Pumpstoesse = 5; // Anzahl der Pumpvorgänge bei einem Ölvorgang
// --------------------------------------------------------------------------------------------------------------------------
void setup() {
// Configuration LCD Anzeige
lcd.begin(16, 2); // Display hat 2 Zeilen a 16 Zeichen
lcd.setCursor(0, 0); // erste Zeile Cursor Position 0
lcd.print("Oeler V2.02 "); // Überschrift ausgeben Zeile 1
// Konfiguration Hallsensor Eingang
pinMode(HallsensorPin, INPUT); // HallsensorPinspin auf HallsensorPin stellen
digitalWrite(HallsensorPin, LOW ); // und PullupWiderstand einschalten
// Konfiguration Pumpenausgang
pinMode(PumpePin, OUTPUT); // Da ist die Spule der Pumpe angeschlossen
digitalWrite(PumpePin, LOW); // Die Pumpe an PIN xxx wird ausgeschaltet
// Interrupt konfigurieren
attachInterrupt(digitalPinToInterrupt(HallsensorPin), Hallsensor, RISING); // Interrupt 0 auf Routine Hallsensor setzen reagiert auf sinkende Flanken an Pin 2
// Berechnen der Schmierintervall
AnzahlImpOelen = (StreckeOelen/Raddurchmesser)*AnzMagnete;
}
// Hauptprogramm -----------------------------------------------------------------------------------------------
void loop() {
lcd.setCursor(0, 1);
lcd.print(AnzahlImpOelen);
lcd.setCursor(9, 1);
lcd.print(ImpulsHallgeber);
if (AnzahlImpOelen < ImpulsHallgeber)
{
detachInterrupt(digitalPinToInterrupt(HallsensorPin)); // Interrupt ausschalten
lcd.setCursor(9, 1);
lcd.print("Start");
// Pumpvorgang Starten
for (int i=0; i<(Pumpstoesse); i++){
digitalWrite(PumpePin, HIGH); // Die Pumpe an PIN xxx wird eingeschaltet
delay(245);
digitalWrite(PumpePin, LOW); // Die Pumpe an PIN xxx wird ausgeschaltet
delay(125);
}
ImpulsHallgeber = 0 ;
attachInterrupt(digitalPinToInterrupt(HallsensorPin), Hallsensor, RISING); // Interrupt wieder einschalten.
lcd.setCursor(8, 1);
lcd.print("!!!Stop!!!");
}
}
// Ende Hauptprogramm -------------------------------------------------------------------------------------
// InterruptRoutine Hallsensor ------------------------------------------------------------------------
void Hallsensor() {
detachInterrupt(digitalPinToInterrupt(HallsensorPin)); // Interrupt ausschalten
ImpulsHallgeber = ImpulsHallgeber + 1 ;
attachInterrupt(digitalPinToInterrupt(HallsensorPin), Hallsensor, RISING); // Interrupt wieder einschalten.
return;
}
// ENDE InterruptRoutine Hallsensor ------------------------------------------------------------------------------