Arduino-WS (2)
Die Programmiersprache C
Inhalt des 2. Arduino-Workshops: Variablen, Konstanten, Datentypen, Funktionen
Kommentare: ----------- // Der Rest der Zeile gilt nicht, ist nur Kommentar! /* Die Zeilen gelten nicht, sind nur Kommentar! */ Variablen, Konstanten, Datentypen: ---------------------------------- int i; // Dies ist nur die Deklaration! // D.h. der Wert ist (noch) nicht definiert... i = 2*3; // ...jetzt aber, nämlich 6 wird zugewiesen! int GanzeZahl = -12; const int PIN = 13; float ZahlMitNachkommastellen = 0.25; // würde in deutsch 0,25 geschrieben werden Datentypen: NAMEN ggf. Mögliche Werte idR aus stdint.h ------------- ------------------------------------ unsigned int 0 ... 65535, z.B. 12 uint16_t s.o. int -32768 ... 32767, z.B. -12 int16_t s.o. unsigned char 0 ... 255 (8 Bit = 1 Byte) uint8_t s.o. signed char -128 ... 127 oder 'A','a','x',... int8_t s.o. char Intel/AVR(ATmega): wie signed char ARM: wie unsigned char long int −2147483647 ... +2147483647 (ca. ± 2 Millarden) int32_t s.o. float -3.4028235E+38 ... 3.4028235E+38 z.B.: 0.25 oder -3.333 Genauigkeit: 6 bis 7 Ziffern, z.B.: 123.456 sind 6 Ziffern En bedeutet *10^n (also n Nullen Anfügen bzw. Dezimalpunkt n Stellen nach links), z.B.: 1.2e3 = 1200 double wie float, nur genauer und größer möglich kann auch als "double float" geschrieben werden Funktionen: ----------- Mathe (zum Vergleich): summe: R x R -> R; x,y |-> x+y C: float summe(float x, float y) { return ( x+y ); } // kam eigentlich schon als Arduino-Grundkonstrukt vor: void setup() // void heißt, daß nix geliefert wird (kein return)! { // ... Programmcode in C } void loop() { // ... Programmcode in C }
Einfacher Lauflicht-Code aus WS(1):
const int PIN_LED0 = 13; const int PIN_LED1 = 4; const int PIN_LED2 = 5; const int PIN_POTI = A0; void setup() { pinMode(PIN_LED0, OUTPUT); pinMode(PIN_LED1, OUTPUT); pinMode(PIN_LED2, OUTPUT); // Analog-Pin PIN_POTI muß nicht initialisiert werden. } void loop() { int poti = analogRead(PIN_POTI); digitalWrite(PIN_LED0, 1); delay(poti); digitalWrite(PIN_LED0, 0); digitalWrite(PIN_LED1, 1); delay(poti); digitalWrite(PIN_LED1, 0); digitalWrite(PIN_LED2, 1); delay(poti); digitalWrite(PIN_LED2, 0); }
Einfacher Lauflicht-Code mit Funktion "leuchte":
const int PIN_LED0 = 3; const int PIN_LED1 = 5; const int PIN_LED2 = 6; const int PIN_POTI = A0; void setup() { pinMode(PIN_LED0, OUTPUT); pinMode(PIN_LED1, OUTPUT); pinMode(PIN_LED2, OUTPUT); // Analog-Pin PIN_POTI muß nicht initialisiert werden. } void leuchte(int pin, int zeit) { digitalWrite(pin, 1); delay(zeit); digitalWrite(pin, 0); } void loop() { int poti = analogRead(PIN_POTI); leuchte(PIN_LED0, poti); leuchte(PIN_LED1, poti); leuchte(PIN_LED2, poti); }
Einfacher PWM-Code:
const int PIN_LED0 = 13; const int PIN_POTI = A0; void setup() { pinMode(PIN_LED0, OUTPUT); // Analog-Pin PIN_POTI muß nicht initialisiert werden. } void loop() { int poti = analogRead(PIN_POTI); digitalWrite(PIN_LED0, 1); delayMicroseconds(poti); digitalWrite(PIN_LED0, 0); delayMicroseconds(1023-poti); }
Mit PWM Hardware Einheit realisiert:
void loop() { int poti = analogRead(PIN_POTI) / 4; // -> 0..255 analogWrite(PIN_LED0, poti); delay(100); // optional }
Einfacher Lauflicht-Code mit Dimmen:
const int PIN_LED0 = 3; const int PIN_LED1 = 5; const int PIN_LED2 = 6; void setup() { pinMode(PIN_LED0, OUTPUT); pinMode(PIN_LED1, OUTPUT); pinMode(PIN_LED2, OUTPUT); } void loop() { analogWrite(PIN_LED0, 255); analogWrite(PIN_LED1, 0); analogWrite(PIN_LED2, 0); delay(400); analogWrite(PIN_LED0, 60); analogWrite(PIN_LED1, 255); analogWrite(PIN_LED2, 0); delay(400); analogWrite(PIN_LED0, 20); analogWrite(PIN_LED1, 60); analogWrite(PIN_LED2, 255); delay(400); analogWrite(PIN_LED0, 0); analogWrite(PIN_LED1, 20); analogWrite(PIN_LED2, 60); delay(400); analogWrite(PIN_LED0, 0); analogWrite(PIN_LED1, 0); analogWrite(PIN_LED2, 20); delay(400); }