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