Banner Ausblenden
Kleines Logo

Willkommen auf PSI-Online

Arbeiten mit Tabs

Gerade bei komplexen Programmen wird es schnell unübersichtlich: Viele einzelne Bruchstücke werden zu einem Ganzen vereint, und zum Schluss weiß man gar nicht mehr, welches Bruchstück welches Bauteil anspricht. Daher bietet es sich an, den Sketch in mehrere Bestandteile aufzuteilen.

Beispiel: Bei einer Alarmanlage gibt es einen "Normalzustand" (Alarmanlage ist nicht scharf gestellt) und den Zustand "Alarmanlage ist scharf gestellt". In letzterem Fall, wiederum, soll Arduino erst bei unterschiedlichen Ereignissen auch tatsächlich Alarm auslösen.

Daher bietet es sich an, zunächst einen Haupt-Sketch zu schreiben, in dem die nötigen libraries eingebunden werden und der Normalzustand in der Loop programmiert wird. Anschließend lassen sich die einzelnen Ereignisse in eigenen Tabs definieren. Diese Tabs können dann mittels if-Befehlen als Variablen in den Haupt-Sketch eingebunden werden.

 

Wie geht das?

In der Arduino-IDE (dem Programm) lassen sich Tabs oben rechts durch Anklicken des Pfeils einfügen (in der grünen Leiste). Diese müssen mit der Endung ".h" benannt werden. Jeder Tab funktioniert vom Prinzip her wie ein eigenständiger Sketch. Damit diese Tabs aber vom Hauptsketch überhaupt als Programmteil anerkannt werden, müssen sie ganz am Anfang des Haupt-Sketchs mittels include eingebunden werden: #include "alarm1.h" bindet folglich einen Tab mit dem Namen "alarm1" ein.

Tabs beim Eintreffen eines Ereignisses abrufen

In der Loop unseres Haupt-Sketches lässt sich der Tab nun abrufen, indem wir den Befehl alarm1(); einfügen. Hier ein Beispiel:

  void loop()   {

  // Wenn Taster geschlossen, soll Alarm ausgelöst werden
     if (digitalRead(tasterPin)==HIGH) {
      alarm1();
  }

Wenn ein Taster (hier als Variable tasterPin definiert) betätigt wird, dann ruft der Sketch den Tab mit dem Namen alarm1 ab.

 

Beispiel für einen Haupt-Sketch (Auszüge aus einem komplexen Sketch):

// Tabs vorab einfügen

#include "alarm1.h" //(erster Tab)
#include "alarm2.h" //(zweiter Tab)
#include "scharf.h" //(dritter Tab)

// Ultraschall
#include //Bibliothek für den Ultraschallsensor wird eingebunden

#define TRIGGER_PIN  10  // Trigger Pin an PWM 10
#define ECHO_PIN     11  // Echo Pin an PWM 11
#define MAX_DISTANCE 200 // max. cm, die gemessen werden. (Maximal 400-500cm möglich)
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Variable für Ultraschall


void setup() {
  // LCD Zeichen und Zeilen --> Hier wird ein Display eingebunden
  lcd.begin(16, 2);

  //LED ansprechen
  pinMode(ledPin, OUTPUT);
  pinMode(tasterPin, INPUT);

  //Sirene an 12 --> hier wird ein Buzzer als Sirene eingebunden (Variable!!)
  int buzzer = 12;
}

  void loop()   {

  // Wenn Taster geschlossen, soll Alarm ausgelöst werden
     if (digitalRead(tasterPin)==HIGH) {
      alarm1(); //im Tab alarm1 steht dann, dass die Sirene angeht und das Display einen Alarm am Taster meldet
  }

  // Wenn Objekte näher als X, soll Alarm ausgelöst werden
      if (sonar.ping_cm() < 50) {
      alarm2(); //im Tab alarm2 steht dann, dass die Sirene angeht und das Display einen Alarm am Ultraschall meldet
    }
  else
    scharf(); //im Tab scharf steht dann, dass nur das Display meldet, dass die Alarmanlage scharf gestellt ist
  }

Tab "alarm1"

// Display Code:
#include //Biblothek für das Display wird geladen

// LCD Pinbelegung Mega
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

//LED und Taster
int tasterPin = 8; //Variable für den Pin, an dem der Taster angeschlossen ist
int ledPin = 9; //Variable für den Pin, an dem die LED angeschlossen ist

void alarm1() { // Hier startet der Bereich, der dann in der Loop im Hauptsketch eingebunden wird

  // zunächst Display löschen, um alte Zeichen zu überschreiben
  for (int del = 1; del < 2; del = del + 1) {
    lcd.clear();
  }
  long startzeit, endzeit;
  startzeit = millis();
  endzeit = startzeit + 30000;
  while (millis() < endzeit)
  {
    // Nachricht Zeile 1
    lcd.setCursor(0, 0);    // Cursor steht in erster Zeile (zweite 0)
    lcd.print("Alarm");
    // Nachricht Zeile 2
    lcd.setCursor(0, 1);      // Cursor steht in zweiter Zeile (=1)
    lcd.print("am Taster");

    // LED meldet ebenfalls Alarm
    digitalWrite(ledPin, HIGH);
    delay(200);
    digitalWrite(ledPin, LOW);
    delay(200);
  }
}

 

 

Erstellt: Martin Pörschmann (13.11.2016) Letzte Änderung: Jannis Engemann (28.06.2017)