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);
}