QUIZ

In dit project bouwen we een quiz opstelling voor maximaal 5 deelnemers en een operator.

De HDMI-uitgang van de Raspberry wordt aangesloten op een lcd-scherm voor de deelnemers en het systeem wordt door de operator bestuurd via een SSH-verbinding, zoals een iPad of een laptop.

Elke deelnemersknop is verbonden met de Pi met voldoende draadlengte. Een mooie knop voor de deelnemers is de handknop van Eaton, het is ook een dure knop. De goedkoopste knoppen zijn de arcade knoppen van een Aziatische online shop. Er zijn varianten die van een LED voorzien zijn.

De knoppen worden als volgt met de Raspberry Pi verbonden.

PyGame
Door gebruik te maken van de PyGame bibliotheek kunnen we door de terminal.addstr-functie het operatormenu op het zgn. SSH-scherm zien.

Voor de weergave aan de deelnemers en het publiek zijn .jpg-afbeeldingen nodig. Denk hierbij aan een unieke afbeelding, zoals een teamnummer, foto of logo per deelnemer/team.

Met de numbers-functie worden de afbeeldingen op het lcd-scherm weergegeven wanneer per vraag een winnaar is bepaald. De afbeeldingen worden in dezelfde map opgeslagen als waar het programma staat. De afbeeldingen  zijn zogenaamde tuples. Ook wordt de afstand vanaf de linkerkant (offset) van het scherm in de functie bepaald.

De left-variabele bepaalt de offset aan de linkerkant van het scherm voor elke afbeelding. Elke offset wordt berekend door de cumulatieve breedte van eerder geladen afbeeldingen te krijgen. Het is aan de persoon die de afbeeldingen maakt om ervoor te zorgen dat de totale breedte van alle vijf afbeeldingen / nummerweergaven hetzelfde zijn als de weergavegrootte.

Blokkeren van ingangen
Als een invoerblok blokkeert, zal het niet terugkeren totdat het een karakter heeft ontvangen.
Dit is vaak onwenselijk omdat je programma niet meer reageert. Wachten op een toetsenbordinvoer is misschien niet zo erg, maar hetzelfde principe is van toepassing op netwerk- en seriële communicatie. In dat geval lijkt uw programma te bevriezen totdat de gegevens arriveren.

Om dit probleem op te lossen, gebruiken programmeurs niet-blokkerende invoer en integreren invoerverwerking in de hoofdlus van het programma. Dit verwerken is slechts een van de taken, samen met het bijwerken van het scherm, het controleren van externe ingangen, enzovoort. Wanneer een toetsdruk (of andere communicatiegegevens) wordt ontvangen, wordt deze aan een buffer toegevoegd en blijft de hoofdlus lopen. Uiteindelijk komt een “ik ben klaar” -teken (bijvoorbeeld regelterugloop) of het juiste aantal bytes aan uit uw gegevensbron. Zodra dit gebeurt, kan uw programma de hele buffer in één keer verwerken, zonder de gebruikersinterface te gebruiken.

De operator
Om het systeem te bedienen, drukt de operator op de b in de SSH-terminal verbinding om de knoppen in te schakelen. De software is vergrendelt in een lus totdat op een van de knoppen wordt gedrukt. Nadat op een knop is gedrukt, verschijnt de specifieke afbeelding op het lcd-scherm dat aan die knop (deelnemer) is gekoppeld. De operator kan op r drukken om het systeem opnieuw in te stellen waardoor het scherm wordt gewist en vervolgens op b wordt gedrukt wanneer het tijd is voor de volgende vraag.

De nummers 1 tot en met 5 zijn beschikbaar als back-up voor de eigenlijke knoppen. De operator kan zo nodig op een van deze nummers drukken als hij weet wie het eerste drukte.

Python
PyGame wordt meestal geïnstalleerd met de nieuwste Raspbian-distributie, maar als dat niet het geval is, kunt u de volgende opdracht gebruiken om het te installeren:

sudo apt-get install python-pygame

Valkuilen en toekomstige verbeteringen
De grootste valkuil in het hele project was dat de gebruikte iPad de Raspberry Pi niet kon zien via de WiFi. Afgezien daarvan werkte het systeem soepel gedurende de hele test. Momenteel werk ik eraan dat na het indrukken ook een audio bestand wordt afgespeeld, denk aan een zoemer of een andere audiosample, zoals leuke dierengeluiden. Ook wil ik een LED in de knop inbouwen die brandt bij de eerste die gedrukt heeft.

Geef als eerste een reactie

Laat een reactie achter

Het e-mailadres wordt niet gepubliceerd.


*