Guten Tag ich habe ein kleines Projekt woran ich jetzt schon eine weile Sitze es ist ein Barmixer mit LCD Menü auswahl.
Ich habe ein Ardunio Mega mit Adafruit motor shield drauf.
Nun habe ich ein kleines Problem. Die Menüführung klappt aber sobald ich die Motordatei mit in den Code nehme funktioniert weder das Menü noch der
Motor richtig. Ich habe die befürtung das Irgendwo ein Signal an das Motorshiel gegeben wird ohne das ich das merke.
Vielleicht kann mir irgendjemand helfen warum der Motor anfängt zu laufen obwohl keine Taste von mir gedrückt wurde.
Hier mal der Code:
#include <LiquidCrystal.h>
#include <AFMotor.h> <------- Motor sequenz
//AF_Stepper motor1(200, 1); <------- Motor sequenz
#define RS 32
#define E 33
#define D4 34
#define D5 35
#define D6 36
#define D7 37
#define COLS 16
#define ROWS 2
LiquidCrystal lcd(RS, E, D4, D5, D6, D7);
int Led1 = 28;
int Taster1 = 27; // Taster1 - wird an Pin 8 initialisiert
int TasterStatus;
// Symbolische Konstanten für die Getränke
enum {KEINS, COLA, RUM, WASSER, WEIN, WEINBRAND, WHISKEY};
// LCD-Namen für die Getränke
char getraenkenamen[][10]={"Nichts","Cola", "Rum", "Wasser", "Wein", "Weinbrand", "Whiskey"};
// Symbolische Konstanten für die Mengen
enum {NICHTS, CL2, CL4};
// LCD-Namen für die Mengen
char mengennamen[][4]={"---","2CL", "4CL"};
// Symbolische Konstanten für die Buttons
enum {GETRAENKEWAHL, MENGENWAHL, FREIERBUTTON, START};
// I/O-Pins für die Buttons
byte buttons[]={24, 25, 26, 27};
byte buttontype= INPUT_PULLUP; // may be INPUT or INPUT_PULLUP
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(Led1, OUTPUT);
pinMode(Taster1, INPUT);
// motor1.setSpeed(30); // 10 rpm <------- Motor sequenz
lcd.begin(16,2);
for (int i=0;i<4;i++)
{
pinMode(buttons[i],buttontype);
}
lcdWelcome();
}
void lcdWelcome()
{
lcd.clear();
lcd.print("Willkommen");
lcd.setCursor(0,1);
lcd.print("Ihre Auswahl?");
}
int getButton()
{
static boolean oldStatus[]={false,false,false,false};
boolean newStatus;
int i;
for (i=0;i<4;i++)
{
newStatus=digitalRead(buttons[i]);
if (buttontype==INPUT_PULLUP) newStatus=!newStatus;
if (newStatus==HIGH && oldStatus[i]==false)
{
oldStatus[i]=true;
delay(5);
return i;
}
else if (newStatus==LOW && oldStatus[i]==true)
oldStatus[i]=false;
}
return -1;
}
void doMenu(byte &getraenk, byte &menge)
{
int button=getButton();
if (button<0) return;
switch (button)
{
case GETRAENKEWAHL: getraenk++;
if (getraenk>WHISKEY) getraenk=KEINS;
break;
case MENGENWAHL: menge++;
if (menge>CL4) menge=NICHTS;
break;
case START: if (getraenk!=KEINS && menge !=NICHTS)
{
doCocktail(getraenk,menge);
return;
}
else return;
}
lcd.clear();
lcd.print(getraenkenamen[getraenk]);
lcd.setCursor(0,1);
lcd.print(mengennamen[menge]);
}
void doCocktail(byte getraenk, byte menge)
{
char linebuf[17];
lcd.clear();
lcd.print(getraenkenamen[getraenk]);
lcd.setCursor(0,1);
lcd.print("mixen...");
delay(5000);
lcd.setCursor(0,1);
lcd.print("Fertig! ");
delay(5000);
lcdWelcome();
}
void loop() {
// put your main code here, to run repeatedly:
static byte getraenk, menge;
doMenu(getraenk, menge);
Serial.println(getraenk);
TasterStatus = digitalRead(Taster1);
if(Taster1 == HIGH && getraenk == 2)
// motor1.step(50, FORWARD, DOUBLE); <------- Motor sequenz
delay(1000);
//motor1.step(50, BACKWARD, DOUBLE); <------- Motor sequenz
delay(1000);