kramann.info
© Guido Kramann

Login: Passwort:










EmbSyst
1 day_by_day
2 Eingebettete_Systeme
..2.1 Softwareentwicklung
....2.1.1 AgileSoftwareentwicklung
....2.1.2 Verhalten
....2.1.3 Entwurfsmuster
....2.1.4 FuzzyRegler
....2.1.5 Uebung
..2.2 Arduino
....2.2.1 Uebung1
..2.3 Android
....2.3.1 UML
......2.3.1.1 Volumenberechnung
......2.3.1.2 UML_Klassendiagramm
......2.3.1.3 Konstruktor
......2.3.1.4 Statische_Variable
....2.3.2 bluej
....2.3.3 Threads
....2.3.4 Interfacedesign
....2.3.5 Android
......2.3.5.1 Getting_Started
......2.3.5.2 App
......2.3.5.3 Beispielprojekt
........2.3.5.3.1 Richtlinien
........2.3.5.3.2 Anforderungen
........2.3.5.3.3 Layout
........2.3.5.3.4 Projekt_einrichten
........2.3.5.3.5 Refactoring
........2.3.5.3.6 Icon
........2.3.5.3.7 Icon2
........2.3.5.3.8 Kurzanleitung
........2.3.5.3.9 Architektur
........2.3.5.3.10 Anwendungsklasse
......2.3.5.4 Threads
......2.3.5.5 Activities
......2.3.5.6 Was_ist_wo
......2.3.5.7 Regelungssysteme
........2.3.5.7.1 Servo
........2.3.5.7.2 Fahrzeug
......2.3.5.8 ADB_Apps
......2.3.5.9 Veroeffentlichen
......2.3.5.10 Einzelheiten
........2.3.5.10.1 Bildschirmaufloesung
........2.3.5.10.2 Parameter
........2.3.5.10.3 Permission
........2.3.5.10.4 Latenzzeit
......2.3.5.11 Tonerkennung
........2.3.5.11.1 Wahrscheinlichkeitsrechnung
........2.3.5.11.2 Kovarianz_Scilab
........2.3.5.11.3 Java_Threads
........2.3.5.11.4 Java_Reflection
....2.3.6 Processing
......2.3.6.1 Installation
......2.3.6.2 Erste_Schritte
......2.3.6.3 Mechatronik
......2.3.6.4 Bibliotheken
......2.3.6.5 Uebung
......2.3.6.6 Snippets
........2.3.6.6.1 Dateioperationen
........2.3.6.6.2 Bilder
........2.3.6.6.3 GUI
........2.3.6.6.4 Text
........2.3.6.6.5 PDF
........2.3.6.6.8 Maus
........2.3.6.6.10 Zeit
........2.3.6.6.13 Animation
........2.3.6.6.15 Simulation
......2.3.6.7 Referenzen
....2.3.7 Android_Processing
......2.3.7.1 Basics
......2.3.7.2 Einrichten
......2.3.7.3 Crossplattform
......2.3.7.4 sinus
......2.3.7.5 sample
......2.3.7.6 analyse
......2.3.7.7 synthese
......2.3.7.8 Hilfsapps
......2.3.7.9 Eigene_Library
....2.3.8 Processing_VR
....2.3.9 Shapes3D
....2.3.10 TextToSpeech
....2.3.11 Internetprogrammierung
......2.3.11.1 Codegenerierung
......2.3.11.2 PHP_Programmierung
......2.3.11.3 PHP_OOP
......2.3.11.4 Java
......2.3.11.5 UDP
......2.3.11.6 Internetkontrolle
........2.3.11.6.1 Kamerabild
....2.3.12 OSC
......2.3.12.1 Datenaustausch
......2.3.12.2 i2audiolab
......2.3.12.3 Ardour
....2.3.13 Netzwerkprogrammierung
....2.3.14 JNI
....2.3.15 Erweitern
......2.3.15.1 sprich
......2.3.15.2 spiel
....2.3.16 thbvr
....2.3.17 Reflection
....2.3.18 Script
....2.3.19 Java3D
3 Echtzeitprogrammierung
..3.1 Echtzeit
..3.2 Korrektheit
..3.2 Semaphoren
..3.3 Hardware
..3.5 Synchronprogramm
..3.6 Zustandsmaschine
..3.7 Arduino
....3.7.1 Uebung
....3.7.2 RTOS
....3.7.3 Scheduler
....3.7.4 Semaphor
......3.7.4.1 Laufkatze
......3.7.4.2 Java
......3.7.4.3 Semaphor
....3.7.5 Messages
..3.8 Android
....3.8.2 Threads
......3.8.2.1 Java
......3.8.2.2 Synchronisierung
..3.9 Petrinetze
....3.9.1 Installation
....3.9.2 Test
4 KI
..4.1 Unueberwachtes_Lernen
..4.2 Agentensysteme
....4.2.1 Architekturen
......4.2.1.1 Verhalten
......4.2.1.2 Entwurfsmuster
....4.2.2 SUMO
......4.2.2.1 GettingStarted
......4.2.2.2 Antrieb
......4.2.2.3 Sensoren
......4.2.2.4 Zeitbasis
......4.2.2.5 Fernsteuerung
......4.2.2.6 Umsetzung_Fernst
......4.2.2.7 Fernsteuerung3
......4.2.2.10 Umsetzung
......4.2.2.11 Sockelsoftware
......4.2.2.12 Plan
......4.2.2.13 Lernen
........4.2.2.13.1 Parameter
........4.2.2.13.2 Identifikation
........4.2.2.13.3 Java
..4.3 Genetische_Algorithmen
....4.3.1 Heuristiken
....4.3.2 Genalgorithmus
..4.4 Kalmanfilter
....4.4.1 Vorarbeit
....4.4.2 Minimalversion
....4.4.3 Beispiel
5 Bildverarbeitung
..5.1 Gestalttheorie
..5.2 Bildverarbeitung
6 Technische_Systeme
..6.1 Kulturgeschichte
..6.2 Technikphilosophie
..6.3 Anthropozaen
7 Literatur
kramann.info
© Guido Kramann

Login: Passwort:




DAY BY DAY

(EN google-translate)

(PL google-translate)


Aktuell: Der E-Test "Eingebettete Systeme BMT7" findet bereits am Mittwoch den 13.11.2019 ab 10:15 im IWZ135 statt.


  • Eingebettete Systeme, Wintersemester 2019/20
  • An den einzelnen Kursterminen behandelte Themen

Di 01.10.2019, 10:15-11:45

Übersicht: 74_EmbSyst
Kulturhistorischer Blick auf die abendländische Technik: 74_EmbSyst/06_Technische_Systeme/01_Kulturgeschichte

Di 01.10.2019, 12:30-14:00

  • Einführung RTOS
  • Hardwaretests Arduino-Micro und Arduino nano 33 iot
74_EmbSyst/03_Echtzeitprogrammierung/07_Arduino
74_EmbSyst/02_Eingebettete_Systeme/02_Arduino/01_Uebung1

Mi 02.10.2019, 08:30-10:00

  • Einführung RTOS
  • Chapter 2 im Salvo Manual (insb. Zustände eines Tasks: running, delayed, eligable)

Mi 02.10.2019, 10:15-11:45

  • Fortsetzung:
74_EmbSyst/02_Eingebettete_Systeme/02_Arduino/01_Uebung1
  • ... und Tests zu FreeRTOS:
74_EmbSyst/03_Echtzeitprogrammierung/07_Arduino/01_Uebung

Di 01.10.2019, 10:15-11:45

  • Besprechung der Übungen

Di 01.10.2019, 12:30-14:00

  • Neues Thema (anderer "Erzählstrang"): Android-Programmierung
Wir arbeiten nicht mit Android Studio: 74_EmbSyst/02_Eingebettete_Systeme/03_Android/05_Android/01_Getting_Started
Bedeutung von Activities: 74_EmbSyst/02_Eingebettete_Systeme/03_Android/05_Android/05_Activities
ADB-Werkzeug: 74_EmbSyst/02_Eingebettete_Systeme/03_Android/05_Android/08_ADB_Apps
Android-Processing: 74_EmbSyst/02_Eingebettete_Systeme/03_Android/07_Android_Processing
Processing: 74_EmbSyst/02_Eingebettete_Systeme/03_Android/06_Processing
Übung zu Android Processing
  • Analysieren Sie das Accelerometer-Beispiel der KETAI-Library (Erklärung im Kurs)
  • Schreiben Sie eine App, die die Hintergrundfarbe einer App abhängig von den Beschleunigungsdaten einstellt.

Di 22.10.2019, 10:15-11:45

eing_syst_22_10_2019_DI.zip -- vorbereitete Beispiele
  • Basics Java Programmierung: Klassen, Objektattribute, Objektmethoden.
  • Kompilieren in der Konsole
  • Vergleich Processing / Java von scratch
  • Einführung in BlueJ
  • UML Klassendiagramm
OOP Begriffe (C++)
Erzeugen von Objekten: Der Konstruktor (C++)
Java Basics
Processing - Getting started
Einfache Beispiele
Einführung BlueJ
Libraries (.jar-Files) in BlueJ einbinden.

Bild 0-1: Libraries (.jar-Files) in BlueJ einbinden.

Jar-File aus BlueJ-Projekt exportieren.

Bild 0-2: Jar-File aus BlueJ-Projekt exportieren.

Exportiertes Projekt starten.

Bild 0-3: Exportiertes Projekt starten.

Library für Processing unter BlueJ entwickelt.
Eigene Libraries für Processing entwickeln.
UML-Klassendiagramm

Di 22.10.2019, 12:30-14:00

  • Threadding mit Java
  • Binäre Semaphore mit Java
Threads -- Theorie
Verzweigen und wieder zusammenführen
Threads synchronisieren.
java-Threads Teil 1
Java-Threads Teil 2
Beispiel mit "Scheduled Executor Service".
Semaphore mit Java
  • Im Unterricht entstandenes Material:
Thread1.zip -- Threads mit Vererbung
Thread2_interface.zip -- Threads mit Schnittstelle Runnable
Schnittstelle.zip -- Wie man selber eine Schnittstelle schreibt
Programmstruktur vom Projekt

Bild 0-4: Programmstruktur vom Projekt "Schnittstelle" in BlueJ visualisiert.

Mi 23.10.2019, 08:30-10:00

  • Nötigenfalls Fortsetzung der Java-Themen von Dienstag
  • MUSTERLÖSUNG:
Klassenstruktur für Musterlösung zur Programmierung einer

Bild 0-5: Klassenstruktur für Musterlösung zur Programmierung einer

Objektorientierte Implementierung einer binären Semaphore als BlueJ-Projekt.
public class Main
{
    Thread t1,t2;
    Ausgabe aus_1;
    Ausgabe aus_2;
    public Main()
    {
    }
    
    public void initialisieren()
    {
        Sema sema = new Sema();
        aus_1= new Ausgabe("ABCD",500,sema);
        aus_2 = new Ausgabe("123",500,sema);
        t1 = new Thread(aus_1);
        t2 = new Thread(aus_2);
         t1.start();
         t2.start();
    }
    public static void main()
    {
        // tragen Sie hier den Code ein
        Main main = new Main();
        main.initialisieren();
    }
}

Code 0-1: Main.java

public class Ausgabe implements Runnable 
{
    private String ausgabe = "Tschüss";
    private long pausenlaenge;
    private Sema sema;
    public Ausgabe(String text, long pausenlaenge, Sema sema)
    {
        // Instanzvariable initialisieren
        this.pausenlaenge = pausenlaenge;
        //this.ausgabe = text;
        ausgabe = text;
        this.sema = sema;
    }

    public void run()
    {
      while(true)
      {
        if(sema.warte())
        {
          for (int i =0;i<ausgabe.length();i++)
          {
              System.out.print(ausgabe.charAt(i));
              if(i==ausgabe.length()-1)
                 sema.signal();
              try
              {
                  Thread.sleep(pausenlaenge);
              }
              catch(Exception e)               
              {
                  System.out.println("Pommes");
              }
          
          }
          //sema.signal();
        }  
      }
    }
}

Code 0-2: Ausgabe.java

public class Sema
{
    private boolean zustand;
    public Sema()
    {
         zustand = true;
    }
    public synchronized boolean warte() //wait im Text
    {
         if(zustand==true) // if device available
         {
             zustand = false;
             return true; //it worked, you have access to device 
         }
         else
         {
             return false; //it did not work
         }
    }    
    public synchronized boolean signal()
    {
         if(zustand==false) 
         {
              zustand = true;
              return true; //it worked to return the device
         }
         else
         {
              return false; 
         }
         
    }
}

Code 0-3: Sema.java

Übung
  • Binäre Semaphore mit Arduino
  • Organisieren Sie sich in kleinen Übungsgruppen
  • Überlegen Sie, wie man eine Binäre Semaphore in einem Mikrocontroller-Programm selber implementieren könnte.
  • Schreiben Sie ein Programm mittels FreeRTOS mit zwei parallelen Prozessen, die beide Texte an den seriellen Monitor senden.
  • Demonstrieren Sie die Vermischung der gesendeten Texte beider Threads.
  • Führen Sie dann Ihre binäre Semaphore ein und weisen Sie nach, dass die Texte danach nicht mehr vermischt sind.
Exercise4.zip -- Studentische Lösung.
#include <Arduino_FreeRTOS.h>

// define two tasks for Blink & AnalogRead
void Task1( void *a );
void Task2( void *b );
char str1[]="Hello";
char str2[]="Bye";
int x=1;

int MAX1 = 0;
int MAX2 = 0;

// the setup function runs once when you press reset or power the board
void setup() {
  
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
  
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB, on LEONARDO, MICRO, YUN, and other 32u4 based boards.
  }

  // Now set up two tasks to run independently.
  xTaskCreate(
    Task1
    ,  (const portCHAR *)"Hello"   // A name just for humans
    ,  128  // This stack size can be checked & adjusted by reading the Stack Highwater
    ,  NULL
    ,  0 // Priority, with 3 (configMAX_PRIORITIES - 1) being the highest, and 0 being the lowest.
    ,  NULL );

  xTaskCreate(
    Task2
    ,  (const portCHAR *) "Bye"
    ,  128  // Stack size
    ,  NULL
    ,  0 // Priority
    ,  NULL );

  // Now the task scheduler, which takes over control of scheduling individual tasks, is automatically started.
}

void loop()
{
  // Empty. Things are done in Tasks.
}

void Task1(void *a)  // This is a task.
{
  (void) a;
  for (;;)
  {
    if (x==1)
    {
      x=0;
      MAX1=strlen(str1);
    }  
    else
    {
      MAX1=0;  
    }
    
    for (int i=0;i<MAX1;i++)
    {    
      Serial.println(str1[i]);
      vTaskDelay(10);
    }
 
    if (MAX1>0)  
    { 
      x=1;
      vTaskDelay(200);
    }
      
  }
}


void Task2(void *b)  // This is a task.
{
  (void) b;
  for (;;)
  {
    if (x==1)
    {
      x=0;
      MAX2=strlen(str2);
    }  
    else
    {
      MAX2=0;  
    }
    
    for (int i=0;i<MAX2;i++)
    {    
      Serial.println(str2[i]);
      vTaskDelay(10);
    }
 
    if (MAX2>0)  
    { 
      x=1;
      vTaskDelay(200);
    }
      
  }
}

Code 0-4: Studentische Lösung "Binäre Semaphore mit Arduino".

Warteschleife Version 1 -- Ansatz für synchrone Programmierung mit dem Mikrocontroller.
Warteschleife Version 2 -- Ansatz für synchrone Programmierung mit dem Mikrocontroller.
Servo ansteuern über selbst konfigurierten Timer (zum Nachschlagen).

Mi 23.10.2019, 10:15-11:45

WiFi-Anwendung mit Ardiono nano 33 IoT (Funktionsnachweis)
Übung: Versuchen Sie das nachfolgend
Einige Angaben zur Internetprogrammierung.
udp_test_passwort_geaendert.zip -- Alle notwendigen Programme.
Anordnung:
  • Smartphone als W-LAN Hotspot aktivieren.
  • Processing-Programm zum Senden und Empfangen von Daten über UDP.
  • Arduino-Sketch zum Senden und Empfangen von Daten über UDP.
  • Arduino-Sketch um Verbindung aufzubauen und eigene IP zu ermitteln.
Vorgehen:
  • Wenn noch nicht vorhanden: UDP-Library bei Processing installieren
  • PC mit Smartphone-Hotspot verbinden (andere Verbindungen vorher trennen, Paßwort angeben).
  • Im Arduino-Sketch Name des Hosts und Paßwort eintragen. (Processing-Sketch läuft auf WiFi-fähigem Laptop oder PC, der schon verbunden ist!)
  • Ports müssen übereinstimmen (hier 6100 von Proc nach Ard, 6000 von Ard nach Proc).
  • Im Processing Sketch Ziel-IP des Arduino nano 33 IoT eintragen.
  • (Arduino-Sketch dagegen holt sich die Adresse der Instanz, von der sie ein Datenpaket empfangen hat, hier PC.)
  • Processing-Sketch starten.
  • Arduino flashen und dann Serial Monitor öffnen.
  • Im Processing-Sketch Taste drücken (a,b,c, ... NICHT Blank Spaces!)
PC: AUSGABE ifconfig
wlp3s0    Link encap:Ethernet  HWaddr f8:16:54:64:b8:f1  
          inet addr:192.168.1.252  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::1aa5:f936:9187:c977/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2001 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2372 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:170615 (170.6 KB)  TX bytes:276791 (276.7 KB)

Processing-Sketch am PC:
-- UDP session started at Mon Oct 21 15:55:41 CEST 2019 --
-- bound socket to host:null, port: 6000 --
[19-10-21 15:55:51.754 +0200] send packet -> address:/192.168.1.135, port:6100, length: 3
[19-10-21 15:55:52.147 +0200] receive packet <- from /192.168.1.135, port:6100, length: 12
receive: "acknowledg" from 192.168.1.135 on port 6100
[19-10-21 15:55:54.821 +0200] send packet -> address:/192.168.1.135, port:6100, length: 3
[19-10-21 15:55:55.55 +0200] receive packet <- from /192.168.1.135, port:6100, length: 12
receive: "acknowledg" from 192.168.1.135 on port 6100
[19-10-21 15:56:02.305 +0200] send packet -> address:/192.168.1.135, port:6100, length: 3
[19-10-21 15:56:02.335 +0200] receive packet <- from /192.168.1.135, port:6100, length: 12
receive: "acknowledg" from 192.168.1.135 on port 6100

Serial-Monitor (Ausgabe vom Arduino nano 33 IoT, Tasten a,b,c im Processing Sketch gedrückt):
Attempting to connect to SSID: ZTE A2017G_2064

Connected to wifi

SSID: ZTE A2017G_2064

IP Address: 192.168.1.135

signal strength (RSSI):-51 dBm


Starting connection to server...

Received packet of size 3

From 192.168.1.252, port 6000

Contents:

a;


Received packet of size 3

From 192.168.1.252, port 6000

Contents:

b;


Received packet of size 3

From 192.168.1.252, port 6000

Contents:

c;


Code 0-5: Ausgaben der verschiedenen Hardware-Komponenten.

Di 29.10.2019, 10:15-11:45 und 12:30-14:00

  1. Präsentation der Musterlösung zur selbst programmierten Semaphore mit Arduino (s.o.)
  2. Demonstration Datenübertragung via WiFi zwischen Arduino nano33 IoT und PC/Processing-Sketch (s.o.)
  3. Einführung in Android Processing VR
Tutorial zu Android VR auf processing.org: https://android.processing.org/tutorials/vr_intro/index.html
Android Processing VR
  • Test/Analyse der Beispiele unter processing.org
  • Blickrichtung Erfassen (08_Processing_VR)
  • Raumklang (08_Processing_VR)
  • Vergleich Ketai-Accelerometer / Android-VR
  • ÜBUNG: Kopplung der View einer VR-Brille mit einer PC-Darstellung via WiFi/oscP5
Nachtrag: Korrigierte und angepasste Version zu UDP-Kommunikation: udp_test_neu.zip
UDPmodulArduino.zip -- Gekapselte Version Arduino-Part.
udp_modul.zip -- Gekapselte Version Android-Part.

Mi 30.10.2019, 08:30-10:00 und 10:15-11:45

Übung

Eine VR-Szene soll sowohl mit der VR-Brille, als auch am PC sichtbar sein. Insbesondere soll die Szene in beiden Medien relativ zur Kopfbewegung/Blickrichtung zu sehen sein.

Nutzen Sie folgende Libraries / Techniken:

  • Android-Processing VR
  • PShape auch für PC
  • oscP5 oder direkt UDP

Siehe dazu auch:

74_EmbSyst/02_Eingebettete_Systeme/03_Android/09_Shapes3D
74_EmbSyst/02_Eingebettete_Systeme/03_Android/12_OSC/01_Datenaustausch
siehe unten Matrix4d: 74_EmbSyst/02_Eingebettete_Systeme/03_Android/19_Java3D

Wiese ist es möglich, zur eigenen PApplet-Klasse eine Methode receive(..) zu ergänzen und die von einer Library-Klasse her zu erkennen und aufzurufen, ohne Interfaces zu benutzen? Siehe hierzu auch:

74_EmbSyst/02_Eingebettete_Systeme/03_Android/17_Reflection

Die letzten beiden Projekte udp_test_neu.zip und UDPmodulArduino.zip haben die Besonderheit, dass die Funktionalität der WiFi-Datenübertragung in Extra-Klassen gekapselt ist.

  • Analysieren Sie als Vorbereitung zu Ihrer Übung diese Klassen genau.
  • Verfolgen Sie bei der Lösung der Aufgabe folgende Ziele:
  • PC- und Android-Programm sollen sich möglichst geringfügig unterscheiden.
  • Die vorhandenen Unterschiede sollten möglichst an einer Stelle konzentriert auftreten und nicht über das Ganze Projekt verteilt sein.
  • Organisieren Sie dazu Ihre Projekte in Klassen, die möglichst isoliert voneinander bestimmte Aufgaben erledigen.
  • Der Idealfall wäre, dass ein und dasselbe Programm sich jeweils unterschiedlich verhält, wenn es am PC oder auf dem Android-Gerät gestartet wird.
  • Ist es möglich gänzlich auf Konfigurationen zu verzichten, indem z.B. die Broadcast-Adresse bei UDP/oscP5 benutzt wird?
  • "KÜR": Von im VR-Raum verteilten Sphären gehen Klänge aus.
  • Sowohl am Laptop als auch am Android-Device sollen über Kopfhörer die Soundquellen räumlich lokalisiert werden können.

Siehe hierzu auch:

vr002_puls unter: 74_EmbSyst/02_Eingebettete_Systeme/03_Android/08_Processing_VR

Merke: Auf komplizierte Weise miteinander verflochte Komponenten erschweren die Wartbarkeit und hemmen die Weiterentwicklung.


  • Teillösung: Nur Ebenenwinkel wird übertragen:
vr2_OSC.zip -- Android-Part sendet per OSC die eyeMatrix
vr2_PC.zip -- Laptop-Part empfängt die eyeMatrix und bestimmt daraus den Verdrehwinkel der Welt relativ zur Kamera in der Ebene (phi).
vr4_PC.zip -- Komplett synchronisierte Darstellung über "applyMatrix(...)", der die invertierte/transponierte eyeMatrix übergeben wird, außerdem Spiegelung der Koordinatenachsen mit scale(...) (Android-Part bleibt wie gehabt!)

Di 05.11.2019, 10:15-11:45

  • Theorie der "Counting Semaphore": SALVO Manual 79(pdf) unten bis 81(pdf) mitte
  • Theorie zu "Messages": SALVO Manual 81(pdf) unten ev. bis 95(pdf).

Di 05.11.2019, 12:15-12:45

  • Bericht von CMMR2019 Teil 1.
Proceedings_CMMR2019.pdf

Di 05.11.2019, 12:45-14:15

Übung

Texte, die über den seriellen Monitor eingegeben werden, sollen in Morsepulse mit einer LED umgesetzt werden. Dabei gilt folgendes:

  • Umsetzung erfolgt mit Arduino Micro mit FreeRTOS.
  • Pulse mit grüner LED.
  • Lang==750ms
  • Kurz==250ms
  • Pause zwischen den Pulsen immer==250ms
  • Pulse werden durch hoch priorisiertem Echtzeitprozeß gesteuert.
  • Zwischenpuffern der hereinkommenden Texte.
  • Kontrolle über Pufferüberlauf mit zählender Semaphore.
  • a) Zählende Semaphore selber programmieren.
  • b) Zählende Semaphore aus FreeRTOS verwenden.
  • Bei drohendem Pufferüberlauf: Keine Übernahme weiterer Buchstaben, Rote LED blinkt schnell.
  • Testen Sie verschiedene Puffergrößen.
morse2.zip -- Musterlösung ohne Verwendung von FreeRTOS -- Verbesserungsmöglichkeit: Morsen wenigstens über ISR.

Mi 06.11.2019, 08:30-10:00 und 10:15-11:45

Java-Übung

Aufgabe 1 -- Zählende Semaphore

Setzen Sie die Aufgabe mit der zählenden Semaphore von gestern in Java um. Beachten Sie dabei:

  • Texterfassung erfolgt über keyPressed()
  • Der Morse-Thread sollte ein Echtzeit-Thread sein
  • Überlegen Sie sich jeweils ein Pendant zu "rote und grüne LED".

Aufgabe 2 -- Interfaces

  • Schreiben Sie ein Interface "iGeomentrie", das die Methode draw() enthält.
  • Implementieren Sie das Interface in zwei verschiedenen Klassen "Quadrat", "Kreis", die jeweils mit draw() sich selber zeichnen können.
  • Schreiben Sie ein Java-Programm, das in einer Array-List "arr" Objekte vom Typ "iGeomentrie" sammeln kann.
  • Mit jedem Mausklick soll ein Objekt vom Typ "Quadrat" oder "Kreis" in "arr" gespeichert werden. In dem jeweiligen Objekt soll mit die Mausposition gesepichert werden, so, dass die draw Funktion die entsprechende Geometrie dort platziert, wo man hingeklickt hat.
  • In der draw()-Funktion des Sketches soll zyklisch der Inhalt von "arr" ausgelesen werden und so der bisher zusammengeklickte Weg zu sehen sein.
  • Die Klicks werden mitgezählt. Bei geraden Klicks wird ein Kreis-Objekt in "arr" gespeichert, bei ungeraden ein Quadrat-Objekt.
//HILFESTELLUNG mit Quelltext:

//ArrayList anlegen:
ArrayList<iGeometrie> arr = new ArrayList<iGeometrie>();

//Neues Objekt in Array-List hinzufügen:
arr.add(new Kreis(mouseX,mouseY));

//Abrufen und zeichnen der in arr gespeicherten Objekte:
for(int i=0;i<arr.size();i++)
{
    iGeometrie g = arr.get(i);
    g.draw();
}


Code 0-6: Beispielcode als Hilfe

Aufgabe 3 -- Android VR

  • Nehmen Sie sich noch einmal die Musterlösung vr4_PC.zip vor.
  • Schreiben Sie ein Programm, bei dem Farbwechsel der sechs in der Szene befindlichen Bälle auftreten, wenn man den jeweiligen Ball länger ansieht.
  • Sorgen Sie dafür, dass nicht nur die Blickrichtung, sondern auch dieser Farbwechsel in der am PC reproduzierten Szene zu sehen ist.

Di 12.11.2019, 10:15-11:45

  • Gemeinsame Entwicklung der Lösungen der letzten Übung.

Di 12.11.2019, 12:15-12:45

  • Präsentation von Themen der Konferenz CMMR2019

Di 12.11.2019, 12:45-14:15

  • Audio als Echtzeitprozeß
  • Audio und VR
92_Soundinstallation/03_material/11_Snippets/05_VR_Playing_Sound
92_Soundinstallation/03_material/11_Snippets/05_VR_Playing_Sound/03_VR_Audio

Material dazu:

AOG3.zip
AOG3b_Android.zip
AOG7_sound_mini.zip