Frage zu Arduino Sketchs erstellen

Guten Tag,
ich wolte mal fragen ob es möglich ist das man eine Befehlskette zu einen Wort verfasse z.b. Dass

digitalWrite(7,HIGH);
delay(1000);
digitalWrite(7,LOW);

ausgeführt wird wenn ich z.b. Nur

a;

schreiben muss.

Geht das.
Wenn ja dan wie?

Das was du schreibst ist nicht zu verstehen.

Möchtest du das beim programmieren vereinfachen oder im Programmablauf ?

Ich glaube, er möchte Funktionen schreiben.

Ich glaube, er darf es noch etwas deutlicher formulieren, damit auch ich es verstehen kann.

Funktionen fassen eine Reihe von Funktionen zusammen.
Es gibt Funktionen die im IDE definiert sind, aber auch Du kannst Funktionen definieren.

Ich würde aber eine Funktion nicht "a" nennen sondern einen sinnvollen Namen geben, an dem Du erkennst, was sie macht.

Außerhalb von setup() und loop() definierst Du die Funktion

void blink (void)
{
digitalWrite(7,HIGH);
delay(1000);
digitalWrite(7,LOW);
}

und dann kannst Du sie verwenden.

loop()
{
blink();
}

Grüße Uwe

Sory ich weiß selber nicht so richtig wie ich es erklären soll.Ich möchte nur weniger schreiben.Ich versuche es mal als Sketch zu zeigen.

Vorher

void setup(){
      
      pinMode(7, OUTPUT);
}

void loop(){
      
      digitalWrite(7, HIGH);      //)
      delay(1000);                     //)Das soll z.b. a;
      digitalWrite(7, LOW);      //)sein
}

so das ich nur noch schreiben muss.

void setup(){
      
      pinMode(7, OUTPUT);
}

void loop(){
      
      a;         //und dann soll led an Digitalpin 7 blinken
}

Können Sie es jetzt verstehen?

Funktionen, sag ich doch :slight_smile:

Aber auch die muss man schreiben - wenn es also so ein Mini-Sketch ist wird der dadurch länger als ohne Funktion.

Wie immer rätseln wir: was soll's im Endeffekt denn werden?

Frischling:
Sory ich weiß selber nicht so richtig wie ich es erklären soll.Ich möchte nur weniger schreiben.Ich versuche es mal als Sketch zu zeigen.

......

Können Sie es jetzt verstehen?

Nein so geht das def. nicht.
Woher soll der Compiler wissen, was du denkst.
Das geht nur so, wie Uwe es geschrieben hat.

Edit:
Wir duzen uns hier alle.

Das was Du suchst, nennt sich Funktion und hat uwefed beschrieben.

Nur nennst Du Deine Funktion "a" und uwefed hat sie "blink" genannt.

Bemerkung am Rande: Für das Blinken sind Interrupts meistens besser geeignet als Delay Funktionen...

canique:
Bemerkung am Rande: Für das Blinken sind Interrupts meistens besser geeignet als Delay Funktionen...

genau. Gibt nix besseres für Neulinge [/ironie aus]

canique:
Bemerkung am Rande: Für das Blinken sind Interrupts meistens besser geeignet als Delay Funktionen...

Echt......?
Das musst du uns erklären.

Blinken per Interrupt hat den Vorteil, dass die Blinkfrequenz absolut stabil ist und nicht vom übrigen Sketch beeinflusst wird. Das ist manchmal schon wichtig, aber sowas einem Neuling zu empfehlen, ...

Bin aber auch auf die Erklärung unseres Neumitglieds canique gespannt.

ElEspanol:
Blinken per Interrupt hat den Vorteil, dass die Blinkfrequenz absolut stabil ist und nicht vom übrigen Sketch beeinflusst wird. Das ist manchmal schon wichtig, aber sowas einem Neuling zu empfehlen, ...

Bin aber auch auf die Erklärung unseres Neumitglieds canique gespannt.

Das kann ich erst mal nicht nachvollziehen.
Das erforder somit einen externen Taktgeber.

Aber das macht hier in diesem Fall absolut keinen Sinn.
Ersten, weil Neuling, zweitens weil nur Beispiel ohne jegliche Anforderung an Genauigkeit.

Ich habe allerdings das Gefühl, der Einwurf kommt von einem Teilnehmer, der sich nicht den kompletten Thread durchlesen will.
Einfach nur mal was reinwerfen.

HotSystems:
Das erforder somit einen externen Taktgeber.

Ich dachte eigentlich an einen Timer Interrupt. aber als externen Taktgeber könnte man ja einen Mega nehmen, der per delay den Takt für den Pin Interrupt erstellt.

ElEspanol:
Ich dachte eigentlich an einen Timer Interrupt. aber als externen Taktgeber könnte man ja einen Mega nehmen, der per delay den Takt für den Pin Interrupt erstellt.

Es gib aber noch genauere Taktgeber, die würde ich dann nehmen.

Aber ok, ich weiß bisher noch nicht, warum BLINKEN so genau sein muss.
Das hatte ich als Antwort von canique erwartet.

Ich kann gern kurz darauf eingehen:

Ein Delay verbraucht immer Strom weil der Microcontroller dabei vollständig aktiv ist.
Mit einem Interrupt hingegen kann man ggf. in den Schlafmodus wechseln und nur zum Ändern des Blinkstatus aufwachen. Man braucht nicht allzu kompliziert denken in Richtung externer Taktgeber etc. - Arduinos haben ja Timer - die sind für solcher Timer Interrupts gedacht.

Auch die Blinkrate wird durch Nutzen des Timers verbessert - wenn man dazwischen etwas rechenintensives macht, setzt das Blinken aus, wenn mit Delay gearbeitet wird.

Für einen Neuling ist es sicher anspruchsvoll - keine Frage. Aber es ist gut im Hinterkopf zu wissen, dass es bessere Varianten gibt zu blinken. Selbst wenn man es nicht gleich anwendet.

Auch wenn du es nicht glauben magst, es gibt noch ein Leben neben delay()

const byte taster     = 3;
const byte led        = LED_BUILTIN;
bool BlinkAnforderung = false;



//---------------------------------------------


void yield()
{
  BlinkAnforderung = !digitalRead(taster);
}



//---------------------------------------------


void setup() 
{
  pinMode(led,OUTPUT);
  pinMode(taster,INPUT_PULLUP);
}
 
void loop() 
{
  if(BlinkAnforderung) digitalWrite(led,!digitalRead(led));
  delay(500);
}

canique:
Ich kann gern kurz darauf eingehen:

Ein Delay verbraucht immer Strom weil der Microcontroller dabei vollständig aktiv ist.
Mit einem Interrupt hingegen kann man ggf. in den Schlafmodus wechseln und nur zum Ändern des Blinkstatus aufwachen. Man braucht nicht allzu kompliziert denken in Richtung externer Taktgeber etc. - Arduinos haben ja Timer - die sind für solcher Timer Interrupts gedacht.

Auch die Blinkrate wird durch Nutzen des Timers verbessert - wenn man dazwischen etwas rechenintensives macht, setzt das Blinken aus, wenn mit Delay gearbeitet wird.

Für einen Neuling ist es sicher anspruchsvoll - keine Frage. Aber es ist gut im Hinterkopf zu wissen, dass es bessere Varianten gibt zu blinken. Selbst wenn man es nicht gleich anwendet.

  1. sowas einem Neuling vorzuschlagen, der seine Probleme mit Funktionen hat ist böse. So bringst Du unseren Neuling nur durcheinander.
  2. Auf dem Arduino ist soviel Elektronik daß sleepmodus sich nicht auszahlt. Des weiteren gilt das in 1 gesagte. also Doppelböse.
    3)[IRONIE] timer; auch etwas vom einfachsten für Anfänger [/IRONIE] das ist die Nächste Bosheit.
  3. Bevor ich einen Neuling von Delay() wegbringen will erklähre ich ihm die Verwendung von millis() und werfe nicht mit sleep, timer und Interrupt herum.

Grüße Uwe

@Frischling

Du solltest vieleicht mal mit Basisgrundlagen von C anfangen.
Einfach nach tutorial C suchen da findest Du zB:

In C ist main() die Startfunktion mit der die Abarbeitung beginnt.
Bei Arduino ist main() versteckt und ruft einmal setup() auf und dann immer wieder loop() auf.
Auch includiert Arduino automatisch viele Bibliotheken und darum braucht es bei einfachen Sketches kein #include

Grüße Uwe

noiasca:
und nun schau dir mal die Beispiele in der Arduino IDE an, da gibts ein "Blink without delay" das erklärt wie man das besser ohne delay löst.

Und sogar ohne Interrupt.