Hallo,
ich hab folgendes Problem mit meinem Arduino Programm.
Also ich baue mir momentan ein Cocktail Mixer.
Über ein Tastenfeld sollen die Leute ihren Cocktail aussuchen, um das zu realisieren hab ich eine Switch-Case Anweisung verwendet.
Wenn ich das Programm frisch in den Arduino Mega 2560 lade, funktioniert alles wie es soll(Schrittmotor fährt zu den einzelnen Position und fährt anschließend solange zurück bis der Endschalter betätigt wurde).
Sobald ich aber einen zweiten Cocktail gewählt habe, spielt der Schrittmotor komplett verrückt (als wenn er gleichzeitig vorwärts und rückwärts fahren will).
Ich hatte den Verdacht das der ''Case'' nicht beendet wird und das Programm in der while Schleife hängen bleibt.
Um das Problem zu lösen, hab ich versucht den ''break'' Command zu verschieben, was aber gescheitert ist.
Habt ihr eine Lösung?
Das Programm ist nicht das vollständige sondern lediglich ein ''Case''.
#include <Servo.h>
#include <Keypad.h>
#include <AccelStepper.h>
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {6, 7, 8, 9}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {11, 12, 4, 5}; //connect to the column pinouts of the keypad
//Einstellung für den Servo
const int servoPin = 10;
const int angleOpen = 90;
const int angleClosed = 140;
const int openDelay = 3000;
const int openDelay2 = 5000;
const int relais = 10;
//Einstellungen Pos. der Schnäpse
/*int rum = 3380;
int vodka = 300;
int korn = 300;
int likoer = 300;
*/
//Treiber Schrittmotor
AccelStepper stepper (1, 2, 3);
//Servo-Object erzeugt
Servo myservo;
//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
//Relais
const int relais1 = A0;
const int relais2 = A1;
const int relais3 = A2;
const int relais4 = A3;
const int relais5 = A4;
const int relais6 = A5;
const int relais7 = A6;
const int relais8 = A7;
//Endstop
int endstop_1 = A14;
int endstop_2 = A15;
void setup(){
Serial.begin(9600);
myservo.attach(servoPin);
myservo.write(angleOpen);
//Relais
pinMode(relais1, OUTPUT);
pinMode(relais2, OUTPUT);
pinMode(relais3, OUTPUT);
pinMode(relais4, OUTPUT);
pinMode(relais5, OUTPUT);
pinMode(relais6, OUTPUT);
pinMode(relais7, OUTPUT);
//Endstop
pinMode(endstop_1, INPUT);
pinMode(endstop_2, INPUT);
Serial.begin(115200);
//Schritt Motor
stepper.setMaxSpeed(1000);
stepper.setAcceleration(1000);
stepper.setSpeed(100);
digitalWrite(relais1, HIGH);
digitalWrite(relais2, HIGH);
digitalWrite(relais3, HIGH);
digitalWrite(relais4, HIGH);
digitalWrite(relais5, HIGH);
digitalWrite(relais6, HIGH);
digitalWrite(relais7, HIGH);
digitalWrite(relais8, HIGH);
}
void loop(){
char Taste = customKeypad.getKey();
Serial.begin(115200);
if (Taste){ //Wenn eine Taste gedrückt wurde
Serial.print("Die Taste ");
Serial.print(Taste);
Serial.print(" wurde gedrueckt");
Serial.println(); //Teile uns am Serial Monitor die gedrückte Taste mit
}
switch (Taste){
//Coctail 1
case 48:
//Startposition
if(digitalRead(endstop_1) == LOW){
digitalWrite(relais8, LOW);
delay(300);
stepper.setMaxSpeed(800);
stepper.runToNewPosition(-3730);
//myservo.write(angleClosed);
delay(openDelay);
myservo.write(angleOpen);
delay(500);
stepper.setMaxSpeed(400);
stepper.runToNewPosition(-3250);
//myservo.write(angleClosed);
delay(openDelay);
myservo.write(angleOpen);
delay(500);
stepper.setMaxSpeed(400);
stepper.runToNewPosition(-2680);
delay(500);
//myservo.write(angleClosed);
delay(openDelay);
myservo.write(angleOpen);
delay(500);
stepper.setMaxSpeed(400);
stepper.runToNewPosition(-1800);
delay(500);
digitalWrite(relais8, HIGH);
//Mischgetränke
//myservo.write(30);
digitalWrite(relais1, LOW);
delay(4000);
digitalWrite(relais1, HIGH);
delay(300);
digitalWrite(relais2, LOW);
delay(4000);
digitalWrite(relais2, HIGH);
delay(300);
digitalWrite(relais3, LOW);
delay(4000);
digitalWrite(relais3, HIGH);
delay(2000);
while(digitalRead(endstop_2) != LOW){
stepper.setMaxSpeed(400);
stepper.move(10000);
stepper.run();
}
}
break;