Hallo Leute,
ich sitze hier an einem Projekt. Habe jedoch ein Problem im Code sodass die Mühle nach dem ersten Mahlen nicht aufhört.
Hier eine Beschreibung des ganzen:
Würde mich über hilfe freuen.
int grinderPin = 13;
int isGrinding = LOW;
unsigned long delaybeforestart = 5000;
unsigned long swingdelay = 3000;
unsigned long firstgrindtime = 5000;
unsigned long secondgrindtime = 0;
unsigned long stoptime;
int counter=0;
float pause;
//Weigh
float loadA = 0; // kg
int analogvalA = 302.7; // analog reading taken with load A on the load cell
float loadB = -0.11375; // kg
int analogvalB = 227.17; // analog reading taken with load B on the load cell
float analogValueAverage = 0;
long time = 0; //
int timeBetweenReadings = 200; // We want a reading every 200 ms;
float newload;
float secondspergram;
//firstgrind um g/sec zu berechnen
void firstgrind() {
stoptime = millis() + firstgrindtime;
isGrinding = HIGH;
digitalWrite(grinderPin, HIGH);
counter=1;
Serial.println(counter);
}
//secondgrind um auf Wunschmenge zu kommen
void secondgrind() {
stoptime = millis() + secondgrindtime;
isGrinding = HIGH;
digitalWrite(grinderPin, HIGH);
counter=3;
Serial.println(counter);
}
void setup(){
Serial.begin(9600);
pinMode(grinderPin, OUTPUT);
digitalWrite(grinderPin, LOW);
float pause=delaybeforestart+firstgrindtime+swingdelay;
}
void loop(){
//firstgrind
if (millis()>=delaybeforestart){
firstgrind();
}
//Wiegen und berechnen und 2. Mahlung starten
if (counter==2 && millis()>=pause){
secondspergram=firstgrindtime/(newload*1000);
secondgrindtime= ((13-(newload*1000))*secondspergram);
Serial.println(secondgrindtime);
secondgrind();
}
// stop the grinder if nessesary
if(millis() >= stoptime && isGrinding == HIGH && counter == 1){
isGrinding = LOW;
digitalWrite(grinderPin, LOW);
counter=2;
Serial.println(counter);
}
if(millis() >= stoptime && isGrinding == HIGH && counter == 3){
isGrinding = LOW;
digitalWrite(grinderPin, LOW);
counter=4;
Serial.println(counter);
}
int analogValue = analogRead(0);
// running average - We smooth the readings a little bit
analogValueAverage = 0.999*analogValueAverage + 0.001*analogValue;
// Is it time to print?
if(millis() > time + timeBetweenReadings){
float load = analogToLoad(analogValueAverage);
float newload=load-0.002;
// Serial.print("analogValue: ");Serial.println(analogValueAverage);
// Serial.print(" load: ");Serial.println(newload,4);
time = millis();
}
}
float analogToLoad(float analogval){
// using a custom map-function, because the standard arduino map function only uses int
float load = mapfloat(analogval, analogvalA, analogvalB, loadA, loadB);
return load;
}
float mapfloat(float x, float in_min, float in_max, float out_min, float out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}