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;
}
Operanden und Ausführungsprioritäten
Rang | Operator | Syntax | Richtung | Bedeutung |
---|---|---|---|---|
1 | -> | Zeiger -> Element | –> | Elementselektion |
1 | [] | Zeiger [Ausdruck], Arrayelement | –> | Indizierung |
1 | () | Ausdruck, Typ (Ausdrucksliste) | –> | Funktionsaufruf, Werterzeugung |
1 | ++, — | Lvalue++, Lvalue– | –> | Post- In-,De-krement |
2 | ++, — | ++Lvalue, –Lvalue | <-- | Prä- In-,De-krement |
2 | ~ , ! | ~Ausdruck, !Ausdruck | <-- | Komplement, Negation |
2 | – , + | -Ausdruck, +Ausdruck | <-- | unäres Minus, Plus |
2 | () | (Typ) Ausdruck | <-- | Typkonvertierung |
2 | & | &Variablenbezeichner | <-- | unär: Adressoperator |
2 | * | *Zeigerbezeichner | <-- | unär: Indirektionsoperator |
2 | sizeof() | sizeof(Bezeichner) | <-- | Operandengrösse in Byte |
3 | *, / | Ausd. * Ausd., Ausd. / Ausd. | –> | Multiplikation, Division |
3 | % | Ausdruck % Ausdruck | –> | Modulo, Divisionsrest |
4 | +, – | Ausd. + Ausd., Ausd. – Ausd. | –> | Addition, Subtraktion |
5 | <<, >> | Ausd. << Ausd., Ausd. >> Ausd. | –> | Linksshift, Rechtsshift |
6 | <, > | Ausd. < Ausd., Ausd. > Ausd. | –> | kleiner, größer als |
6 | <=, >= | Ausd. <= Ausd., Ausd. >= Ausd. | –> | kleiner, größer gleich als |
7 | ==. != | Ausd. == Ausd., Ausd. != Ausd. | –> | gleich, ungleich |
8 | & | Ausdruck & Ausdruck | –> | bitweises Und |
9 | ^ | Ausdruck ^ Ausdruck | –> | bitweises EXOR |
10 | | | Ausdruck | Ausdruck | –> | bitweises Oder |
11 | && | Ausdruck && Ausdruck | –> | logisches Und |
12 | || | Ausdruck || Ausdruck | –> | logisches Oder |
13 | ?: | Ausdruck ? Ausdruck : Ausdruck | <-- | Bedingte Zuweisung |
14 | = | Lvalue = Ausdruck | <-- | einfache Zuweisung |
14 | +=, -=, *=, /=, %= | Lvalue op Ausdruck | <-- | Kombinierte Zuweisung (arithmetisch) |
14 | <<=, >>=, &=, ^=, |= | Lvalue op Ausdruck | <-- | Kombinierte Zuweisung (bitweise) |
15 | , | Ausdruck , Ausdruck | –> | Folge von Ausdrücken |
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 |