1.1s 🚧 Spickzettel

Sammlung für die lokale Formelsammlung 🤠.

Beispielsketch

Sketch nennt man bei Arduino die Entwürfe für ein Programm. Ein Sketch ist eine Textdatei z.B. “Beispiel” mit der Endung .ino also Beispiel.ino. Die Datei muss sich in einem gleichnamigen Ordner hier Beispiel befinden.

#define BOARD_LED D13    // grüne LED auf dem Board
#define USER_BUTTON PC13 // blauer Taster auf dem Board
#define WARTEZEIT 500    // Festlegen eines Wertes

void setup(){   // Einmalige Ausführung beim Start => Initialisierungen...
  pinMode(BOARD_LED, OUTPUT);  // Pin als Ausgang schalten
  pinMode(USER_BUTTON,INPUT);  // Pin als Eingang schalten
  Serial.begin(9600); // Serielle Schnittstelle starten und Baudrate festlegen
}

void loop(){ // Wird staendig, endlos ausgefuehrt, darin steht das Hauptprogramm
  int a;
  a = digitalRead(USER_BUTTON);     // Wert von USER_BUTTON einlesen
  digitalWrite(BOARD_LED,a);        // Wert auf BOARD_LED ausgeben
  Serial.print("USER_BUTTON ist "); // Text auf Serieller Schnittstelle ausgeben
  Serial.println(a);                // Wert auf Serieller Schnittstelle ausgeben und Neue Zeile ausgeben
  delay(2*WARTEZEIT);               // warte 2*500ms = 1s
}

Dafür #define

Die Pins am µC haben Bezeichnungen wie D13 oder PC13. Damit die Bedeutung klarer und der Programmtext verständlicher wird können besser verständliche Namen dafür mit #define definiert werden. Eine Textersetzungsmaschine, der Präprozessor ersetzt z.B. alle Vorkommen von BOARD_LED in D13 bevor der Compiler den Quellcode zur Bearbeitung bekommt. Bei 2*WARTEZEIT bekommt der Compiler 2*500 als Text und wertet dies zu 1000 aus.
#define Definitionen sollten immer durchgehend Groß geschrieben werden, wie Konstanten, damit man erkennt das dies keine Variablen sind.

Der Präprozessor kann noch viel mehr, alle Zeilen, die mit # beginnen sind für ihn bestimmt.

Im setup()

Im setup() wird die Hardware initialisiert, d.h. für die gewünschte Funktion eingestellt. Im Beispiel wird die Funktion der Pins D13 und PC13 festgelegt. Auch wird die serielle Schnittstelle aktiviert, damit Daten vom µC zum Rechner gesendet werden können.

In der loop()

Das Unterprogramm loop() wird ständig ausgeführt, darin befindet sich die µC-Hauptschleife (Main-Loop), die für das ständige Einlesen und Verarbeiten der Eingänge sorgt.

Serial-Schnittstelle

Damit können Daten zum Rechner übertragen werden. Die Übertragungsgeschwindigkeit ist bei Arduino normalerweise 9600 Baud, d.h. 9600 Bitwechsel pro Sekunde. Sie kann aber auch auf höhere Geschwindigkeiten eingestellt werden, dann braucht die Übertragung weniger Zeit, es können mehr Zeichen pro Sekunde übertragen werden. Ich verwende oft 115200 Baud. Im Seriellen Monitor von Arduino kann die Übertragungsgeschwindigkeit angepasst werden.

Logische Werte bei Arduino / C

In Java gibt es true und false. Bei Arduino gibt es HIGH und LOW. Mit der Maus über HIGH sieht man schnell, dass es ein #define HIGH 0x1 gibt. Also wird HIGH vom Präprozessor in 0x1 also 1 übersetzt. Arduino basiert auf C/C++ dabei gilt wenn der Wert 0 ist bedeutet das false alle anderen Werte !=0 bedeuten true.

Ausgänge festlegen und verwenden

Im Setup mit pinMode(portPin, mode) festlegen. Normalerweise ist dabei mode = OUTPUT.
Der Pin-Zustand kann dann mit digitalWrite(portPin, wert) gesteuert werden. Wobei Einschalten mit wert = HIGH (= 1) oder jedem Wert !=0 funktioniert. Ausschalten funktioniert mit LOW (=0).

Eingänge festlegen und verwenden

Im Setup mit pinMode(portPin, mode) festlegen. Normalerweise bei unserem Board mode = OUTPUT_PULLDOWN. Weil die Taster und Schalter gegen VCC geschaltet sind und es keinen externen PullDown-Widerstand gibt.
Der Pin-Zustand kann mit digitalRead(portPin) gelesen werden, die Rückgabe ist 0 oder 1 entspricht false oder true.

delay()

Zeitwarte-Funktion. Z.B. delay(1000) verzögert die weitere Programmausführung um 1000ms = 1s.

Enumeration, Aufzählungstyp

Synopsis: [de.wikipedia.org/wiki/Aufzählungstyp] [www.w3schools.com/c/c_enums.php]
Der Aufzählungstyp ist praktisch um z.B. bei Zuständen nicht Zahlen sondern aussagekräftige Namen (Symbole) verwenden zu können.

// funktioniert mit Arduino IDE aber nicht mit plattform.io
enum {AUS,LINKS,RECHTS,WARNBLINKEN} zustand = AUS; // definiere Variable mit Aufzählungstyp

// funktioniert mit Arduino IDE und mit plattform.io
enum zustandstyp {AUS,LINKS,RECHTS,WARNBLINKEN}; // definiere Aufzählungstyp
enum zustandstyp zustand = AUS; // Definiere und initialisiere Variable

// funktioniert mit Arduino IDE und mit plattform.io
typedef enum {AUS,LINKS,RECHTS,WARNBLINKEN} zustandstyp; // definiere Aufzählungstyp
zustandstyp zustand = AUS; // Definiere und initialisiere Variable

Der Compiler ordnet in C/C++ wenn nichts weiter angegeben wurde Intern den Symbolen einen Zahlenwert beginnend mit 0 zu, z.B.: AUS hat den Wert 0, LINKS den Wert 1 usw. Optional kann den Symbolen auch ein anderer Wert zugewiesen werden:

enum zustandstyp {AUS=1,LINKS,RECHTS=5,WARNBLINKEN=7}; // definiere Aufzählungstyp mit Symbolwerten LINKS hat den Wert 2

Enum in Java

Synopsis: [www.w3schools.com/java/java_enums.asp]

public class Test{
    enum Zustandstyp {STOPP,ZU,AUF};  // Aufzaehlungstyp ist spezielle Klasse
    Zustandstyp zustand = Zustandstyp.STOPP;
    Zustandstyp letzteRichtung = Zustandstyp.ZU;
}

ASCII-Tabelle

Dez Hex Zeichen Dez Hex Zeichen Dez Hex Zeichen Dez Hex Zeichen Dez Hex Zeichen
0 00 Nul 26 1A SUB 52 34 4 78 4E N 104 68 h
1 01 SOH 27 1B ESC (Escape) 53 35 5 79 4F O 105 69 i
2 02 STX 28 1C FS 54 36 6 80 50 P 106 6A j
3 03 ETX 29 1D GS 55 37 7 81 51 Q 107 6B k
4 04 EOT (End Of Transmission) 30 1E RS 56 38 8 82 52 R 108 6C l
5 05 ENQ 31 1F US 57 39 9 83 53 S 109 6D m
6 06 ACK 32 20 SP (Space) 58 3A : 84 54 T 110 6E n
7 07 BELL (Klingel) 33 21 ! 59 3B ; 85 55 U 111 6F o
8 08 BS (Back Space) 34 22 60 3C < 86 56 V 112 70 p
9 09 Hor. Tabulator 35 23 # 61 3D = 87 57 W 113 71 q
10 0A LF (Line Feet) 36 24 $ 62 3E > 88 58 X 114 72 r
11 0B Ver. Tabulator 37 25 % 63 3F ? 89 59 Y 115 73 s
12 0C FF (Form Feet) 38 26 & 64 40 @ 90 5A Z 116 74 t
13 0D CR (Carriage Return) 39 27 65 41 A 91 5B [ 117 75 u
14 0E SO 40 28 ( 66 42 B 92 5C \ 118 76 v
15 0F SI 41 29 ) 67 43 C 93 5D ] 119 77 w
16 10 DLE 42 2A * 68 44 D 94 5E ^ 120 78 x
17 11 DC1 43 2B + 69 45 E 95 5F _ 121 79 y
18 12 DC2 44 2C , 70 46 F 96 60 122 7A z
19 13 DC3 45 2D 71 47 G 97 61 a 123 7B {
20 14 DC4 46 2E . 72 48 H 98 62 b 124 7C |
21 15 NAK 47 2F / 73 49 I 99 63 c 125 7D }
22 16 SYN 48 30 0 74 4A J 100 64 d 126 7E ~
23 17 ETB 49 31 1 75 4B K 101 65 e 127 7F DEL (Delete)
24 18 CAN 50 32 2 76 4C L 102 66 f      
25 19 EM 51 33 3 77 4D M 103 67 g