Grüßt Euch,
ich bin an einem kleinen Projekt (Getränkemischer Jacky-Cola) am Arbeiten und habe ein Problem das sich der Arduino Uno in unregelmäßigen Abständen/zurücksetzt.
Ich habe schon folgendes ausprobiert bzw. getestet:
- zweiten neuen Arduino Uno gekauft um auszuschließen das der was hat.
- Der Uno läuft mit Netzteil (12v/10A)
- Die zwei Pumpen laufen auf 12v direkt.
- Die 5v Led´s hatten zuerst alle einen 330 Ohm Wiederstand, da war das zurücksetzen viel öfter, jetzt habe ich alle Led´s mit 220 Ohm bestückt, ist deutlich besser geworden. Habe auch schon ohne der Led´s probiert, genauso wie mit den 220 Ohm (deutlich besser aber nach einer Zeit trotzdem Aussetzer.
- Es gibt kein Muster, wobei der Reset immer wieder Auftritt
- Kurzschlüsse und Pins/Lötstellen gecheckt.
- Auch beim längeren Laufen der Pumpen (Verdacht auf Überlast der 5v-Versorgung) kein Unterschied. Mal kommt der Reset mal nicht.
- Die Tasten/Buttons haben alle einen 10 kOhm Wiederstand.
Vielleicht weis jemand Warum oder Worauf der Uno reagiert sodass der in den Reset geht?
Wenn alles funktioniert dann kann man auch alle Mischungs- und Größenvarianten perfekt abfragen somit denke ich, das ich irgendwo in meinem Sketch einen kleinen Fehler habe oder vielleicht irgendwo eine Pause/Delay einbauen muss damit der Uno die Loops usw macht ohne zu Resetten.
Hier ist mein Sketch. Vielen Dank im Voraus für Eure Hilfe!
#include <Eventually.h>
#include "HX711.h"
#define Start_Button 11
#define Taste_Button 4
#define Taste_L 5
#define Taste_M 6
#define Taste_H 7
#define Taste_A 20
#define Size_Button 8
#define Size_02 9
#define Size_04 10
#define ScaleClock 2
#define ScaleData 3
#define Motor_Jack 12
#define Motor_Cola 13
HX711 scale;
EvtManager mgr;
int Taste_State = Taste_M;
int Size_State = Size_02;
int Mix_Array[21][15];
void setup() {
Serial.begin(115200);
Serial.println(__FILE__);
Serial.print("LIBRARY VERSION: ");
Serial.println(HX711_LIB_VERSION);
Serial.println();
pinMode(Taste_L, OUTPUT);
pinMode(Taste_M, OUTPUT);
pinMode(Taste_H, OUTPUT);
pinMode(Taste_Button, INPUT);
pinMode(Size_02, OUTPUT);
pinMode(Size_04, OUTPUT);
pinMode(Size_Button, INPUT);
pinMode(Start_Button, INPUT);
pinMode(Motor_Jack, OUTPUT);
pinMode(Motor_Cola, OUTPUT);
//Add Blinkshow
WriteTasteState(Taste_State);
WriteSizeState(Size_State);
scale.begin(ScaleData, ScaleClock);
scale.set_offset(4294682396);
scale.set_scale(1024.810);
Mix_Array[Taste_L][Size_02] = 40;
Mix_Array[Taste_M][Size_02] = 50;
Mix_Array[Taste_H][Size_02] = 60;
Mix_Array[Taste_A][Size_02] = 80;
Mix_Array[Taste_L][Size_04] = 80;
Mix_Array[Taste_M][Size_04] = 100;
Mix_Array[Taste_H][Size_04] = 120;
Mix_Array[Taste_A][Size_04] = 160;
Standby();
}
void Standby() {
mgr.resetContext();
digitalWrite(Motor_Jack, HIGH);
digitalWrite(Motor_Cola, HIGH);
mgr.addListener(new EvtPinListener(Taste_Button, (EvtAction)NextTasteState));
mgr.addListener(new EvtPinListener(Size_Button, (EvtAction)NextSizeState));
mgr.addListener(new EvtPinListener(Start_Button, (EvtAction)Start));
}
void Start() {
mgr.resetContext();
bool x = false;
unsigned long previousMillis = 0;
unsigned long currentMillis;
unsigned long total;
float weight;
int jack = Mix_Array[Taste_State][Size_State];
if(Size_State == Size_04) {
total = 400;
} else {
total = 200;
}
for(int i = 0; i <= 3; i++) {
digitalWrite(Taste_L, LOW);
digitalWrite(Taste_M, LOW);
digitalWrite(Taste_H, LOW);
delay(200);
digitalWrite(Taste_L, HIGH);
digitalWrite(Taste_M, HIGH);
digitalWrite(Taste_H, HIGH);
delay(200);
}
scale.tare();
while(x == false && weight < jack && digitalRead(Start_Button) == LOW) {
digitalWrite(Motor_Jack, LOW);
digitalWrite(Motor_Cola, HIGH);
if (currentMillis - previousMillis > 100000) {
x = true;
}
weight = scale.get_units(3);
Serial.println(weight);
Serial.println(jack);
}
while(x == false && weight < total && digitalRead(Start_Button) == LOW) {
digitalWrite(Motor_Jack, HIGH);
digitalWrite(Motor_Cola, LOW);
if (currentMillis - previousMillis > 200000) {
x = true;
}
weight = scale.get_units(3);
Serial.println(weight);
Serial.println(total);
}
digitalWrite(Motor_Jack, HIGH);
digitalWrite(Motor_Cola, HIGH);
for(int i = 0; i <= 3; i++) {
digitalWrite(Taste_L, LOW);
digitalWrite(Taste_M, LOW);
digitalWrite(Taste_H, LOW);
delay(200);
digitalWrite(Taste_L, HIGH);
digitalWrite(Taste_M, HIGH);
digitalWrite(Taste_H, HIGH);
delay(200);
}
WriteTasteState(Taste_State);
Standby();
}
void WriteSizeState(int Size_State) {
if(Size_State == Size_02) {
digitalWrite(Size_02, HIGH);
digitalWrite(Size_04, LOW);
}
if(Size_State == Size_04) {
digitalWrite(Size_02, LOW);
digitalWrite(Size_04, HIGH);
}
}
void NextSizeState() {
mgr.resetContext();
if(Size_State == Size_02) {
Size_State = Size_04;
} else {
Size_State = Size_02;
}
WriteSizeState(Size_State);
Standby();
}
void WriteTasteState(int Taste_State) {
if(Taste_State == Taste_L) {
digitalWrite(Taste_L, HIGH);
digitalWrite(Taste_M, LOW);
digitalWrite(Taste_H, LOW);
}
if(Taste_State == Taste_M) {
digitalWrite(Taste_L, LOW);
digitalWrite(Taste_M, HIGH);
digitalWrite(Taste_H, LOW);
}
if(Taste_State == Taste_H) {
digitalWrite(Taste_L, LOW);
digitalWrite(Taste_M, LOW);
digitalWrite(Taste_H, HIGH);
}
if(Taste_State == Taste_A) {
for(int i = 0; i <= 3; i++) {
digitalWrite(Taste_L, LOW);
digitalWrite(Taste_M, LOW);
digitalWrite(Taste_H, LOW);
delay(200);
digitalWrite(Taste_L, HIGH);
digitalWrite(Taste_M, HIGH);
digitalWrite(Taste_H, HIGH);
delay(200);
}
}
}
void NextTasteState() {
unsigned long previousMillis = 0;
unsigned long currentMillis;
bool i = false;
mgr.resetContext();
if(Taste_State == Taste_L) {
Taste_State = Taste_M;
} else {
if(Taste_State == Taste_M) {
Taste_State = Taste_H;
} else {
Taste_State = Taste_L;
}
}
previousMillis = millis();
currentMillis = millis();
while(i == false) {
if (currentMillis - previousMillis < 3000) {
if (digitalRead(Taste_Button) == HIGH) {
currentMillis = millis();
} else {
i = true;
}
} else {
if (digitalRead(Taste_Button) == HIGH) {
Taste_State = Taste_A;
i = true;
} else {
i = true;
}
}
}
WriteTasteState(Taste_State);
Standby();
}
USE_EVENTUALLY_LOOP(mgr)