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_EmbSystKulturhistorischer Blick auf die abendländische Technik: 74_EmbSyst/06_Technische_Systeme/01_Kulturgeschichte
Di 01.10.2019, 12:30-14:00
|
|
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
|
|
Di 01.10.2019, 10:15-11:45
|
Di 01.10.2019, 12:30-14:00
|
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
|
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.
Eigene Libraries für Processing entwickeln.
UML-Klassendiagramm
Di 22.10.2019, 12:30-14:00
|
Verzweigen und wieder zusammenführen
Threads synchronisieren.
java-Threads Teil 1
Java-Threads Teil 2
Beispiel mit "Scheduled Executor Service".
Semaphore mit Java
|
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
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
|
#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 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
|
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/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:
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:
Merke: Auf komplizierte Weise miteinander verflochte Komponenten erschweren die Wartbarkeit und hemmen die Weiterentwicklung.
|
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:
|
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/03_VR_Audio
Material dazu:
AOG3b_Android.zip
AOG7_sound_mini.zip