Arduino Funktionen/Unterprogramm

Hallo alle zusammen,
ich bin ein totaler Neuling auf dem gebiet.
meine Frage ist wahrscheinlich sehr einfach zu beantworten für euch :slight_smile:
undzwar möchte ich ein Unterprogramm in einen Arduino schreiben
also ein Programm läuft und ich drücke eine taster und dann blinken die LEDs anders
wie mache ich so etwas genau
ich habe jetzt das ganze internet durchsucht und habe nichts gefunden.
Deshalb wende ich mich an euch. :slight_smile:
ich hoffe ihr könnt mir schnell Antworten
MfG
Manuel

Hay,

verwende ggf. einen Interrupt.
Oder Frage zB mit einer If Anweisung den Status des Tasters (Achtung entprellen in Software berücksichtigen) ab und mit einer switch case-Anweisung wird je anch Zustand des Tasters die gewünschte Funktion aufgerufen.

Hubert hat es angedeutet.

Du solltest dich erst einmal an Hand von Büchern und/oder Tutorials mit dem Arduino einarbeiten. Hierbei solltest dir vorallem Zeit beim Entprellen von Tastern sowie BlinkWithoutDelay lassen.

ManuBeze:
ich habe jetzt das ganze internet durchsucht und habe nichts gefunden.

Etwas unglaubwürdig.

Hallo,
"Unterprogramm in einen Arduino schreiben"

Du hast falsch gesucht. Suche nach "switch Case" und "Funktion"
Das klassische Unterprogramm wird nicht angewendet.
Das begreifst Du (und habe ich auch) aber leider nur durch lesen und üben.
Das "TastenEntprellen" unterschätze ja nicht.

http://arduino.cc/en/Reference/SwitchCase

Gruß und Spaß
Andreas

sschultewolter:
Du solltest dich erst einmal an Hand von Büchern und/oder Tutorials mit dem Arduino einarbeiten. Hierbei solltest dir vorallem Zeit beim Entprellen von Tastern sowie BlinkWithoutDelay lassen.

ManuBeze:
ich habe jetzt das ganze internet durchsucht und habe nichts gefunden.

Etwas unglaubwürdig.

Grenze die Suche auf " Arduino " ein, dann siehst du evtl. einzelne Bäume im Wald.

Früher gab es Gratis-CD's von AOL, da war das Internet drauf :wink:

Und den Hinweis "verwende ggf. einen Interrupt. " ignoriere lieber erstmal.
Taster per Interrupt ist erheblich schwieriger als ohne. ( und bringt nix )

C kennt keine Unterprogramme.
C kennt fast nur Funktionen.
Eine Funktioni ist eine "Zusammenfassung" eines Stücks C-Codes. Der Funktion gibst Du einen Namen und Werte die Du übergibst bzw einen Wert den Du zurückbekommst.

zb

1 int Kilogramm_Pfund_Umrechnung( int Kilogramm)
2 {
3  int Pfund;
4  Pfund = Kilogramm *2;
5  return ( Pfund);
6 }

Zeile 1:
Ich deklariere die Funktion. Ich gebe an welchen Variablentyp die Funktion zurückgibt und welche und wieviele Variable ich beim Aufruf übergebe.
Zeile 3
Ich definiere eine Variable die aber nur in der Funktion existiert weil ich sie in der Funktion definiert habe - siehe lokale - globale Variablen
Zeile 4
Ich berechne den Wert von Pfung mit meiner Formel. Hier kann alles mögliche stehen auch der Aufruf anderer Funktionen
Zeile 5
Ich gebe den Wert der Variablen Pfund zurück. Rückgabewert gibt es nur einen.

ich rufe die Funktion auf:

Gewicht_pfund = Kilogramm_Pfund_Umrechnung ( 5);

Ich rechne 5 kg in Pfund um und speichere den Wert in der Variablen.

Eigene Funktionen sind gleichwertig zu Funktionen von C oder von Arduino oder von Bibliotheken.

Grüße Uwe

Auch wenn es strenggenommen auch eine Funktion ist, kommt man mit

void Funktionenname(Übergabevariablen)
{....}

schon dem sehr nahe, was in anderen klassischen Programiersprachen ein Unterprogramm ist.

Ja, ist ähnlich, aber per Definition hat C keine Unterprogramme sondern Funktionen.
Das Konzept von Funktionen benötigt keine Sprünge darum gibt es in C Sprünge wie GOTO (fast) nicht.
Grüße Uwe

Alles Klar ich danke euch allen für die tipps .
ich werde es versuchen und tutorials gucken bis zum geht nicht mehr dann denke ich werde ich es verstehen. :smiley:
Gruß
manuel

uwefed:
Das Konzept von Funktionen benötigt keine Sprünge darum gibt es in C Sprünge wie GOTO (fast) nicht.

Call und Return sind letztlich auch Sprünge. Der Program Counter wird da genauso auf eine andere Adresse gesetzt. Es passiert halt noch mehr im Hintergrund, wie Sicherung von Registern auf dem Stack und Parameter in definierten Registern ablegen, weshalb Funktionaufrufe relativ viel Zeit kosten.

Letztlich ist das eine Definitionssache. In manchen Sprachen gibt es auch für das gleiche Prinzip unterschiedliche Namen.