Hallo, da bin ich wieder. mein Vater und ich bauen gerade an einem Heuraufen automat ,welcher eine zeit abwarten soll
danach den motor drehen(füttern) und nach einer bestimmten zeit schauen ob die Zinken(welche an einer welle am motor hängen) an dem hallsensor vorbei gekommen sind, wenn nicht ,den motor stehen lassen und auf dem display schreiben Fehler und bis beide knöpfe gedrückt sind(es sind knöpfe mit integrierten Leds falls das wichtig ist) die rote led blinken lassen.
mein problem ist, die Zeit wird runtergezählt, aber er erkennt nicht dass der hallsensor kein signal gesendet hat. also er ist noch nicht angeschlossen genauso wenig wie die Motoren aber dass kein signal kommt sollte er ja merken.
auf jeden fall fängt er einfach wieder bei der ausgangs zeit von neuem an zu zählen(also als ob der sensor ein signal gesendet hätte)
hoffentlich kann jemand hierfür eine Lösung finden weil ich bin verzweifelt.
P.S ich bin noch nicht so der pro im Arduino programmieren wie man es im code wahrscheinlich auch sieht
#include <LiquidCrystal.h>
LiquidCrystal lcd(27, 7, 8, 23, 10, 28);
struct LED_KNOPF {
String Namen;
int Led_pin;
int Knopf_pin;
};
LED_KNOPF Belegung[] {
{"Gruen1",52},
{"Rot1", 48},
{"Gruen2", 40},
{"Rot2", 44}
};
int noOfLed_Knopf = 4;
int pause1 = 60;
int pause2 = 40;
int aktuelleZeit1 = pause1;
int aktuelleZeit2 = pause2;
int State1 ;
int State2;
long interval = 100;
unsigned long actualMillis;
unsigned long previousmillis = 0;
unsigned long previousMillis1 = 0;
unsigned long previousMillis2 = 0;
unsigned long previousMillis3 = 0;
unsigned long previousMillis4 = 0;
long interval12 = 1000;
bool Fuettern2 = false;
bool Fuettern1 = false;
int In1;
int In2;
int In3;
int In4;
int sensor1;
int sensor2;
int sensorpin1 = A4;
int sensorpin2 = A5;
bool sensorspeicher1 = false;
bool sensorspeicher2 = false;
bool Danger1 = false;
bool Danger2 = false;
bool aktualisieren1 = false;
bool aktualisieren2 = false;
void Gefahr(){
if(Danger1 == true){
digitalWrite(In1, LOW);
digitalWrite(In2, LOW);
lcd.setCursor(1, 1);
lcd.print("Fehler");
if (actualMillis - previousMillis3 >= 150) {
previousMillis3 = actualMillis;
if (State1 == LOW) {
State1 = HIGH;
} else {
State1 = LOW;
}
digitalWrite(Belegung[1].Led_pin, State1);
digitalWrite(Belegung[0].Led_pin, LOW);
if(Belegung[0].Knopf_pin == HIGH ){
if(Belegung[1].Knopf_pin == HIGH){
Danger1 = false;
lcd.setCursor(1, 1);
lcd.print(" ");
digitalWrite(Belegung[1].Led_pin, LOW);
}
}
}
}
if(Danger2 == true){
digitalWrite(In3, LOW);
digitalWrite(In4, LOW);
lcd.setCursor(10, 1);
lcd.print("Fehler");
if (actualMillis - previousMillis4 >= 150) {
previousMillis4 = actualMillis;
if (State2 == LOW) {
State2 = HIGH;
} else {
State2 = LOW;
}
digitalWrite(Belegung[3].Led_pin, State2);
digitalWrite(Belegung[2].Led_pin, LOW);
if(Belegung[2].Knopf_pin == HIGH && Belegung[3].Knopf_pin == HIGH){
Danger2 = false;
lcd.setCursor(10, 1);
lcd.print(" ");
digitalWrite(Belegung[3].Led_pin, LOW);
}
}
}
}
void lcdanzeigen(){
if(actualMillis - previousmillis >= interval){
previousmillis = actualMillis;
//neue zeit 1 anzeigen
if(Danger1 == false){
digitalWrite(Belegung[0].Led_pin, HIGH);
aktuelleZeit1 -= 1;
lcd.setCursor(1, 1);
lcd.print(" ");
lcd.setCursor(1, 1);
lcd.print(aktuelleZeit1);
}
// neue Zeit 2 anzeigen
if(Danger2 == false){
aktuelleZeit2 -= 1;
digitalWrite(Belegung[2].Led_pin, HIGH);
lcd.setCursor(12, 1);
lcd.print(" ");
lcd.setCursor(12, 1);
lcd.print(aktuelleZeit2);
}
}
if(aktuelleZeit1 <= 0){Fuettern1 = true;aktualisieren1 = true;aktuelleZeit1 = pause1;}
if(aktuelleZeit2 <= 0){Fuettern2 = true;aktualisieren2 = true;aktuelleZeit2 = pause2;}
}
void MotorZustand() {
if(Fuettern1 == false){
digitalWrite(In1, LOW);
digitalWrite(In2, LOW);
}
if(Fuettern2 == false){
digitalWrite(In3, LOW);
digitalWrite(In4, LOW);
}
if(Fuettern1 == true && Danger1 == false){
if(aktualisieren1 == true){
previousMillis1 = actualMillis;
aktualisieren1 = false;
}
digitalWrite(In1, HIGH);
digitalWrite(In2, LOW);
if(sensor1 == 0){
Fuettern1 = false;
sensorspeicher1 = true;
digitalWrite(In1, LOW);
digitalWrite(In2, LOW);
}
if(actualMillis - previousMillis1 >= interval12){
previousMillis1 = actualMillis;
Fuettern1 = false;
if(sensorspeicher1 == true){
sensorspeicher1 = false;
}
else{
Danger1 = true;
}
}
}
if(Fuettern2 == true && Danger2 == false){
if(aktualisieren2 == true){
previousMillis2 = actualMillis;
aktualisieren2 = false;
}
digitalWrite(In3, HIGH);
digitalWrite(In4, LOW);
if(sensor2 == 0){
Fuettern2 = false;
digitalWrite(In3, LOW);
digitalWrite(In4, LOW);
sensorspeicher2 = true;
}
if(actualMillis - previousMillis2 >= interval12){
previousMillis2 = actualMillis;
Fuettern2 = false;
if(sensorspeicher2 == true){
sensorspeicher2 = false;
}
else{
Danger2 = true;
}
}
}
}
void setup() {
lcd.begin(16, 2);
for (int i = 0; i < noOfLed_Knopf;i++){pinMode(Belegung[i].Led_pin, OUTPUT);pinMode(Belegung[i].Knopf_pin, INPUT);}
pinMode(In1, OUTPUT);
pinMode(In2, OUTPUT);
pinMode(In3, OUTPUT);
pinMode(In4, OUTPUT);
lcd.clear();
//Anfangs das display beschreiben
lcd.setCursor(1, 0);
lcd.print(pause1);
lcd.setCursor(1, 1);
lcd.print(pause1);
lcd.setCursor(12, 0);
lcd.print(pause2);
lcd.setCursor(12, 1);
lcd.print(pause2);
}
void loop () {
Belegung[0].Knopf_pin = digitalRead(51);
Belegung[1].Knopf_pin = digitalRead(47);
Belegung[2].Knopf_pin = digitalRead(39);
Belegung[3].Knopf_pin = digitalRead(43);
actualMillis = millis();
sensor1 = analogRead(sensorpin1);
sensor2 = analogRead(sensorpin2);
lcdanzeigen();
MotorZustand();
Gefahr();
}