Arduino?

JokesOnYou  28.05.2024, 12:04

Hast du schonmal Arduino programmiert? Generell Ahnung vom programmieren? Und was meinst du mit zufällig? Die Lampe wird zufällig gewählt oder die Leuchtdauer?

1770AlMo 
Beitragsersteller
 29.05.2024, 01:58

Tschuldigung,dass meine Frage falsch ist ich meine damit die Leuchtdauer der Lampe

jo135  28.05.2024, 12:07

Welche Lampe? Was heißt zufällig? Ohne vernünftige Fragen gibt es keine vernünftigen Antworten.

1770AlMo 
Beitragsersteller
 29.05.2024, 02:03

Tut mir echt leid aber meine Frage ist Falsch die richtige Frage lautet: Wie programmiert man einen Arduino dass er plötzlich angeht

1 Antwort

Also hier ist ein Beispiel für ein Programm um eine Lampe mit regelmäßigen Abständen blinken zu lassen.

Quelle: https://docs.arduino.cc/built-in-examples/basics/Blink/

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);  // turn the LED on (HIGH is the voltage level)
  delay(1000);                      // wait for a second
  digitalWrite(LED_BUILTIN, LOW);   // turn the LED off by making the voltage LOW
  delay(1000);                      // wait for a second
} 

Nun musst du es noch irgendwie schaffen dass die 1000 Millisekunden die in der delay funktion stehen nicht immer gleich bleiben sondern sich zufällig um einen gewissen Wertebereich verändern.

Hier gibt es infos wie man zufällige Zahlen generiert:

https://www.arduino.cc/reference/en/language/functions/random-numbers/random/

Und damit du random() verwenden kannst musst du noch in der setup funktion das rein schreiben:

randomSeed(analogRead(0));

(Das legt den Startwert der zufälligen Zahlen fest, und wird dadurch erzeugt, dass das Hintergrund Rauschen des pins 0 gemessen wird)

Und dann kannst du die Zufalls zahl auf das delay addieren.

delay( 1000L + random(-200,200) ); 

(das L steht da, damit die Zahl "1000" im Computer intern als eine Komma-Zahl dargestellt wird. L ist hier die Abkürzung für den Datentyp "long". Man muss es in diesem Fall zwar nicht unbedingt hinschreiben, aber man sieht dadurch besser auf den ersten Blick dass der Computer hier mit Komma-Zahlen rechnet.

Der Datentyp heißt long, da dieser etwas mehr Speicherplatz zur Verfügung hat, als der "double" Datentyp, der auch oft für Komma-Zahlen verwendet wird.

)

Falls eine Fehlermeldung vom Compiler kommt, dass es ein Fehler mit dem Datentyp unsigned long gibt, dann könntest du die untenstehende Variante ausprobieren, aber das obere sollte eigentlich funktionieren.

delay((unsigned long) (1000L + random(-200,200)) );

PS: Für die interessierten Leser,

Explizites casting müsste eigentlich nicht notwendig sein, da implizit zu unsigned gecasted wird (Auch wenn dadurch ein Overflow entstehen kann)

https://stackoverflow.com/questions/4975340/int-to-unsigned-int-conversion