Grundkenntnisse Programmierung 1 (Pulsierende LED): Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
 
(100 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Kategorie:Arduino: Projekt Grundkenntnisse]]
'''Autor:''' Justin Frommberger<br>
== Void loop und void setup ==  
== Void loop und void setup ==  


'''Quelltext 1:''' <code>ArduinoSketchStruktur.ino</code>
['''Quelltext 1:''' <code>ArduinoSketchStruktur.ino</code>]
<syntaxhighlight lang="C" style="border: none; background-color: #EFF1C1; font-size:14px">
<syntaxhighlight lang="C" style="border: none; background-color: #EFF1C1; font-size:small">
void setup ( ) // Programmstart
void setup ( ) // Programmstart
{
{
Zeile 14: Zeile 16:


'''Setup-Funktion'''
'''Setup-Funktion'''
* Wird einmalig beim Start des Arduino-Boards oder nach einem Reset ausgeführt.  
* Wird einmalig beim Start des Arduino-Boards oder nach einem Neustart (Reset) ausgeführt.  
* In dieser Funktion werden Variablen, Pinmodi, Bibliotheken, usw. initialisiert.  
* In dieser Funktion werden [[https://myhomethings.eu/de/arduino-datentypen-und-variablen/ Variablen]], [[https://www.arduino.cc/reference/de/language/functions/digital-io/pinmode/ Pinmode]], [[https://starthardware.org/bibliotheken/ Bibliotheken]], usw. initialisiert.  
* Muss immer vorhanden sein!
* Muss immer vorhanden sein!


Zeile 23: Zeile 25:


== Initialisierung (Zuweisung)==
== Initialisierung (Zuweisung)==
Ist die Zuweisung für ein Datenobjekt oder einer Variable
* Wird benötigt, um im Programm Variablen Eigenschaften zuzuweisen.
* '''Beispielhaft''' wird der Person ('''Lisa''') ihr Alter zugeordnet Alter ('''18''') zugewiesen.
* So weiß das Programm, dass Lisa gerade 18 Jahre alt ist.
----
===Datentypen (const byte)===
* Um die erstellte Variable (Lisa = 18) verwenden zu können, benötigen Sie einen Datentypen.
* Für das Beispiel (Lisa = 18) wird der Datentyp <code>'''const byte'''</code> verwendet, siehe Tabelle 1.
----
===Const===
Steht für eine Konstante und ändert die Variable zu "read-only"
* Das bedeutet, dass die Variable wie alle anderen Variablen des gleichen Typs benutzt werden kann, aber dass der Wert unveränderlich ist.
* Wenn der Variable ein neuer Wert zugewiesen wird, kommt es zu einem Compiler-Fehler.


'''Erklärung'''
['''Quelltext 2: ''' <code>byte.ino</code>]
* Ist die Zuweisung für ein Datenobjekt oder einer Variable.
<syntaxhighlight lang="C" style="border: none; background-color: #EFF1C1; font-size:small">
* Wird benötigt, um im Programm Variablen Eigenschaften zuzuweisen.
* Sozusagen wird einer Person ihr Alter zugeordnet ('''Lisa'''), um sie wiederzuerkennen wird ihr das Alter ('''18''') zugewiesen.
* So weiß das Programm, dass Lisa 18 Jahre alt ist.


===Datentypen (Int)===
const byte Lisa = 18;    // Lisa ist 18 Jahre alt
* Um nun die erstellte Variable (Lisa = 18) verwenden zu können, benötigen wird ein Datentyp benötigt.
* Arduino verfügt über einige Datentypen, siehe [[https://www.arduino.cc/reference/de/#variables hier!]]
* Für das Beispiel (Lisa = 18)  wird eine Variable für Zahlen benötigten, diese lautet Intiger(Int)


'''Quelltext 2:''' <code>Int.ino</code>
</syntaxhighlight>
<syntaxhighlight lang="C" style="border: none; background-color: #EFF1C1; font-size:14px">
----


int Lisa = 18;    // Lisa ist 18 Jahre alt
=== Datentypen ===
In der Programmierung gibt es verschiedene '''Datentypen''', die angeben, welche Art von Wert eine Variable hat und welche Operationen auf sie angewendet werden können.<br>
Ein '''Byte''' kann nur Zahlen im Bereich von 0 bis 255 speichern, ohne dass ein Fehler auftritt.


</syntaxhighlight>
{| class="wikitable"
|+ style = "text-align: left"| Tabelle 1: Datentypen
|-
! Datentyp !! Bemerkung !! Wertebereich
|-
| bool  || 1 Bit [true,false] || [0,1]
|-
| byte || 8 Bit ohne Vorzeichen  || [0,255]
|-
| char || 8 Bit ASCII-Zeichen || [-128,128]
|-
| double || 64 Bit Fließkommazahl, 15 Nachkommastellen  || [2,2^−308, +1,79^308]
|-
| float || 32 Bit Fließkommazahl, 6 Nachkommastellen || [−3,4^38, +3,4^38]
|-
| int || 16 Bit Integer mit VZ || [-32768, +32767]
|-
| long || 32 Bit Integer mit VZ || [−2^32, +2^32 − 1]
|-
| short || 16 Bit Integer mit VZ  || [-32 768,+32 767]
|-
| string || Zeichenkette vom Typ char  || Buchstaben
|-
| unsigned char || 8 Bit Integer ohne VZ  || [0,255]
|-
| unsigned int || 16 Bit Integer ohne VZ || [0,65535]
|-
|unsigned long || 32 Bit Integer ohne VZ  || [0,4294967295]
|}


== Funktionen ==
== Funktionen ==


'''Erklärung'''
===<code>pinMode()</code>===
* Zum Steuern des Arduino-Boards und zur Durchführung von Berechnungen.
Mit der Funktion kann ein bestimmter Pin als Ein- oder Ausgang konfiguriert werden.<br>
* Für das Projekt, benötigt man drei Funktionen, pinMode(), analogWrite() und delay().
 
===pinMode()===
* Wird benötigt, um den verwendeten Pin vom Arduino als '''OUTPUT''' (Ausgang) oder '''INPUT''' (Eingang) festzulegen.
* '''OUTPUT''' um Informationen mit dem Arduino zu empfangen.
* '''INPUT''' um Daten vom Arduino zu einem Empfänger zu verschicken.
* Wird verwendet, um die LED zuzuweisen.


{| class="wikitable"
|+ style = "text-align: left"| Tabelle 3: pinMode(PIN, Modus);
|-
| '''PIN''' || Die Nummer des Pins am Arduino
|-
| '''Modus''' || INPUT oder OUTPUT
|-
| '''OUTPUT''' ||  Definiert den Pin als Ausgang
|-
| '''INPUT''' || Definiert den Pin als Eingang
|}


'''Quelltext 3:''' <code>pinMode.ino</code>
['''Quelltext 3: ''' <code>pinMode.ino</code>]
<syntaxhighlight lang="C" style="border: none; background-color: #EFF1C1; font-size:14px">
<syntaxhighlight lang="C" style="border: none; background-color: #EFF1C1; font-size:small">


pinMode(Pin, OUTPUT);  // Ausgang Zuweisung  
pinMode(Pin, OUTPUT);  // Ausgang Zuweisung  
// oder
/* Oder */
pinMode(Pin, INPUT);    // Eingang Zuweisung
pinMode(Pin, INPUT);    // Eingang Zuweisung


</syntaxhighlight>
</syntaxhighlight>


===analogWrite()===
----
* Schreibt einen Analogwert auf einen Pin.
===<code>analogWrite()</code>===
Schreibt einen Analogwert auf einen Pin.
* Ein Analogwert ist ein Zahlenwert, wie Temperatur = 30  
* Ein Analogwert ist ein Zahlenwert, wie Temperatur = 30  
* Diese Funktion wird verwendet, um die LED mit verschiedener Helligkeit leuchten zu lassen.  
* Diese Funktion wird verwendet, um eine LED mit verschiedener Helligkeit leuchten zu lassen.  
 


'''Quelltext 4:''' <code>analogWrite.ino</code>
['''Quelltext 4: ''' <code>analogWrite.ino</code>]
<syntaxhighlight lang="C" style="border: none; background-color: #EFF1C1; font-size:14px">
<syntaxhighlight lang="C" style="border: none; background-color: #EFF1C1; font-size:small">


analogWrite(Pin, Analogwert);  // Aufbau
analogWrite(Pin, Analogwert);  // Aufbau


analogWrite(Pin(LED), 200);    // Beispiel: Pin 5 sendet nun den Wert 200 an die verbundene LED.
analogWrite(PIN_LED, 200);    // Beispiel: Pin 5 sendet nun den Wert 200 an die verbundene LED.


</syntaxhighlight>
</syntaxhighlight>


== Strukturen ==
----
===<code>delay()</code>===
Legt für die angegebene Zeit im Programm eine Pause ein.
* Angabe in der Klammer ist in Millisekunden
* Benötigt, um Teile des Programmes langsamer ausführen zu lassen
 
['''Quelltext 5: ''' <code>delay.ino</code>]
<syntaxhighlight lang="C" style="border: none; background-color: #EFF1C1; font-size:small">
void loop() {
  delay(400)    // Pause von 400ms
}
</syntaxhighlight>


===If-Verzweigung===
== Mathematische Funktionen ==
* Das if-Statement checkt, ob eine Bedingung true ist und führt dann den Code aus, der innerhalb der Klammern steht.


===Vergleichsoperatoren===
<syntaxhighlight lang="C" style="border: none; background-color: #EFF1C1; font-size:14px">


x == y (x ist gleich y)
{| class="wikitable"
x != y (x ist nicht gleich y)
|+ style = "text-align: left"| Tabelle 4: Operatoren
x < y (x ist kleiner als y)
|-
x >  y (x ist größer als y)
! Operator !! Bedeutung !! Anwendung !! Funktion
x <= y (x ist kleiner als oder gleich zu y)
|-
x >= y (x ist größer als oder gleich zu y)
| = || Zuweisung || a= 2∗b; || Weist der linken Seite den Wert auf der rechten Seite zu
</syntaxhighlight>
|-
| + || Addition || a= b+c; || Für die Addition
|-
| - || Subtraktion || a= b-c; || Für die Subtraktion
|-
| ++ || Inkrementieren || a++; || Zählt zu der Variable 1 hinzu (+1)
|-
| - || Dekrementieren || a–; || Zieht von der Variable 1 ab (-1)
|-
| * || Multiplikation || a= b∗c; || Für die Multiplikation
|-
| / || Division || a= b/c; || Dabei darf c nie gleich null sein
|-
| % || Modulo || a= 7%5; a= 2; || Liefert den Rest bei der Division von
|}


== Strukturen ==


=== Geschweifte Klammern {} ===
===if-Bedingung===
* Auf eine öffnende geschweifte Klammer { muss immer eine schließende geschweifte Klammer } folgen.
Die if-Bedingung prüft, ob die angegebene Bedingung in den runden Klammern () wahr ist und führt dann den Code aus, der innerhalb der geschweiften Klammern {} steht (siehe Beispiel).
* Siehe im Beispiel: '''if-Verzweigung'''


===Vergleichsoperatoren===
{| class="wikitable"
|+ style = "text-align: left"| Tabelle 5: Operatoren
|-
| '''x == y ''' || x ist gleich y
|-
| '''x != y''' || x ist nicht gleich y
|-
| '''x < y''' ||  x ist kleiner als y
|-
| '''x >  y''' || x ist größer als y
|-
| '''x <= y''' || x ist kleiner als oder gleich zu y
|-
| '''x >= y''' || x ist größer als oder gleich zu y
|}


'''Beispiel if-Verzweigung'''
=== Geschweifte Klammern {} ===
Auf eine öffnende geschweifte Klammer {muss immer eine schließende geschweifte Klammer} folgen.<br>
Siehe im Beispiel: '''if-Bedingung'''<br>




'''Quelltext 5:''' <code>ifverzweigung.ino</code>
Beispiel: '''if-Bedingung'''<br>
<syntaxhighlight lang="C" style="border: none; background-color: #EFF1C1; font-size:14px">
['''Quelltext 6: ''' <code>if-Bedingung.ino</code>]
if (Lisa == 18) {        // Wenn Lisa 18 Jahre alt ist wird die Anweisung ausgeführt
<syntaxhighlight lang="C" style="border: none; background-color: #EFF1C1; font-size:small">
if (Lisa == 18) {        // Wenn Lisa 18 Jahre alt ist, wird die Anweisung ausgeführt
   // Anweisung;
   // Anweisung;
}
}
else (Lisa != 30) {      // Wenn Lisa nicht 30 Jahre alt ist wird die Anweisung ausgeführt
else (Lisa != 30) {      // Wenn Lisa nicht 30 Jahre alt ist, wird die Anweisung ausgeführt
   // Anweisung;
   // Anweisung;
}
}


if (Lisa == 18 || Lisa == 20) {        // Wenn Lisa 18 '''oder''' 20 Jahre alt ist wird die Anweisung ausgeführt
if (Lisa == 18 || Lisa == 20) {        // Wenn Lisa 18 oder 20 Jahre alt ist, wird die Anweisung ausgeführt
   // Anweisung;
   // Anweisung;
}
}


if (Lisa == 18 && Lisa != 20) {        // Wenn Lisa 18 '''und '''nicht 20 Jahre alt ist wird die Anweisung ausgeführt
if (Lisa == 18 && Lisa != 20) {        // Wenn Lisa 18 und nicht 20 Jahre alt ist, wird die Anweisung ausgeführt
   // Anweisung;
   // Anweisung;
}
}
</syntaxhighlight>
</syntaxhighlight>
<br>


→ zurück zum Hauptartikel: [[Pulsierende_LED_(Projekt_1)| Klicken!]]
----
'''→ zurück zur Übersicht: [https://wiki.hshl.de/wiki/index.php/Konzipierung_und_Evaluierung_von_Arduino-Projekten_verschiedener_Schwierigkeitsgrade_f%C3%BCr_die_Lehre#Projekte_unterschiedlicher_Schwierigkeitsgrade Projekte]'''

Aktuelle Version vom 21. September 2023, 08:04 Uhr

Autor: Justin Frommberger

Void loop und void setup

[Quelltext 1: ArduinoSketchStruktur.ino]

void setup ( ) // Programmstart
{
  // Anweisungen
}
void loop ( )  // Hauptschleife
{
  // Anweisungen
}

Setup-Funktion

  • Wird einmalig beim Start des Arduino-Boards oder nach einem Neustart (Reset) ausgeführt.
  • In dieser Funktion werden [Variablen], [Pinmode], [Bibliotheken], usw. initialisiert.
  • Muss immer vorhanden sein!

Die Loop-Funktion

  • Ist eine Endlosschleife, die nach jedem Durchlauf erneut aufgerufen wird.
  • Hier wird der Code hineingeschrieben, der dauerhaft ausgeführt werden soll.

Initialisierung (Zuweisung)

Ist die Zuweisung für ein Datenobjekt oder einer Variable

  • Wird benötigt, um im Programm Variablen Eigenschaften zuzuweisen.
  • Beispielhaft wird der Person (Lisa) ihr Alter zugeordnet Alter (18) zugewiesen.
  • So weiß das Programm, dass Lisa gerade 18 Jahre alt ist.

Datentypen (const byte)

  • Um die erstellte Variable (Lisa = 18) verwenden zu können, benötigen Sie einen Datentypen.
  • Für das Beispiel (Lisa = 18) wird der Datentyp const byte verwendet, siehe Tabelle 1.

Const

Steht für eine Konstante und ändert die Variable zu "read-only"

  • Das bedeutet, dass die Variable wie alle anderen Variablen des gleichen Typs benutzt werden kann, aber dass der Wert unveränderlich ist.
  • Wenn der Variable ein neuer Wert zugewiesen wird, kommt es zu einem Compiler-Fehler.

[Quelltext 2: byte.ino]

const byte Lisa = 18;    // Lisa ist 18 Jahre alt

Datentypen

In der Programmierung gibt es verschiedene Datentypen, die angeben, welche Art von Wert eine Variable hat und welche Operationen auf sie angewendet werden können.
Ein Byte kann nur Zahlen im Bereich von 0 bis 255 speichern, ohne dass ein Fehler auftritt.

Tabelle 1: Datentypen
Datentyp Bemerkung Wertebereich
bool 1 Bit [true,false] [0,1]
byte 8 Bit ohne Vorzeichen [0,255]
char 8 Bit ASCII-Zeichen [-128,128]
double 64 Bit Fließkommazahl, 15 Nachkommastellen [2,2^−308, +1,79^308]
float 32 Bit Fließkommazahl, 6 Nachkommastellen [−3,4^38, +3,4^38]
int 16 Bit Integer mit VZ [-32768, +32767]
long 32 Bit Integer mit VZ [−2^32, +2^32 − 1]
short 16 Bit Integer mit VZ [-32 768,+32 767]
string Zeichenkette vom Typ char Buchstaben
unsigned char 8 Bit Integer ohne VZ [0,255]
unsigned int 16 Bit Integer ohne VZ [0,65535]
unsigned long 32 Bit Integer ohne VZ [0,4294967295]

Funktionen

pinMode()

Mit der Funktion kann ein bestimmter Pin als Ein- oder Ausgang konfiguriert werden.

Tabelle 3: pinMode(PIN, Modus);
PIN Die Nummer des Pins am Arduino
Modus INPUT oder OUTPUT
OUTPUT Definiert den Pin als Ausgang
INPUT Definiert den Pin als Eingang

[Quelltext 3: pinMode.ino]

pinMode(Pin, OUTPUT);   // Ausgang Zuweisung 
/* Oder */
pinMode(Pin, INPUT);    // Eingang Zuweisung

analogWrite()

Schreibt einen Analogwert auf einen Pin.

  • Ein Analogwert ist ein Zahlenwert, wie Temperatur = 30
  • Diese Funktion wird verwendet, um eine LED mit verschiedener Helligkeit leuchten zu lassen.

[Quelltext 4: analogWrite.ino]

analogWrite(Pin, Analogwert);  // Aufbau

analogWrite(PIN_LED, 200);    // Beispiel: Pin 5 sendet nun den Wert 200 an die verbundene LED.

delay()

Legt für die angegebene Zeit im Programm eine Pause ein.

  • Angabe in der Klammer ist in Millisekunden
  • Benötigt, um Teile des Programmes langsamer ausführen zu lassen

[Quelltext 5: delay.ino]

void loop() {
  delay(400)    // Pause von 400ms
}

Mathematische Funktionen

Tabelle 4: Operatoren
Operator Bedeutung Anwendung Funktion
= Zuweisung a= 2∗b; Weist der linken Seite den Wert auf der rechten Seite zu
+ Addition a= b+c; Für die Addition
- Subtraktion a= b-c; Für die Subtraktion
++ Inkrementieren a++; Zählt zu der Variable 1 hinzu (+1)
- Dekrementieren a–; Zieht von der Variable 1 ab (-1)
* Multiplikation a= b∗c; Für die Multiplikation
/ Division a= b/c; Dabei darf c nie gleich null sein
% Modulo a= 7%5; a= 2; Liefert den Rest bei der Division von

Strukturen

if-Bedingung

Die if-Bedingung prüft, ob die angegebene Bedingung in den runden Klammern () wahr ist und führt dann den Code aus, der innerhalb der geschweiften Klammern {} steht (siehe Beispiel).

Vergleichsoperatoren

Tabelle 5: Operatoren
x == y x ist gleich y
x != y x ist nicht gleich y
x < y x ist kleiner als y
x > y x ist größer als y
x <= y x ist kleiner als oder gleich zu y
x >= y x ist größer als oder gleich zu y

Geschweifte Klammern {}

Auf eine öffnende geschweifte Klammer {muss immer eine schließende geschweifte Klammer} folgen.
Siehe im Beispiel: if-Bedingung


Beispiel: if-Bedingung
[Quelltext 6: if-Bedingung.ino]

if (Lisa == 18) {        // Wenn Lisa 18 Jahre alt ist, wird die Anweisung ausgeführt
   // Anweisung;
}
else (Lisa != 30) {      // Wenn Lisa nicht 30 Jahre alt ist, wird die Anweisung ausgeführt
   // Anweisung;
}

if (Lisa == 18 || Lisa == 20) {        // Wenn Lisa 18 oder 20 Jahre alt ist, wird die Anweisung ausgeführt
   // Anweisung;
}

if (Lisa == 18 && Lisa != 20) {        // Wenn Lisa 18 und nicht 20 Jahre alt ist, wird die Anweisung ausgeführt
   // Anweisung;
}



→ zurück zur Übersicht: Projekte