Hallo zusammen,
nachdem ich hier in den letzten Tagen viel gelesen und gelernt hab, bin ich jetzt an einem Punkt an dem ich nicht mehr weiter komme. Somit hab ich mich jetzt angemeldet.
Also erstmal: Hallo an alle
Kurz zu meinem Projekt:
Ich möchte ein Mähwerk bauen. Ich hab mir schon einige Geräte selbst gebaut, welche auch super funktionieren. Diese Geräte waren bisher aber alle "Dumm". Das ist mein erstes Projekt, wo wirklich eine Intelligenz/Steuerung dahinter stecken soll. Preislich wie auch Größenhalber habe ich mich für ein Arduino Mega entschieden. Ohne Erfahrung mit der Programmierung habe begonnen ein Programm zu schrieben um das Gerät zu steuern.
Dazu möchte ich Taster verwenden. Heißt -> wenn ich Taster 1 drücke soll Relais 1 ein/ausschalten und auch bleiben. So auch mit Taster 2 und 3. Das hab ich durch eine "Selbsthaltung" der Taster realisiert.
Jetzt zum Problem:
-
Ich möchte, egal in welchem Zustand sich die Relais 1-3 befinden, mit Taster 4 sie jeweils alle 3 Relais ein- oder ausschalten. Aktuell blockiere ich mich aber mit den Tastern 1-3 selbst.
-
Ich möchte, wenn Taster 5 aktiv ist, dass:
Relais 1 = "HIGH" wird, wenn Sensor 1 = "HIGH"
Relais 2 = "HIGH" wird, wenn Sensor 2 = "HIGH"
Relais 3 = "HIGH" wird, wenn Sensor 3 = "HIGH"
Aber auch da blockiere ich mich gerade selbst mit den Tastern 1-3. Also an sich beides mal das selbe Problem, aber ich komme nicht drauf, wie ich das lösen kann.
Ich sehe mein Problem im letzten Abschnitt. Gekennzeichnet mit "Problem ab hier?"
Hier mein Code:
int LED1_PIN = 23; //LED linker Balken an/aus
int LED2_PIN = 22; //LED mittlerer Balken an/aus
int LED3_PIN = 21; //LED rechter Balken an/aus
int LED4_PIN = 19; //LED alle Balken an/aus
int LED5_PIN = 20; //LED automatik Balken an/aus
int RELAIS1_PIN = 18; //Linker Balken an/aus
int RELAIS2_PIN = 17; //Mittlerer Balken an/aus
int RELAIS3_PIN = 16; //Rechter Balken an/aus
int RELAIS4_PIN = 1; //Linker Balken hoch/runter
int RELAIS5_PIN = 1; //Mittlerer Balken hoch/runter
int RELAIS6_PIN = 13; //Rechter Balken hoch/runter
int BUTTON1_PIN = 2; //Taster linker Balken an/aus
int BUTTON2_PIN = 3; //Taster mittlerer Balken an/aus
int BUTTON3_PIN = 4; //Taster rechter Balken an/aus
int BUTTON4_PIN = 5; //Taster alle Balken an/aus
int BUTTON5_PIN = 6; //Taster automatik Balken an/aus
int BUTTON6_PIN = 7; //Taster Überbrücken
int SENSOR1_PIN = 7; //Sensor linker Balken ausgehoben
int SENSOR2_PIN = 8; //Sensor mittlerer Balken ausgehoben
int SENSOR3_PIN = 9; //Sensor rechter Balken ausgehoben
int THUMBWHEEL11_PIN = 11; //Daumenrad linker Balken hoch
int THUMBWHEEL12_PIN = 12; //Daumenrad linker Balken runter
int THUMBWHEEL21_PIN = 13; //Daumenrad mittlerer Balken hoch
int THUMBWHEEL22_PIN = 14; //Daumenrad mittlerer Balken runter
int THUMBWHEEL31_PIN = 15; //Daumenrad rechter Balken hoch
int THUMBWHEEL32_PIN = 16; //Daumenrad rechter Balken runter
int THUMBWHEEL41_PIN = 17; //Daumenrad alle Balken hoch
int THUMBWHEEL42_PIN = 18; //Daumenrad alle Balken runter
int SPEEDSENSOR_PIN = 19; //Drehzahlsensor
/*Taster zu Schalter:*/
bool Status_b1 = 0;
int Zaehler_b1 = 0;
bool letzterStatus_b1 = 0;
bool Status_b2 = 0;
int Zaehler_b2 = 0;
bool letzterStatus_b2 = 0;
bool Status_b3 = 0;
int Zaehler_b3 = 0;
bool letzterStatus_b3 = 0;
bool Status_b4 = 0;
int Zaehler_b4 = 0;
bool letzterStatus_b4 = 0;
bool Status_b5 = 0;
int Zaehler_b5 = 0;
bool letzterStatus_b5 = 0;
void button_switch(int& relais_pin, bool& current_state, int& button_counter, bool& last_state)
{
if (current_state != last_state && current_state == 1)
{
button_counter++;
}
else if (button_counter % 2 == 0)
{
digitalWrite(relais_pin, LOW);
button_counter = 0;
}
else
{
digitalWrite(relais_pin, HIGH);
}
last_state = current_state;
Serial.println(button_counter);
}
/*LED blinken*/
int ledState1 = LOW;
long myTimer1 = 0;
long myTimeout1 = 500;
int ledState2 = LOW;
long myTimer2 = 0;
long myTimeout2 = 500;
int ledState3 = LOW;
long myTimer3 = 0;
long myTimeout3 = 500;
int ledState4 = LOW;
long myTimer4 = 0;
long myTimeout4 = 500;
void setup() {
/*Taster zu Schalter:*/
Serial.begin(9600);
pinMode(LED1_PIN, OUTPUT);
pinMode(RELAIS1_PIN, OUTPUT);
pinMode(BUTTON1_PIN, INPUT);
pinMode(LED2_PIN, OUTPUT);
pinMode(RELAIS2_PIN, OUTPUT);
pinMode(BUTTON2_PIN, INPUT);
pinMode(LED3_PIN, OUTPUT);
pinMode(RELAIS3_PIN, OUTPUT);
pinMode(BUTTON3_PIN, INPUT);
pinMode(LED4_PIN, OUTPUT);
pinMode(BUTTON4_PIN, INPUT);
pinMode(LED5_PIN, OUTPUT);
pinMode(BUTTON5_PIN, INPUT);
pinMode(RELAIS4_PIN, OUTPUT);
pinMode(RELAIS5_PIN, OUTPUT);
pinMode(RELAIS6_PIN, OUTPUT);
pinMode(SENSOR1_PIN, INPUT);
pinMode(SENSOR2_PIN, INPUT);
pinMode(SENSOR3_PIN, INPUT);
}
void loop() {
/*Taster zu Schalter:*/
Status_b1 = digitalRead(BUTTON1_PIN);
Status_b2 = digitalRead(BUTTON2_PIN);
Status_b3 = digitalRead(BUTTON3_PIN);
Status_b4 = digitalRead(BUTTON4_PIN);
Status_b5 = digitalRead(BUTTON5_PIN);
button_switch(RELAIS1_PIN, Status_b1, Zaehler_b1, letzterStatus_b1);
button_switch(RELAIS2_PIN, Status_b2, Zaehler_b2, letzterStatus_b2);
button_switch(RELAIS3_PIN, Status_b3, Zaehler_b3, letzterStatus_b3);
button_switch(LED4_PIN, Status_b4, Zaehler_b4, letzterStatus_b4);
button_switch(LED5_PIN, Status_b5, Zaehler_b5, letzterStatus_b5);
delay(50);
/*LED blinken / leuchten*/
if (digitalRead(RELAIS1_PIN) == LOW) //LED 1 blinken
{
if (millis() > myTimeout1 + myTimer1 ) {
myTimer1 = millis();
if (ledState1 == LOW) ledState1 = HIGH;
else ledState1 = LOW;
digitalWrite(LED1_PIN, ledState1);
}
}
else{
digitalWrite(LED1_PIN, HIGH);
}
if (digitalRead(RELAIS2_PIN) == LOW) //LED 2 blinken
{
if (millis() > myTimeout2 + myTimer2 ) {
myTimer2 = millis();
if (ledState2 == LOW) ledState2 = HIGH;
else ledState2 = LOW;
digitalWrite(LED2_PIN, ledState2);
}
}
else{
digitalWrite(LED2_PIN, HIGH);
}
if (digitalRead(RELAIS3_PIN) == LOW) //LED 1 blinken
{
if (millis() > myTimeout3 + myTimer3 ) {
myTimer3 = millis();
if (ledState3 == LOW) ledState3 = HIGH;
else ledState3 = LOW;
digitalWrite(LED3_PIN, ledState3);
}
}
else{
digitalWrite(LED3_PIN, HIGH);
}
if (digitalRead(LED4_PIN) == LOW) //LED 4 aus? Abfrage
{
if (millis() > myTimeout4 + myTimer4 ) {
myTimer4 = millis();
if (ledState4 == LOW) ledState4 = HIGH;
else ledState4 = LOW;
digitalWrite(LED4_PIN, ledState4);
}
}
else{
digitalWrite(LED1_PIN, HIGH);
digitalWrite(LED2_PIN, HIGH);
digitalWrite(LED3_PIN, HIGH);
//Problem ab hier?
digitalWrite(RELAIS1_PIN, LOW); //Mähwerke an
digitalWrite(RELAIS2_PIN, LOW);
digitalWrite(RELAIS3_PIN, LOW);
}
/*Automatik ein/aus Mähwerke*/
if (digitalRead(Status_b1) == 1 && (SENSOR1_PIN) == HIGH && (RELAIS1_PIN) == LOW)
{
digitalWrite(RELAIS1_PIN, HIGH);
}
if (digitalRead(Status_b2) == 1 && (SENSOR2_PIN) == HIGH && (RELAIS2_PIN) == LOW)
{
digitalWrite(RELAIS2_PIN, HIGH);
}
if (digitalRead(Status_b3) == 1 && (SENSOR3_PIN) == HIGH && (RELAIS3_PIN) == LOW)
{
digitalWrite(RELAIS3_PIN, HIGH);
}
}
Ich bin mir sicher, dass sich einiges leichter oder besser lösen lässt, aber für das erste Programm ist es denke ich mal nicht so schlecht.
Danke schonmal für eure Hilfe