Demoka M203 Arduino Kaffeemühlen Timer die Zweite

Nachdem ich die Mühle nach ihrem Umbau ein paar Tage im Einsatz hatte, bin ich zu dem Entschluss gekommen, dass der Timer eine Feineinstellung ohne Rechner benötigt. Zudem brauche ich die verschiedenen Betriebsmodi (doppelte Füllung, Abbruch des Mahlvorganges) nicht, die über verschiedene Knopfdrücke ausgelöst wurden. Sie sind dem WAF-Faktor nicht unbedingt zuträglich und irgendwie finde ich die Funktionen überflüssig. Falls ich sie wieder brauchen sollte, kann ich sie ja über den USP-Port schnell
wieder einfügen.
Für die Feineinstellung habe ich in der Bastelkiste noch ein 5K Poti aus Metall gefunden, das ich oberhalb des An/Aus Schalters anbringen möchte. Dazu muss natürlich erstmal die Mühle geöffnet werden, um das Poti zu montieren und die Kabel an den Arduino zu löten:
DSC01233 DSC01235

Was hier noch etwas wild aussieht, bekommt mit ein paar Kabelbindern und etwas Schrumpfschlauch schon gleich ein professionelleres Aussehen:DSC01242

Den Schaltplan aus dem letzten Post habe ich etwas angepasst und neu gezeichnet. Zudem habe ich noch den Pull-Down Widerstand am Taster eingezeichnet, den ich beim letzten Schaltplan vergessen hatte einzuzeichnen.
KaffeeMuehle

Den Code habe ich angepasst und vor allen Dingen die Button API rausgenommen, da sie doch einen gewissen Overhead hat und nicht wirklich gebraucht wird:


const int grinderPin = 4;
// debug with arduino led
// const int grinderPin = 13;
const int buttonPin = A1;
const int potiPin = A2;

int buttonState = LOW;
int isGrinding = LOW;

unsigned long stopTime = 0;

// Grind Time in Millis
int grindTimeShort= 6000;
int grindTimeLong= 13000;

void grindOnce(int timeOffset) {
Serial.println("grindOnce() called with grindingTime:");
Serial.println(grindTimeShort + timeOffset);
stopTime = millis() + grindTimeShort + timeOffset;
isGrinding = HIGH;
digitalWrite(grinderPin, HIGH);
}

// read PotiData
int l;
int getPotiValue() {
int v = analogRead(potiPin) ; // 0-1023

// double the value to archive 2000ms difference in grinding time
Serial.println("poti Value:");
Serial.println(v);
return v*2;
}

void setup()
{
//debug
Serial.begin(9600);

// init grinderPin
pinMode(grinderPin, OUTPUT);
digitalWrite(grinderPin, LOW);
}

void loop()
{
// keep watching the grinderStart button:
int buttonReading = digitalRead(buttonPin);

// only grind if the new button state is HIGH
if (buttonReading == HIGH && isGrinding == LOW) {
Serial.println("Start grinding");
grindOnce(getPotiValue());
}

// stop the grinder if nessesary
if(millis() >= stopTime && isGrinding == HIGH){
Serial.println("Stop grinding");
isGrinding = LOW;
digitalWrite(grinderPin, LOW);
}
}

Noch ein Knopf aus Messing gedreht (gibt es natürlich auch zu kaufen..), auf das Poti montiert und fertig..
DSC01259