🍪 Privacy & Transparency

We and our partners use cookies to Store and/or access information on a device. We and our partners use data for Personalised ads and content, ad and content measurement, audience insights and product development. An example of data being processed may be a unique identifier stored in a cookie. Some of our partners may process your data as a part of their legitimate business interest without asking for consent. To view the purposes they believe they have legitimate interest for, or to object to this data processing use the vendor list link below. The consent submitted will only be used for data processing originating from this website. If you would like to change your settings or withdraw consent at any time, the link to do so is in our privacy policy accessible from our home page..

Vendor List | Privacy Policy
Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry PI

Menu
  • Projekte
    • LED’s
    • Servo & Schrittmotoren
    • Sound
    • LCD’s
    • Kommunikation
    • Sicherheit
    • Weekend Project
  • Arduino
    • Tutorials
    • ProMini
      • Anschließen & Programmieren
    • Nano
      • Arduino Nano – Übersicht
    • UNO
      • Übersicht
    • MEGA 2560
      • Übersicht
    • Leonardo
      • Übersicht
    • NodeMCU
      • NodeMCU – “Einer für (fast) Alles!”
    • Lilypad
      • Arduino: Lilypad “Jetzt Geht’s Rund!”
    • WEMOS
      • WEMOS D1 – Arduino UNO kompatibles Board mit ESP8266 Chip
      • WEMOS D1 Mini – Übersicht
      • Wemos D1 mini Shields
    • STM32x
      • STM32F103C8T6 – Übersicht
    • Maker UNO
      • Maker UNO – Überblick und Test
    • ATTiny85
      • Mini Arduino mit ATTiny85 Chip
      • ATtiny85 mit dem Arduino UNO beschreiben
  • Android
  • Über mich
  • DeutschDeutsch
  • EnglishEnglish
Menu

Projekt: Ardudoro

Veröffentlicht am 20. September 201522. Mai 2023 von Stefan Draeger

Als mein erstes Arduino Projekt möchte ich „Ardudoro“ vorstellen.
Der Name „Ardudoro“ setzt sich aus Arduino und Pomodoro zusammen.
Was Pomodoro ist, wird in diesem Wikipediaartikel sehr gut beschrieben.

Inhaltsverzeichnis

  • Der Grund für Ardudoro
  • Die Komponenten
  • Der Experimentelle Aufbau
  • Die Arduino Anwendung
    • Der Quellcode für den Nano
  • Die Java Anwendung LEDFrame
  • Absenden eines Strings aus der Anwendung
  • UML Diagramm
  • Das Video
  • Das fertige Programm zum Download inkl. Sourcen

Der Grund für Ardudoro

Wie jedes Projekt hat dieses auch einen Grund, auf Arbeit setzen wir Pomodoro häufig ein und es wird von jedem Entwickler angenommen und auch ausgerichtet, jedoch ist der Zustand nicht immer für jeden ersichtlich so kommt es des Öfteren vor das der Projektleiter oder andere Kollegen oder Fremdmitarbeiter diese Pomodorosession stört.

Durch dieses einfache Gerät wird es nun möglich sein deutlich kenntlich zu machen, wenn eine Pomodorosession läuft.

Die Komponenten

Es wurden folgende Komponenten verwendet:

  • Sodial Nano (nachbau des Arduino Nano) – 4,85€
  • Sodial 3 Farb RGB – 2,25€
  • Lochrasterplatine – 2,50€
  • Lötzinn, Lötkolben (15Watt)
  • Schrauben (M3), ein Sperrholzbrett (4mm stark)
  • eine Dose

Der Experimentelle Aufbau

Da das Hauptaugenmerk auf die Entwicklung einer Java Anwendung bestand ist der Aufbau so simple gehalten wie möglich.

Die Arduino Anwendung

Auch wenn das Gerät kein Original Arduino ist lässt sich mit der Arduino IDE für dieses Gerät entwickeln, man muss nur unter Tools->Board->Arduino Nano w/ ATmega328 einstellen und das Gerät über einen freien USB-Anschluss mit dem PC verbinden.
(Nicht über einen USB Hub.)

Der Quellcode für den Nano

Wenn man das Programm auf den Nano hochlädt und in der Arduino IDE den seriellen Monitor öffnet, wird eine kurze Hilfe angezeigt was für ein String erwartet wird.

Dieser String setzt sich aus folgenden Werten zusammen:

  • s – signalisiert den Start
  • r – der Wert für die Farbe Rot als dreistellige ganzzahl (zbsp. 000 oder 154)
  • g – der Wert für die Farbe Grün als dreistellige ganzzahl (zbsp. 000 oder 154)
  • b – der Wert für die Farbe Balu als dreistellige ganzzahl (zbsp. 000 oder 154)
  • t – die Zeit wie lange die LED aufleuchten soll, in Millisekunden
  • e- signalisiert das Ende
/*
* Dateiname: Projekt_Ardudoro.ino
* Thema: Pomodoro mit Unterstuetzung von Arduino (NANO)
*/

#define BLUE_LED 6  /* PIN fuer die blaue LED */
#define RED_LED 2   /* PIN fuer die rote LED */
#define GREEN_LED 4 /* PIN fuer die gruene LED */

void setup() {
  Serial.begin(9600);
  
  pinMode(BLUE_LED, OUTPUT);   /* Setzt den PIN fuer die blaue LED als Ausgang. */
  pinMode(RED_LED, OUTPUT);    /* Setzt den PIN fuer die rote LED als Ausgang. */
  pinMode(GREEN_LED, OUTPUT);  /* Setzt den PIN fuer die gruene LED als Ausgang. */
  /* Beschreibung der Funktion */
  Serial.println("Projekt Ardudoro"); 
  Serial.println("----------------"); 
  Serial.println(""); 
  Serial.println("Input:"); 
  Serial.println("      [s] Start of transmission"); 
  Serial.println("      [r] RED Value 0 - 255"); 
  Serial.println("      [g] GREEN Value 0 - 255"); 
  Serial.println("      [b] BLUE Value 0 - 255"); 
  Serial.println("      [t] Time in milliseconds (-1 for no timer)"); 
  Serial.println("      [e] End of transmission"); 
  Serial.println(""); 
  Serial.println("Example:"); 
  Serial.println("sr255g033b150t1000e");   
}  

void loop() { 
  /* prüfen ob es eine Eingabe auf dem Seriellen Port gibt.*/ 
  if (Serial.available() > 0) {
    /* Den Text lesen. */
    String input = Serial.readString();
    /* Leerzeichen entfernen.*/
    input.trim();
    /* Wenn der String nicht leer ist und mit den Zeichen s beginnt und mit dem Zeichen e endet.*/
    if(input.length()>0 && input.startsWith("s")&&input.endsWith("e")){
      analogWrite(RED_LED, input.substring(2,5).toInt());      
      analogWrite(GREEN_LED, input.substring(6,9).toInt());  
      analogWrite(BLUE_LED, input.substring(10,13).toInt());  

      int delayTime = input.substring(14,input.length()-1).toInt();
      if(delayTime){
         delay(delayTime);
         analogWrite(RED_LED, 000);      
         analogWrite(GREEN_LED, 000);  
         analogWrite(BLUE_LED, 000);  
      }
    } else {
        /* Wenn der String nicht mit s beginnt und mit e endet, oder der String leer ist dann gebe die Fehlermeldung aus. */
        Serial.println("SyntaxError ["+input+"]");
    }
  }
}

Wie im Quellcode ersichtlich ist, wird genau ein fest definierter Aufbau eines Strings erwartet.
Folgende Fehler könnten sich bisher einschleichen:

  • es werden die Parameter für die Farben (rot,grün,blau) vertauscht
  • es wird mehr als ein Parameter für eine Farbe eingegeben
  • es wird der Wert für die Farbe nicht 3-stellig eingegeben
  • es werden nicht nur nummerische Zeichen für den Wert der Farbe eingegeben
  • es wird ein Parameter vergessen
  • usw.

Diese Liste lässt sich sicherlich beliebig erweitern, jedoch ist dieser Aufbau für ein kleines Tutorial völlig ausreichend.

Die Java Anwendung LEDFrame

Java Anwendung LEDFrame

Absenden eines Strings aus der Anwendung

Die Anwendung stellt mit der Oberfläche die Einstellungen für den Aufbau der Verbindung sowie die Wahl der Farbe und die Leuchtdauer bereit.

Nachdem der Benutzer alle Daten gewählt hat, wird über den Button folgende Aktion ausgeführt:

SerialCommunication serialCommunication = new SerialCommunication.SerialCommunicationBuilder(model.getPortname()).setSerialPortParameter(model.getBaudrate(), model.getDatabits(), model.getStopbits(), model.getParity()).setSleepForClosePortEvent(model.getSleep()).build();
Map<String, Integer> colorMap = model.getColorMap();
int redValue = colorMap.get(RED);
int greenValue = colorMap.get(GREEN);
int blueValue = colorMap.get(BLUE);

DecimalFormat decimalFormat = new DecimalFormat("000");
String value = String.format("sr%sg%sb%st%se", decimalFormat.format(redValue), decimalFormat.format(greenValue), decimalFormat.format(blueValue), model.getSleep());
serialCommunication.openPort();
serialCommunication.writeString(value);
serialCommunication.closePort();

Wie hier zusehen ist, wird der erwartete String über die Methode String.format (Zeile 8) in das im Arduino Programm definierte Format gebracht wird, somit ist sichergestellt, das hier wenig schiefgehen kann.

Es wird nun der Port geöffnet, der String wird geschrieben und danach wird der Port wieder geschlossen.

Da die Klasse SerialCommunication die Klasse jssc.SerialPort „nur“ Wrappt sind die dahinterliegenden Methoden nicht sichtbar dies ist von mir so gewollt da das konstukt in jssc simple jedoch etwas fehleranfällig ist. Fraglich ist, warum ich ein SerialPortEvent auslösen muss damit ich etwas auf den Seriellen Port schreiben kann. Dies bedeutet ich blähe meinen Code unnütz auf, dieses habe ich gelöst, indem die Klasse SerialCommunication dieses für mich erledigt und ich mich mit weniger Methoden und Klassen beschäftigen muss.

Die gesamte Java Klasse.

SerialCommunication

Was an der Klasse SerialCommunication fehlt, ist die Möglichkeit zu lesen. Diese Funktionalität wird mit dem nächsten Projekt implementiert.

UML Diagramm

Zur Verdeutlichung wie das Programm LEDFrame aufgebaut ist soll folgendes UML Klassendiagramm dienen.

UML Diagramm der Anwendung LEDFrame

Die Kommunikation zwischen der Anwendung LEDFrame und dem Arduino erfolgt über die Klasse SerialCommunication diese leitet sich aus der Klasse jssc.SerialPort ab.
Das Package JSSC kann über Maven oder als externe JAR Datei >>hier<< bezogen werden.

UML Diagramm der Klasse SerialCommunication

Das Video

Java Projekt "Ardudoro"
Dieses Video auf YouTube ansehen.

Das fertige Programm zum Download inkl. Sourcen

Ardudoro – Anwendung LEDFrameHerunterladen
Ardudoro – QuellcodeHerunterladen
Ardudoro – JavaDocHerunterladen

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Kategorien

Tools

  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator
  • Widerstandsrechner
  • Rechner für Strom & Widerstände
  • ASCII Tabelle

Meta

  • Videothek
  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Kontakt
  • Cookie-Richtlinie (EU)

Links

Blogverzeichnis Bloggerei.de Blogverzeichnis TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com
©2023 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
x
x