Problem Dauer High signal

Hallo Zusammen ich programiere gerade ein Cocktailmixer und habe den Sketch geschrieben.
Ich habe jetzt aber das Problem das die ausgänge dauernt high sind und wen sie angesteuert werden sind sie LOW. Was habe ich für ein fehler.
Achso es ist ein Arduino Mega und ein HC 05 Bluethooths empfänger der auch funktioniert und mir die zahlen sendet die ich über eine App ihm schicke.
Mit einem ausgangg ging es aber mit den jetzigen nicht mehr.

vielen dank für eure Hilfe

char Incoming_value = 0;
                
void setup() 
{
  Serial.begin(9600); 
 
  pinMode(13, OUTPUT);
  pinMode(14, OUTPUT);
  pinMode(15, OUTPUT);
  pinMode(16, OUTPUT);
  pinMode(17, OUTPUT);        
  pinMode(18, OUTPUT);   
  pinMode(19, OUTPUT);
  pinMode(20, OUTPUT);
  pinMode(21, OUTPUT);
  pinMode(22, OUTPUT);
  pinMode(23, OUTPUT);  
  pinMode(24, OUTPUT);
  pinMode(25, OUTPUT);  
}

void loop()
{
  //if(Serial.available() > 0)  
  {
    Incoming_value = Serial.read();      
    Serial.print(Incoming_value);        
    Serial.print("\n");      
  }
 
   
    //Camparie Osaft
    if(Incoming_value == '1') 
    {
    // Osaft            
      digitalWrite(13, HIGH);  
      delay(4800);
      digitalWrite(13,LOW);
    //Camparie
    digitalWrite(17,HIGH);
    delay(1600);
    digitalWrite(17, LOW);
  }

    //Planters Punch
    else if(Incoming_value == '2')    
    {
    //O-Saft   
    digitalWrite(13, HIGH);
    delay(3200); 
    digitalWrite(13,LOW);
    
    //Limetensaft
    digitalWrite(18, HIGH);
    delay(800);
    digitalWrite(18,LOW);

    // Brauner RUM
    digitalWrite(19, HIGH);
    delay(2000);
    digitalWrite(19, LOW);

    //Grenadier
    digitalWrite(26, HIGH);
    delay(400);
    digitalWrite(26, LOW);

}

    
   //Hurrican
   else if(Incoming_value == '3')  
   {
   //Rum Weiß           
   digitalWrite(20, HIGH);  
   delay(1200);
   digitalWrite(20, LOW);

  // Rum Dunkel
  digitalWrite(19, HIGH);
  delay(400);
  digitalWrite(19,LOW);

  // Osaft

  digitalWrite(13, HIGH);
  delay(2000);
  digitalWrite(13, LOW);

  // Maracuja

  digitalWrite(14, HIGH);
  delay(400);
  digitalWrite(14,LOW);

  //Annanassaft
  digitalWrite(21, HIGH);
  delay(2000);
  digitalWrite(21,LOW);

  //Limettensaft
  digitalWrite(16, HIGH);
  delay(800);
  digitalWrite(16, LOW);
}


// Pina Colada
  else if(Incoming_value == '4')    
  {   
  // Kokoslikör
  digitalWrite(23, HIGH);  
  delay(2400);
  digitalWrite(23, LOW);

  // Sahne
  digitalWrite(22, HIGH);
  delay(800);
  digitalWrite(22, LOW);

  //Weißer Rum
  digitalWrite(20, HIGH);
  delay(3200);
  digitalWrite(20, LOW);

  //Annanassaft
  digitalWrite(21, HIGH);
  delay(4800);
  digitalWrite(21, LOW);
}


// Rum Runner
else if(Incoming_value == '5')  
{
//Osaft
digitalWrite(13, HIGH);
delay(3200);
digitalWrite(13, LOW);

//Maracujasaft
digitalWrite(14, HIGH);
delay(2400);
digitalWrite(14, LOW);

// Brauner Rum

digitalWrite(19, HIGH);
delay(2400);
digitalWrite(19, LOW);

//Lmetensaft

digitalWrite(18, HIGH);
delay(400);
digitalWrite(18, LOW);
}


//White Russian
else if(Incoming_value == '6') 
{
//Wodka
digitalWrite(24, HIGH);
delay(1600);
digitalWrite(24, LOW);

//Kaffeliokör
digitalWrite(23, HIGH);
delay(1200);
digitalWrite(23, LOW);

//Sahne

digitalWrite(22, HIGH);
delay(2400);
digitalWrite(22, LOW);
}


// Woda Osaft
else if(Incoming_value == '7')    
{
// Wodka

digitalWrite(24, HIGH);
delay(2000);
digitalWrite(24, LOW);

// Osaft
digitalWrite(13, HIGH);
delay(4800);
digitalWrite(13, LOW);
}


// Woda Maracuja
else if(Incoming_value == '8')    
{
// Wodka

digitalWrite(24, HIGH);
delay(2000);
digitalWrite(24, LOW);

// Maracuja
digitalWrite(14, HIGH);
delay(4800);
digitalWrite(14, LOW);
}


//PumpeFüllen
else if(Incoming_value == '9');
{   
 digitalWrite(13, HIGH);
 digitalWrite(14, HIGH);
 digitalWrite(15, HIGH);
 digitalWrite(16, HIGH);
 digitalWrite(17, HIGH);
 digitalWrite(18, HIGH);
 digitalWrite(19, HIGH);
 digitalWrite(20, HIGH);
 digitalWrite(21, HIGH);
 digitalWrite(22, HIGH);
digitalWrite(23, HIGH);
digitalWrite(24, HIGH);
 digitalWrite(25, HIGH);
 digitalWrite(26, HIGH);
 delay(3000);
digitalWrite(13, LOW);
digitalWrite(14, LOW);
digitalWrite(15, LOW);
digitalWrite(16, LOW);
digitalWrite(17, LOW);
digitalWrite(18, LOW);
digitalWrite(19, LOW);
digitalWrite(20, LOW);
digitalWrite(21, LOW);
digitalWrite(22, LOW);
digitalWrite(23, LOW);
digitalWrite(24, LOW);
digitalWrite(25, LOW);
digitalWrite(26, LOW);









  
  }                            
}

Bitte gehe in Deinen Post, markiere den Teil mit dem Code und drücke auf den Button </>
Das ist nicht verwertbar.

Im allgemeinen ist das LOW/HIGH-Problem bedingt auf LOW-aktive Relaisbausteine.

ahhh okay danke

das mit dem LOW- aktive Relaisbaustein verstehe ich nicht.

Hallo,

klares Kommunikationsproblem.

@TO:
redest du wirklich von den Ausgängen bzw. Pins des Arduino Boards oder hast du wie my_xy vermutet noch ein Relaisboard dran und meinst dessen Ausgänge? Laut deinem Code redest du nur von Arduino Board. Aber das Fehlerbild passt nicht dazu. Übrigens fehlt die Initialisierung von Pin 26. Und beim letzten Vergleich auf 9 ist ein Semikolon zu viel.

Wenn du alle Pins an bestimmten Stellen gemeinsam behandelst, kannst du das zusammenfassen. Ggf. gegen digitalWrite austauschen.

for (byte i = 13; i<=26; i++) {
    pinMode(i, OUTPUT);
}

Hallo Doc_Arduino

du hast recht ich meine die Pins am Arduino

hab mal ein 8er Relai dran gemacht und ich muss sagen das ding macht halt kein stück das was ich programiert habe.

und leider verstehe ich nicht was du damit gemeint hast

for (byte i = 13; i<=26; i++) {
    pinMode(i, OUTPUT);
}

Wäre es sinvoller in Case zu programieren?

Und was genau verstehst du daran nicht ?

Das ist eine Funktion um einen großen Teil deiner Anweisungswiederholungen einzusparen.

Hallo,

derzeit schreibst du für jeden Pin eine Zeile Code für immer die gleiche Aufgabe nur der Pin ändert sich. Das kann man in for Schleifen zusammenfassen. Ob if Konstrukte oder switch case ist erstmal egal. switch case passt jedoch am Ende besser zur Aufgabe und ist besser lesbar was der Code machen soll. Du denkst in die richtige Richtung. Lass uns aber erstmal dein Pinproblem lösen. Zuviel auf einmal ist nicht gut.

Jetzt kreisen wir dein Problem ein. Was passiert mit folgenden Code. Passt die Ausgabe zum Led Licht bzw. deine Messung am Pin?

void setup()
{
  Serial.begin(9600);
  pinMode(13, OUTPUT);
}

void loop()
{
  Serial.println(F("HIGH"));
  digitalWrite(13, HIGH);
  delay(3000);
  Serial.println(F("LOW"));
  digitalWrite(13, LOW);
  delay(3000);
}

Ja das passt das relai schaltet und mein Serieller monitor passt auch

ich versteh mitlerweile was du meinst mit der For schleife und ich hab mein problem gefunden aber ich schaff es nicht die lösung dazu zu finden.

Ich schreib über die app eine zahl in den seriellen monitor und diese wird ja nicht gelöscht sondern dauernt abgespielt.

gibt es eine möglichkeit diese Zahl zu löschen oder durch einen befehl zu ändern?

Hallo,

die Antwort ist jetzt wieder so eine die Verwirrung stiftet. Schaltet das Relaisboard zu den Arduinoboard Pins invertiert oder nicht?

Vermutlich liegst am einlesen der Nummer bzw. falscher Wertverarbeitung.
Was macht?

const byte READ_BUFFER_SIZE {3};
char rxBuffer [READ_BUFFER_SIZE + 1];       // Platz für 3 Zeichen + Null-Terminator
int cocktailNummer;

void setup()
{
  Serial.begin(9600);
  pinMode(13, OUTPUT);
  pinMode(17, OUTPUT);
}

void loop()
{
  if (readSerial(Serial) )
  {
    Serial.print("Eingelesen: ");
    Serial.println(rxBuffer);
    cocktailNummer = atoi(rxBuffer);
    Serial.print("cocktailNummer: ");
    Serial.println(cocktailNummer);
  }

  //Camparie Osaft
  if (cocktailNummer == 1)
  {
    // Osaft
    digitalWrite(13, HIGH);
    delay(4800);
    digitalWrite(13, LOW);
    //Camparie
    digitalWrite(17, HIGH);
    delay(1600);
    digitalWrite(17, LOW);
  }
}

bool readSerial(Stream & stream)
{
  static byte index {0};
  bool status {false};

  while (stream.available())
  {
    char c = stream.read();

    if (c == '\n')                                      // wenn LF eingelesen
    {
      rxBuffer[index] = '\0';                           // String terminieren
      index = 0;
      status = true;                                    // String fertig eingelesen
    }
    else if ( (c >= 32) && (index < READ_BUFFER_SIZE) )   // solange noch Platz im Buffer ist
    {
      rxBuffer[index++] = c;                              // Zeichen abspeichern und Index inkrementieren
    }
  }
  return status;
}

Wenn du deinen Code einmal mit dem seriellen Monitor testest, sieht man das Unsinn rauskommt. Keine Datenverarbeitung möglich. Wenn du dann noch Serial.available() auskommentierst ...

char Incoming_value = 0;
                
void setup() 
{
  Serial.begin(9600); 
}

void loop()
{
  if(Serial.available() > 0)  
  {
    Incoming_value = Serial.read();      
    Serial.println(Incoming_value);           
  }

  if (Incoming_value == '5')
  {
    Serial.println(F("FUENF"));  
  }                         
}

Bei beiden passiert im Seriellen monitor nichts

an sich funktioniert mein Program nur er liest dauerhaft die letzte zahl ein und verwendet diese wieder. Ich muss also irgendwas haben das diese wieder hohlung aufgehoben wird.

Hallo,

genau den Effekt solltest du im seriellen Monitor sehen wenn du hier 1 oder 5 eingibts.
Hast du den seriellen Monitor auf "neue Zeile" ... 9600 Baud eingestellt? Unten rechts.

char Incoming_value;

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  if (Serial.available() > 0)
  {
    Incoming_value = Serial.read();
    Serial.println(Incoming_value);
  }

  if (Incoming_value == '1')
  {
    Serial.println(F("EINS"));
  }

  if (Incoming_value == '5')
  {
    Serial.println(F("FUENF"));
  }
}

Edit:
Wenn das klappt sollte auch der erste Code von #11 funktionieren wenn du 1 eintippst.

also hab Neue zeile und hab 9600 eingestellt trotzdem klappt es nicht

Ich habe es jetzt hinbekommen durch dein Tipp

...

Wenn du dann noch Serial.available() auskommentierst ...

jetzt kann ich 2 mal ordentlich die relais ansteuern aber ab dan nimmt der serielle Monitor von der APP nicht mehr an.

Hallo,

deine Antworten widersprechen sich. Was hast du gemacht damit es erstmal grob funktioniert? Weil dann muss auch der erste Code aus #11 funktionieren wenn du 1 eintippst.
Sendet deine App einen Linefeed '\n' ?

Der Code aus #11 soll nämlich die Basis für alles weitere sein.

ich hab das Serial.available() ausgeklammert jetzt kann ich auf der app 3 mal ein cocktail ausklammern und dan empfängt der serieler monitor keine zahl mehr.

Ich hab das mit dem #11 probiert aber ich versteh den aufbau und funktion nicht.

Hat Dir schon jemand gesagt, das das falsch ist?

Hallo,

Hat seine Tücken, aber funktioniert von 0 bis 9.

Warum das mit der App nicht funktioniert weiß jetzt auch nicht. Funktioniert denn #11?
Weil

... ist ein anderes Thema. Es muss erstmal funktionieren.