Hallo Leute,
ich baue aktuell einen Cocktailautomaten. Hierbei verwende ich ein LCD I2C Display (16,2) und einen LED-Streifen (54 LEDs, WS2812B) und noch paar Pumpen und paar Taster. Ich habe das Problem, dass der Arduino Uno in meinem Programm den Led Streifen nicht ansteuert. In einem separaten Programm, wobei ich nur den Led Streifen ansteuere, gibt es keine Probleme. Mir ist dann aufgefallen, wenn ich die Befehle im Setup für das Lcd Display entferne (lcd.init(); lcd.backlight();), wir zumindest der erste Licht-Befehl ausgeführt.
Wisst ihr was das Problem ist?
Danke schon mal im Vorraus.
Der Sketch verwendet 10120 Bytes (31%) des Programmspeicherplatzes. Das Maximum sind 32256 Bytes.
//Licht
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define PIN 18
#define NUMPIXELS 54
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
//Display
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
//Einschenkdauer
int Bechervolumen = 0;
double Duchfluss = 4.5;
double Einschenkdauer = Bechervolumen/Duchfluss;
double EinZehntelDauer= Einschenkdauer/10*1000;
//Pins definieren
int Pumpe1 = 12;
int Pumpe2 = 13;
int Pumpe3 = 14;
int Pumpe4 = 15;
int Pumpe5 = 16;
int Pumpe6 = 17;
int Auswahl1= 11;
int Auswahl2= 2;
int Auswahl3= 3;
int Auswahl4= 4;
int Auswahl5= 5;
int Auswahl6= 6;
int Auswahl7= 7;
int Auswahl8= 8;
int Auswahl9= 9;
int Zufall = 10;
//Variablen
int z = 0;
int einmal = 0;
int TeileAlk = 0;
void setup() {
pixels.begin();
//Pins definieren
pinMode(Pumpe1, OUTPUT);
pinMode(Pumpe2, OUTPUT);
pinMode(Pumpe3, OUTPUT);
pinMode(Pumpe4, OUTPUT);
pinMode(Pumpe5, OUTPUT);
pinMode(Pumpe6, OUTPUT);
pinMode(Auswahl1, INPUT);
pinMode(Auswahl2, INPUT);
pinMode(Auswahl3, INPUT);
pinMode(Auswahl4, INPUT);
pinMode(Auswahl5, INPUT);
pinMode(Auswahl6, INPUT);
pinMode(Auswahl7, INPUT);
pinMode(Auswahl8, INPUT);
pinMode(Auswahl9, INPUT);
pinMode(Zufall, INPUT);
//Display
lcd.init();
lcd.backlight();
}
void loop() {
//Zustand bei Stand by
for(int x=0; x<54; x++)
{
pixels.setPixelColor(x, pixels.Color(60,50, 0));
pixels.show();
}
lcd.setCursor(0, 0);
lcd.print("Betriebsbereit ");
lcd.setCursor(0, 1);
lcd.print("Nr.: ");
lcd.setCursor(5, 1);
lcd.print(z);
lcd.setCursor(10, 1);
lcd.print(Bechervolumen);
lcd.setCursor(14, 1);
lcd.print("ml");
//Einmaliges Abfragen Bechervolumen/Mischungsverhältnis
if(einmal == 0)
{
AbfrageVolumen();
}
//Taste 9 Volumen/Mischung einstellen
if(digitalRead(Auswahl9)==HIGH)
{
AbfrageVolumen();
}
//Tastenbelegungen
if(digitalRead(Auswahl1)==HIGH)
{Variante1();}
delay(50);
if(digitalRead(Auswahl2)==HIGH)
{Variante2();}
delay(50);
if(digitalRead(Auswahl3)==HIGH)
{Variante3();}
delay(50);
if(digitalRead(Auswahl4)==HIGH)
{Variante4();}
delay(50);
if(digitalRead(Auswahl5)==HIGH)
{Variante5();}
delay(50);
if(digitalRead(Auswahl6)==HIGH)
{Variante6();}
delay(50);
if(digitalRead(Auswahl7)==HIGH)
{Variante7();}
delay(50);
if(digitalRead(Auswahl8)==HIGH)
{Variante8();}
delay(50);
//Zufallsgenerator
if(digitalRead(Zufall)==HIGH)
{
lcd.setCursor(0, 0);
lcd.print("Eine gute Wahl ");
lcd.setCursor(0, 1);
lcd.print("der Zufall... ");
delay(2000);
int zufall = random(1,9);
switch(zufall)
{
case1:
Variante1();
break;
case 2:
Variante2();
break;
case3:
Variante3();
break;
case 4:
Variante4();
break;
case 5:
Variante5();
break;
case 6:
Variante6();
break;
case 7:
Variante7();
break;
case 8:
Variante8();
break;
}}
delay(50);
AllePumpenAus();
}
void AllePumpenAus()
{
digitalWrite(Pumpe1,LOW);
digitalWrite(Pumpe2,LOW);
digitalWrite(Pumpe3,LOW);
digitalWrite(Pumpe4,LOW);
digitalWrite(Pumpe5,LOW);
digitalWrite(Pumpe6,LOW);
}
void AbfrageVolumen()
{
for(int i=0; i<NUMPIXELS; i++)
{
pixels.setPixelColor(i, pixels.Color(10, 0, 90));
pixels.show();
}
Bechervolumen = 0;
while(digitalRead(Auswahl9)==LOW)
{
lcd.setCursor(0, 0);
lcd.print("Bechervolumen ");
lcd.setCursor(0, 1);
lcd.print("einstellen... ");
}
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");
while(digitalRead(Auswahl9)==HIGH)
{
Bechervolumen = Bechervolumen+50;
lcd.setCursor(0, 0);
lcd.print("Bechervolumen: ");
lcd.setCursor(0, 1);
lcd.print(Bechervolumen);
lcd.setCursor(4, 1);
lcd.print("ml ");
delay(1500);
}
Einschenkdauer = Bechervolumen/Duchfluss;
EinZehntelDauer= Einschenkdauer/10*1000;
while(digitalRead(Auswahl9)==LOW)
{
lcd.setCursor(0, 0);
lcd.print("Mischverhaeltnis");
lcd.setCursor(0, 1);
lcd.print("einstellen... ");
}
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" ");
TeileAlk=0;
while(digitalRead(Auswahl9)==HIGH)
{
if(TeileAlk>=5)
{
TeileAlk = -1;
}
TeileAlk = TeileAlk+1;
lcd.setCursor(0, 0);
lcd.print("Teile Alkohol: ");
lcd.setCursor(0, 1);
lcd.print(TeileAlk);
lcd.setCursor(1, 1);
lcd.print("/10 ");
delay(1500);
}
einmal = 1;
}
void LichtRot()
{
for(int i=0; i<NUMPIXELS; i++)
{
pixels.setPixelColor(i, pixels.Color(90, 0, 0));
pixels.show();
}
}
void LichtGruen()
{
for(int i=0; i<NUMPIXELS; i++)
{
pixels.setPixelColor(i, pixels.Color(90, 0, 0));
pixels.show();
}
}
void Variante1()
{
LichtRot();
lcd.setCursor(0, 0);
lcd.print("Longdrink 1 wird");
lcd.setCursor(0, 1);
lcd.print("zubereitet... ");
digitalWrite(Pumpe1,HIGH);
digitalWrite(Pumpe4,HIGH);
delay(EinZehntelDauer*TeileAlk);
digitalWrite(Pumpe1,LOW);
if(TeileAlk==5)
{}
else
{
delay(EinZehntelDauer*(10-TeileAlk*2));
}
digitalWrite(Pumpe4,LOW);
delay(500);
LichtGruen();
lcd.setCursor(0, 0);
lcd.print("Becher entnehmen");
lcd.setCursor(0, 1);
lcd.print("Prost! ");
z = z+1;
delay(4000);
}
void Variante2()
{
LichtRot();
lcd.setCursor(0, 0);
lcd.print("Longdrink 2 wird");
lcd.setCursor(0, 1);
lcd.print("zubereitet... ");
digitalWrite(Pumpe1,HIGH);
digitalWrite(Pumpe5,HIGH);
delay(EinZehntelDauer*TeileAlk);
digitalWrite(Pumpe1,LOW);
if(TeileAlk==5)
{}
else
{
delay(EinZehntelDauer*(10-TeileAlk*2));
}
digitalWrite(Pumpe5,LOW);
delay(500);
LichtGruen();
lcd.setCursor(0, 0);
lcd.print("Becher entnehmen");
lcd.setCursor(0, 1);
lcd.print("Prost! ");
z = z+1;
delay(4000);
}
void Variante3()
{
LichtRot();
lcd.setCursor(0, 0);
lcd.print("Longdrink 3 wird");
lcd.setCursor(0, 1);
lcd.print("zubereitet... ");
digitalWrite(Pumpe1,HIGH);
digitalWrite(Pumpe6,HIGH);
delay(EinZehntelDauer*TeileAlk);
digitalWrite(Pumpe1,LOW);
if(TeileAlk==5)
{}
else
{
delay(EinZehntelDauer*(10-TeileAlk*2));
}
digitalWrite(Pumpe6,LOW);
delay(500);
LichtGruen();
lcd.setCursor(0, 0);
lcd.print("Becher entnehmen");
lcd.setCursor(0, 1);
lcd.print("Prost! ");
z = z+1;
delay(4000);
}
void Variante4()
{
LichtRot();
lcd.setCursor(0, 0);
lcd.print("Longdrink 4 wird");
lcd.setCursor(0, 1);
lcd.print("zubereitet... ");
digitalWrite(Pumpe2,HIGH);
digitalWrite(Pumpe4,HIGH);
delay(EinZehntelDauer*TeileAlk);
digitalWrite(Pumpe2,LOW);
if(TeileAlk==5)
{}
else
{
delay(EinZehntelDauer*(10-TeileAlk*2));
}
digitalWrite(Pumpe4,LOW);
delay(500);
LichtGruen();
lcd.setCursor(0, 0);
lcd.print("Becher entnehmen");
lcd.setCursor(0, 1);
lcd.print("Prost! ");
z = z+1;
delay(4000);
}
void Variante5()
{
LichtRot();
lcd.setCursor(0, 0);
lcd.print("Longdrink 5 wird");
lcd.setCursor(0, 1);
lcd.print("zubereitet... ");
digitalWrite(Pumpe2,HIGH);
digitalWrite(Pumpe5,HIGH);
delay(EinZehntelDauer*TeileAlk);
digitalWrite(Pumpe2,LOW);
if(TeileAlk==5)
{}
else
{
delay(EinZehntelDauer*(10-TeileAlk*2));
}
digitalWrite(Pumpe5,LOW);
delay(500);
LichtGruen();
lcd.setCursor(0, 0);
lcd.print("Becher entnehmen");
lcd.setCursor(0, 1);
lcd.print("Prost! ");
z = z+1;
delay(4000);
}
void Variante6()
{
LichtRot();
lcd.setCursor(0, 0);
lcd.print("Longdrink 6 wird");
lcd.setCursor(0, 1);
lcd.print("zubereitet... ");
digitalWrite(Pumpe2,HIGH);
digitalWrite(Pumpe6,HIGH);
delay(EinZehntelDauer*TeileAlk);
digitalWrite(Pumpe2,LOW);
if(TeileAlk==5)
{}
else
{
delay(EinZehntelDauer*(10-TeileAlk*2));
}
digitalWrite(Pumpe6,LOW);
delay(500);
LichtGruen();
lcd.setCursor(0, 0);
lcd.print("Becher entnehmen");
lcd.setCursor(0, 1);
lcd.print("Prost! ");
z = z+1;
delay(4000);
}
void Variante7()
{
LichtRot();
lcd.setCursor(0, 0);
lcd.print("Longdrink 7 wird");
lcd.setCursor(0, 1);
lcd.print("zubereitet... ");
digitalWrite(Pumpe3,HIGH);
digitalWrite(Pumpe4,HIGH);
delay(EinZehntelDauer*TeileAlk);
digitalWrite(Pumpe3,LOW);
if(TeileAlk==5)
{}
else
{
delay(EinZehntelDauer*(10-TeileAlk*2));
}
digitalWrite(Pumpe4,LOW);
delay(500);
LichtGruen();
lcd.setCursor(0, 0);
lcd.print("Becher entnehmen");
lcd.setCursor(0, 1);
lcd.print("Prost! ");
z = z+1;
delay(4000);
}
void Variante8()
{
LichtRot();
lcd.setCursor(0, 0);
lcd.print("Longdrink 8 wird");
lcd.setCursor(0, 1);
lcd.print("zubereitet... ");
digitalWrite(Pumpe3,HIGH);
digitalWrite(Pumpe5,HIGH);
delay(EinZehntelDauer*TeileAlk);
digitalWrite(Pumpe3,LOW);
if(TeileAlk==5)
{}
else
{
delay(EinZehntelDauer*(10-TeileAlk*2));
}
digitalWrite(Pumpe5,LOW);
delay(500);
LichtGruen();
lcd.setCursor(0, 0);
lcd.print("Becher entnehmen");
lcd.setCursor(0, 1);
lcd.print("Prost! ");
z = z+1;
delay(4000);
}