De pingpongbal

Werkcollege Elektrotechniek

Alle info aangeduid met  is niet noodzakelijk en enkel voor de super-geïnteresseerden

Java-experten
      Isabel Gonzalez:    igonzale@etro.vub.ac.be   Ke.3.15   tel: (02/629) 2969
      Hans Ingelberts:   hingelbe@etro.vub.ac.be   K.5.328A   tel: (02/629) 2930

In het werkcollege elektrotechniek "de pingpongbal" is het de bedoeling een pingpongbal te laten zweven in een doorzichtige kolom op een ingestelde hoogte.
De pingpongbal kan je doen zweven door hem met een ventilator omhoog te stuwen of aan te zuigen. De hoogte kan je meten met een ultrasone sensor.
Om de bal stabiel te krijgen op een ingestelde hoogte zal je een goede regelkring moeten maken. Deze regelkring kan je programmeren in een microcontroller (MCU).
Om op een gebruiksvriendelijke manier je regelkring in te kunnen stellen zal je ook nog een grafische user interface (GUI) in java moeten programmeren.
Dit java programma communiceert met je microcontroller over een USB interface.

Studenten die graag programmeren kunnen ook nog via java een webcam aanspreken en zo de instelhoogte van de bal bepalen door dit met je hand op de kolom aan
te duiden en de beelden van de cam te analyseren. Studenten die liever extra aandacht besteden aan elektronica kunnen hun regelkring ook volledig opbouwen uit
analoge elektronica (opamps e.d.).

documentatie - installatie - evaluatiecriteria - oefening vrienden - oefening USB-muis - oefening bordje - oefening GUI - oefening Visual Editor

Documentatie

                USB is een lijvige standaard die regels oplegt voor alles gaan van de electrische signalen, data paketten, drivers tot kabels en connectors

Programma's

Evaluatiecriteria van je code

Dit zijn de evaluatiecriteria:

  1. Correctheid

  2. Begrijpbaarheid: gebruik logische namen, indenteer correct (!!) en kuis je code op (!!).

  3. Flexibiliteit: aanpasbaarheid & uitbreidbaarheid

  4. Herbruikbaarheid: delen van je code kunnen gebruikt worden om andere problemen op te lossen.

Om dit te bereiken heb je ten eerste de principes van gestructureerd programmeren (zie Modula-2 project)

  1. Duidelijke naamgeving (dan is niet veel documentatie nodig). Tip: gebruik Refactor => Rename in Eclipse om namen in 1x aan te passen over het gehele project.

  2. Documenteer niet-triviale code. Er is wel gevraagd een handleiding te schrijven. Die moet sowieso de structuur van je programma uitleggen, voor bepaalde details kan je naar de code verwijzen. Er moet zeker een schema met de codestructuur gedocumenteerd worden!!

  3. Geen redundantie, geen dubbele code.

Ten tweede heb je de mogelijkheden die Object-geöriënteerd programmeren biedt:

  1. Encapsulatie: een object vormt een logisch geheel die een bepaald aspect van je probleem oplost. Je steekt niet alles in 1 object, maar verdeelt de verschillende verantwoordelijkheden over verschillende objecten (zo bekom je duidelijke en herbruikbare code). Je zorgt ervoor dat niet alle objecten met elkaar praten, want dan krijg je spagetticode.

  2. Overerving (inheritance): gemeenschappelijke onderdelen worden in hoofdklasses gestoken, specificiteiten in subklasses. Zo bekom je herbruikbaarheid en flexibiliteit.

  3. Polymorfisme & abstractie: een abstracte klasse of een interface definieren een abstract concept. Dit concept kan dan gebruikt worden in delen van je programma, die onafhankelijk van de concrete invulling van het concept worden! Dit zorgt voor de uitbreidbaarheid van je programma. Een interface definieert wat een bepaald deel van je programma moet kennen van een ander.

Tracht flexibiliteit en herbruikbaarheid te bereiken voor de volgende aspecten

  1. Maak een abstractie van je regelaar in Java: Je regelaar zit in de MCU en niet in Java. Toch kan je in java ook regelaar klasse maken. Met je GUI stel je die java regelaar in. Je java regelaar zorgt er voor dat de juiste instellingen bij de echte regelaar geraken.

  2. Scheiden GUI - Regelaar: Tracht je GUI code gescheiden te houden van je regelaar. Misschien verandert je regelaar op een dag en dan kan je de GUI gewoon houden, of omgekeerd.
  3. Scheiden Regelaar - USB communicatie: Probeer ook hier beide gescheiden te houden. Probeer je in te beelden dat je op een dag niet meer met USB maar met firewire zou werken...



Oefeningen   (Documentatie standaard Java packages)

   Voorbeeld 'Vrienden': wat is object-geöriënteerd programmeren?

    1. Download de klasse Persoon ergens op je pc.

    2. Start Eclipse , hij zal je vragen waar je je workspace wilt hebben. Maak een folder bij jou files (bvb 'java'). Vink 'Remember my decision' aan. Eclipse bied je dan een welkom-pagina met een introductie aan, je kan die skippen met (rechtsboven).

    3. Maak een nieuw java projekt in Eclipse en geef het een naam. Eclipse maakt een folder met die naam aan.

    4. Importeer de Persoon.java file mbv Import (File => Import => General => File System => Browse)

    5. Maak een klasse Vrienden met een Main method waarin je aanmaakt:
public static void main(String[] args) {
}
    1. Run de Main van Vrienden  met (je moet wel ergens in de file te staan)

    Uitbreiding vrienden-voorbeeld: Leugenaars en Ontkenners

  Spelen met een USB muis (een USB HID class device)

                           Het rapport dat we willen opvragen is 3 bytes groot, is van het type "Input" (0x01) en heeft ID 0x00  Het opvragen van rapporten is een controle request met ID 0x01 (GET_REPORT). Het type van request is Device naar Host, class type, interface recipient)
                            (Deze informatie komt uit de documentatie op www.usb.org, er is aparte documentatie voor de USB standaard en voor dingen die specifiek zijn aan de HID class (Human Interface Device (zoals muis, keyboard, pointers, barcode readers,...)))

                            -> Voer een controle transfer uit die het gewenste rapport opvraagt.

                5. Print de opgevraagde informatie af in de console en probeer uit te vissen welke bytes wat voorstellen door wat met de muis te bewegen en knoppen te gebruiken en te kijken hoe de rapporten veranderen.             

        Jan &Tibi, the game: Multiplayer game met 2 muizen in één pagina Java code  Jan&Tibi
               
In dit spel moet Tiberghien, Jan te pakken krijgen!
                Tiberghien bedien je met één muis, Jan met een andere.
                        -> Download de code met de nodige images
                Om het te spelen moet je één muis kunnen aanspreken via libusb zoals in de oefening hierboven en vergeet de vender en product id van jouw muis niet in te geven

                Dit spel is in enkele uren gemaakt en nog lang niet zo leuk als het zou kunnen zijn. Analyseer de code, verbeter het spel, stuur het ons, wordt onsterfelijk!
    Communicatie met de MCU bordjes (Een USB vendor specific device)

  Oefening om GUIs te leren maken

   Oefening om GUIs te leren maken mbv de Visual Editor (een plugin voor Eclipse) (hier wat documentatie + hoe te installeren).


   Test-oefening: hoe goed is je basiskennis van java? Voorspel de output van het programma.
                    Tip: analyseer eerst hoe de klasses met elkaar relateren.


    Meer over java:


- Back to the top -