Cocktailmaker gelöst

??
Ich habe jetz mal nur mit dem SerMon was gebaut - das geht.
Mehr als 3mal.

Mir ist nur aufgefallen, das Du 3 Pins nicht benutzt.

char Incoming_value = 0;

byte osaftPin = 13;
byte maracujaPin = 14;
byte campariePin = 17;
byte limettePin = 18;
byte rumBraunPin = 19;
byte rumWeissPin = 20;
byte ananasPin = 21;
byte sahnePin = 22;
byte cocosLikoerPin = 23;
byte wodkaPin = 24;
byte grenadierPin = 26;

byte ausgabePin[] = {osaftPin, maracujaPin, campariePin, limettePin, rumBraunPin, rumWeissPin, ananasPin, sahnePin, cocosLikoerPin, wodkaPin, grenadierPin};


void setup()
{
  Serial.begin(115200);
  Serial.println(F("Start...."));
  for (byte b = 0; b < sizeof(ausgabePin); b++)
  {
    digitalWrite(ausgabePin[b], LOW);
    pinMode(ausgabePin[b], OUTPUT);
  }
}

void loop()
{
  // if (Serial.available() > 0)
  {
    Incoming_value = Serial.read();
  }
  if (isDigit(Incoming_value))
  {
    Serial.print(Incoming_value);
    Serial.print("\n");
  }
  else
  {
    Serial.println(F("no digit!"));
    Incoming_value = 0;
  }
  //Camparie Osaft
  if (Incoming_value == '1')
  {
    // Osaft
    digitalWrite(osaftPin, HIGH);
    delay(4800);
    digitalWrite(osaftPin, LOW);
    //Camparie
    digitalWrite(campariePin, HIGH);
    delay(1600);
    digitalWrite(campariePin, LOW);
  }
  //Planters Punch
  else if (Incoming_value == '2')
  {
    //O-Saft
    digitalWrite(osaftPin, HIGH);
    delay(3200);
    digitalWrite(osaftPin, LOW);
    //Limetensaft
    digitalWrite(limettePin, HIGH);
    delay(800);
    digitalWrite(limettePin, LOW);
    // Brauner RUM
    digitalWrite(rumBraunPin, HIGH);
    delay(2000);
    digitalWrite(rumBraunPin, LOW);
    //Grenadier
    digitalWrite(grenadierPin, HIGH);
    delay(400);
    digitalWrite(grenadierPin, LOW);
  }
  //Hurrican
  else if (Incoming_value == '3')
  {
    //Rum Weiß
    digitalWrite(rumWeissPin, HIGH);
    delay(1200);
    digitalWrite(rumWeissPin, LOW);
    // Rum Dunkel
    digitalWrite(rumBraunPin, HIGH);
    delay(400);
    digitalWrite(rumBraunPin, LOW);
    // Osaft
    digitalWrite(osaftPin, HIGH);
    delay(2000);
    digitalWrite(osaftPin, LOW);
    // Maracuja
    digitalWrite(maracujaPin, HIGH);
    delay(400);
    digitalWrite(maracujaPin, LOW);
    //Annanassaft
    digitalWrite(ananasPin, HIGH);
    delay(2000);
    digitalWrite(ananasPin, LOW);
    //Limettensaft
    digitalWrite(16, HIGH);
    delay(800);
    digitalWrite(16, LOW);
  }
  // Pina Colada
  else if (Incoming_value == '4')
  {
    // Kokoslikör
    digitalWrite(cocosLikoerPin, HIGH);
    delay(2400);
    digitalWrite(cocosLikoerPin, LOW);
    // Sahne
    digitalWrite(sahnePin, HIGH);
    delay(800);
    digitalWrite(sahnePin, LOW);
    //Weißer Rum
    digitalWrite(rumWeissPin, HIGH);
    delay(3200);
    digitalWrite(rumWeissPin, LOW);
    //Annanassaft
    digitalWrite(ananasPin, HIGH);
    delay(4800);
    digitalWrite(ananasPin, LOW);
  }
  // Rum Runner
  else if (Incoming_value == '5')
  {
    //Osaft
    digitalWrite(osaftPin, HIGH);
    delay(3200);
    digitalWrite(osaftPin, LOW);
    //Maracujasaft
    digitalWrite(maracujaPin, HIGH);
    delay(2400);
    digitalWrite(maracujaPin, LOW);
    // Brauner Rum
    digitalWrite(rumBraunPin, HIGH);
    delay(2400);
    digitalWrite(rumBraunPin, LOW);
    //Lmetensaft
    digitalWrite(limettePin, HIGH);
    delay(400);
    digitalWrite(limettePin, LOW);
  }
  //White Russian
  else if (Incoming_value == '6')
  {
    //Wodka
    digitalWrite(wodkaPin, HIGH);
    delay(1600);
    digitalWrite(wodkaPin, LOW);
    //Kaffeliokör
    digitalWrite(cocosLikoerPin, HIGH);
    delay(1200);
    digitalWrite(cocosLikoerPin, LOW);
    //Sahne
    digitalWrite(sahnePin, HIGH);
    delay(2400);
    digitalWrite(sahnePin, LOW);
  }
  // Woda Osaft
  else if (Incoming_value == '7')
  {
    // Wodka
    digitalWrite(wodkaPin, HIGH);
    delay(2000);
    digitalWrite(wodkaPin, LOW);
    // Osaft
    digitalWrite(osaftPin, HIGH);
    delay(4800);
    digitalWrite(osaftPin, LOW);
  }
  // Woda Maracuja
  else if (Incoming_value == '8')
  {
    // Wodka
    digitalWrite(wodkaPin, HIGH);
    delay(2000);
    digitalWrite(wodkaPin, LOW);
    // Maracuja
    digitalWrite(maracujaPin, HIGH);
    delay(4800);
    digitalWrite(maracujaPin, LOW);
  }
  //PumpeFüllen
  else if (Incoming_value == '9')
  {
    for (byte b = 0; b < sizeof(ausgabePin); b++)
    {
      digitalWrite(ausgabePin[b], HIGH);
    }
    delay(3000);
    for (byte b = 0; b < sizeof(ausgabePin); b++)
    {
      digitalWrite(ausgabePin[b], LOW);
    }
  }
  Serial.println(F("Ausführung erledigt - Nächster Cocktail"));
}

/*
  digitalWrite(osaftPin, HIGH);
  digitalWrite(maracujaPin, HIGH);
  //    digitalWrite(15, HIGH);
  //    digitalWrite(16, HIGH);
  digitalWrite(campariePin, HIGH);
  digitalWrite(limettePin, HIGH);
  digitalWrite(rumBraunPin, HIGH);
  digitalWrite(rumWeissPin, HIGH);
  digitalWrite(ananasPin, HIGH);
  digitalWrite(sahnePin, HIGH);
  digitalWrite(cocosLikoerPin, HIGH);
  digitalWrite(wodkaPin, HIGH);
  //    digitalWrite(25, HIGH);
  digitalWrite(grenadierPin, HIGH);
  delay(3000);
  digitalWrite(osaftPin, LOW);
  digitalWrite(maracujaPin, LOW);
  //    digitalWrite(15, LOW);
  //    digitalWrite(16, LOW);
  digitalWrite(campariePin, LOW);
  digitalWrite(limettePin, LOW);
  digitalWrite(rumBraunPin, LOW);
  digitalWrite(rumWeissPin, LOW);
  digitalWrite(ananasPin, LOW);
  digitalWrite(sahnePin, LOW);
  digitalWrite(cocosLikoerPin, LOW);
  digitalWrite(wodkaPin, LOW);
  //    digitalWrite(25, LOW);
  digitalWrite(grenadierPin, LOW);
*/

Eigentlich würde ich daraus ein switchCase machen, aber versuch mal ob das geht.
Dann schaun wa mal.

Nö, ist einfach überflüssig. Bitte achte auf das letzte Zeichen der Zeile.

Hallo,

ja okay stimmt. Das Semikolon hatte ich schon in #4 bemerkt und in #19/#20 schon wieder gedanklich ausgeblendet und übersehen und mich nur auf '0' bis '9' konzentriert. Damit habe ich scheinbar my_xy Aussage falsch interpretiert. Im Nachgang betrachtet.
Das ist jedoch ein Nebenkriegsschauplatz auf alles betrachtet. :wink:

Ach... Und ich habs übersehen.

Naja, nicht nur das.
Nach dem ; ist Schluss.
Dann geht es HIGH.
Nach einem delay von 3000 geht es für einen Bruchteil von einem Bruchteil einer Sekunde LOW um sofort wieder HIGH zu gehen.
Das Ding ist dauer-HIGH. Wie geschrieben :wink:
Schade nur, ich hätte gerne meinen Sketch noch im Test gehabt....

Na denn.

Hallo,

siehste und ich hatte zwar das falsche Semikolon erkannt, aber die Tragweite dessen falsch eingeschätzt. Damit ist die ursprüngliche Anfangsursache über Umwege geklärt. :wink: Manchmal muss man sich einmal mal unterhalten. Auf seine aktuellen Tests bin ich auch gespannt was dabei herauskommt.

Mein Reden :slight_smile:

Du sendest Daten über serial und USB zum Terminal von der IDe Arduino.
Aber gleichzeitig sind an den Pins 0 und 1 das Bluetooth-Modul angeschlossen?
Willst du es an eine andere der 3 Seriellen Schnittstellen benutzen? Geht auch nicht. DU blockierst diese (pins 14 bis 19) mit den Relais
Übrigens Du blockierst auch die I2C Schnittstelle die sich auf 20 und 21 befindet.

Grüße Uwe

Also das Program scheint zu funktionieren und sieht extrem gut aus.

Jetzt hab ich das Problem das nach ca. 3-5 Klicks (Auswwahl) auf dem Tablet sendet es keine zahlen mehr an den seriellen Monitor wen ich aber neu verbinde geht es wieder.

Gibt es da einen Tipp?

Hast Du meinen Code laufen lassen?
Nein?
Nachholen.

Ja dein Code läuft und sieht auch deutlich besser aus als mein Sketch :sweat_smile:

Wie gesagt jetzt ist das problem das die app nach einer zeit nichts mehr sendet

ouuu und müssen die kleinen LEDs am Relai immer leuchten oder nur wen sie geschalten sind?

MOOOMENT!

Nur um das mal festzuhalten.

So und nu nimm mal zwei Dinge raus:
Der Teil ist komplett zu löschen:

Und das ist auszukommentieren:

Und dann erklär doch mal, was Du da für irgendweine app hast, wenn das nicht hilft.

Hallo,

ich kenne deine App nicht. Sendet diese ein LF (new line) mit? Kannst du das wo einstellen? Man kann mit dem ersten Code aus #11 Zahlen mit bis zu 3 Ziffern senden. Also 0 bis 999. Egal was man eintippt am Ende muss ein LF mit gesendet werden. Das ist eine Eingabeendeerkennung. Ansonsten funktioniert das nicht richtig bzw. ist nur auf ein Einziges Zeichen/Ziffer beschränkt.

yes jetzt funktioniert es mit de APP
kann so oft wie ich will einen nacheinander auswählen

Blockzitat

Blockzitat


Das ist mir wurscht.
Das ist mein Aufhänger:

Ich kann Dir sagen, was passiert ist - irgendwann ist Dir der Connect mit dem BT-Modul "vollgeschoben".

So, und nu Code aufräumen, switch/case, Blockade freien Code herstellen und alles wird schick.

Wie meinst du "auffräumen"?

und hast du noch eine idee bin grad über ein neues Problem gestolpert.
Wen jemand 2 mal den Taster drückt dan kommt 2 mal die zahl an und es wird 2 mal ein cocktail gemacht.

und das mit dem Blockzitat hat nicht so geklappt sorry :smiley:

Naja, raus, was da nicht rein gehört. Zum Beispiel Pins, die nicht genutzt werden und Codeteile, die schon "en block" von mir als überflüssig erkannt wurden..

Jaaaa... Ich weiss.
Das ist dann der nächste Schritt - nach dem switch /case - ohne Blockade (auf nicht erwünschte Taste) zu reagieren.
:slight_smile:

Hallo,

du hast also eine eigene App programmiert. Auch gut, haste mir etwas voraus.
Du musst nur dafür Sorgen das deine App nach jeder Zahl die gesendet wird noch ein LF bzw. '\n' sendet. Dann ist alles in Butter.

Das Problem verstehe ich nicht. Ist es nicht Sinn und Zweck das auf Tastendruck ein Cocktail gemacht wird?

ja aber wen eine ungeduldige person 2 mal drauf drückt werden 2 hintereinader gemacht :slight_smile: