Anfänger, neu im Forum

Hallo zusammen, möchte mich kurz vorstellen. Ich heiße Christoph bin 38 Jahre alt. Bin Neuling bei dem Thema Arduino und habe keine Vorkenntnissen in Sachen Programmierung. Nein Ziel ist es irgendwann mal ein zusatzinstrumen für mein Motorrad zu bauen, in dem motortemperatur, Uhrzeit, ganganzeige, ein Logo beim starten und Evtl Reifendruck enthalten sind. Ich habe mit ein Lehrbuch besorgt, in dem auch kleine Aufgaben gestellt werden z.b. Das ein und ausschalten der led pin13 über die serielle Schnittstelle. Das hat auch funktioniert. Nun soll die led zusätzlich mit Eingabe der „3“ zum blinken gebracht werden. Das klappt nicht. Hat da jemand nen Tipp für den Code für mich? Bedanke mich schon mal im voraus bei euch für die Hilfe Gruß Christoph

Wo ist dein Problem?

"klappt nicht" ist keine ausreichende Fehlerbeschreibung.

Okay, das stimmt.
Die led geht einmal an und wieder aus.
Das Programm scheint die an/aus folge nicht zu wiederholen. Sonst funktioniert es.

Zeige mal den Sketch dann kann man anhand des Sketches dir besser helfen und/oder Tips geben. Ist immer einfacher. Gruß DerDani

Alfaone79: Das Programm scheint die an/aus folge nicht zu wiederholen. Sonst funktioniert es.

Leider sehe ich weder Programm, noch Schaltung. Damit ist es mir nicht möglich, dir bei deinem Problem zu helfen.

Bedenke: Du, dein Aufbau und dein Monitor, stehen auf der anderes Seite des Internets. Zu weit weg.... Und meine telepathischen Fähigkeiten, sind auch sehr begrenzt.

So, Habe einen Arduino UNO Sketch von der ersten Aufgabe:

const unsigned int LED_PIN = 13; const unsigned int BAUD_RATE = 9600;

void setup() { pinMode (LED_PIN, OUTPUT); Serial.begin (BAUD_RATE);

}

void loop() { if (Serial.available() > 0) { int command = Serial.read(); if (command == '1') { digitalWrite (LED_PIN, HIGH); Serial.println("LED on");

} else if (command == '2') { digitalWrite (LED_PIN, LOW); Serial.println("LED off"); } else { Serial.print("Unknown command: "); Serial.print(command); } } }

Sketch von der zweiten Aufgabe, Zeile 22-27 habe Ich hinzugefügt.

const unsigned int LED_PIN = 13; const unsigned int BAUD_RATE = 9600; const unsigned int PAUSE = 500;

void setup() { pinMode (LED_PIN, OUTPUT); Serial.begin (BAUD_RATE);

}

void loop() { if (Serial.available() > 0) { int command = Serial.read(); if (command == '1') { digitalWrite (LED_PIN, HIGH); Serial.println("LED on");

} else if (command == '2') { digitalWrite (LED_PIN, LOW); Serial.println("LED off");

} if (command == '3') { digitalWrite(LED_PIN, HIGH); delay(PAUSE); digitalWrite(LED_PIN, LOW); delay(PAUSE); Serial.println("LED blinkt");

} else { Serial.print("Unknown command: "); Serial.print(command); } }

So wie du das machst, kann es nicht funktionieren.

Du musst das Ergebnis in einer Statusvariable zwischenspeichern und dann immer in der Loop blinken lassen. Aber nicht mit den delays, sondern mit dem Beispiel in BlinkWithoutDelay aus der IDE.

Und setze deine Sketche in Code-Tags, dann sind die für alle besser lesbar. So fehlt jegliche Formatierung.

Danke für die Antwort, Leider habe ich nichts verstanden von dem was du geschrieben hast

const byte LED_PIN    = 13;
bool blinkanforderung = false;

void yield()
{
  switch(Serial.read())
  {
    case '1': digitalWrite (LED_PIN, HIGH);
              blinkanforderung = false;
              break;
              
    case '2': digitalWrite (LED_PIN, LOW);
              blinkanforderung = false;
              break;
              
    case '3': blinkanforderung = true;
              break;
  }  
}

void setup() 
{
  Serial.begin(9600);
  Serial.println("Start");
  pinMode (LED_PIN, OUTPUT);
}

void loop() 
{
  if(blinkanforderung) digitalWrite (LED_PIN,!digitalRead(LED_PIN));
  delay(300);
}

:smiling_imp: :smiling_imp: :smiling_imp: :smiling_imp: :smiling_imp: :smiling_imp:

Alfaone79: Danke für die Antwort, Leider habe ich nichts verstanden von dem was du geschrieben hast

Das ist aber sehr bedauerlich. Habe ich mich zu undeutlich ausgedrückt ?

Eine Variante, ohne delay.

#include <INTERVAL.h>
// https://forum.arduino.cc/index.php?topic=413734.0

const byte LED_PIN    = 13;
bool blinkanforderung = false;

void serialEvent()
{
  switch(Serial.read())
  {
    case '1': digitalWrite (LED_PIN, HIGH);
              blinkanforderung = false;
              break;
              
    case '2': digitalWrite (LED_PIN, LOW);
              blinkanforderung = false;
              break;
              
    case '3': blinkanforderung = true;
              break;
  }  
}

void setup() 
{
  Serial.begin(9600);
  Serial.println("Start");
  pinMode(LED_PIN,OUTPUT);
}

void loop() 
{
  INTERVAL(300)if(blinkanforderung)digitalWrite(LED_PIN,!digitalRead(LED_PIN));
}

:o :o :o :o :o :o

Ah, okay Es gibt da also mehrere Wege zum Ziel

Ohje, das wird ein langer Weg zu meinem geplanten Projekt. Ist dieses Projekt, welches ich in meinem anfagspost beschrieben habe überhaupt realisierbar? Wie bekomme ich die Sketche so dargestellt, das man sie im Forum lesen kann?

Alfaone79: Ohje, das wird ein langer Weg zu meinem geplanten Projekt. Ist dieses Projekt, welches ich in meinem anfagspost beschrieben habe überhaupt realisierbar? Wie bekomme ich die Sketche so dargestellt, das man sie im Forum lesen kann?

Ja, wenn man programmieren will, muss man auch immer etwas lernen. Damit die Sketche lesbar werden verwendest du Code-Tags, Schaltfläche oben links im Forumeditorfenster.

Und ja, dein Projekt ist realisierbar. Beispiele für einen Weg dahin wurden dir auch schon aufgezeigt.

Ist schon realisierbar. Läuft grade hier im Forum. Schau mal nach Motorradtacho. Aber du hast schon recht. Einfach wird es nicht werden. Versuche erst mal mit den einfachen Basics klar zu kommen und dann arbeite dich Stück für Stück vor. Nicht nur hier im Forum wird es so gemacht, dass das Projekt in viele kleine Einzelprojekte zerlegt wird und wenn jedes dieser Einzelprojekte läuft werden dies dann nach und nach zu einem großen und ganzen zusammengebaut

Ahh

Alfaone79: Ahh

Ohhh...

Und ich sehe noch keine Code-Tags.

Das Instrumenten Projekt ist genau das gleiche wie ich es vor habe. Nur mit einem anderen Logo Und in einem Rundinstrument mit einem OLED Display

Um noch einmal auf meine Frage zu den Übungen zurück zu kommen.... warum kann mein Sketch nicht fuktionieren? Nur zum Verständniss

const unsigned int LED_PIN = 13;
const unsigned int BAUD_RATE = 9600;
const unsigned int PAUSE = 500;
                                                                                                                                                                                                     
void setup() {
  pinMode (LED_PIN, OUTPUT);
  Serial.begin (BAUD_RATE);

}

void loop() {
  if (Serial.available() > 0) {
    int command = Serial.read();
    if (command == '1') {
      digitalWrite (LED_PIN, HIGH);
      Serial.println("LED on");
    
    } else if (command == '2') {
      digitalWrite (LED_PIN, LOW);
      Serial.println("LED off");

    } else if (command == '3') {
      digitalWrite(LED_PIN, HIGH);
      delay(PAUSE);
      digitalWrite(LED_PIN, LOW);
      delay(PAUSE);
      Serial.println("LED blinkt");
         
    } else {
      Serial.print("Unknown command: ");
      Serial.print(command);
      }
    }
  }