===== 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);
}
{{tag> }}