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.
|
|
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
|
|
74_EmbSyst/03_Echtzeitprogrammierung/07_Arduino
74_EmbSyst/02_Eingebettete_Systeme/02_Arduino/01_Uebung1
Mi 02.10.2019, 08:30-10:00
|
|
Mi 02.10.2019, 10:15-11:45
|
74_EmbSyst/02_Eingebettete_Systeme/02_Arduino/01_Uebung1
|
74_EmbSyst/03_Echtzeitprogrammierung/07_Arduino/01_Uebung
Di 01.10.2019, 10:15-11:45
|
Di 01.10.2019, 12:30-14:00
|
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
|
Di 22.10.2019, 10:15-11:45
eing_syst_22_10_2019_DI.zip -- vorbereitete Beispiele
|
OOP Begriffe (C++)
Erzeugen von Objekten: Der Konstruktor (C++)
Java Basics
Processing - Getting started
Einfache Beispiele
Einführung BlueJ
Bild 0-1: Libraries (.jar-Files) in BlueJ einbinden.
Bild 0-2: Jar-File aus BlueJ-Projekt exportieren.
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
|
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
|
Thread1.zip -- Threads mit Vererbung
Thread2_interface.zip -- Threads mit Schnittstelle Runnable
Schnittstelle.zip -- Wie man selber eine Schnittstelle schreibt
Bild 0-4: Programmstruktur vom Projekt "Schnittstelle" in BlueJ visualisiert.
Mi 23.10.2019, 08:30-10:00
|
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
|
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:
|
Vorgehen:
|
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
|
Android Processing VR
|
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:
|
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.
|
|
|
|
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.
|
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
|
Di 05.11.2019, 12:15-12:45
|
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:
|
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:
|
Aufgabe 2 -- Interfaces
|
//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
|
Di 12.11.2019, 10:15-11:45
|
Di 12.11.2019, 12:15-12:45
|
Di 12.11.2019, 12:45-14:15
|
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