Sisällysluettelo:
- Vaihe 1: Toimintateoria
- Vaihe 2: Osat ja välineet
- Vaihe 3: Juotos ja kokoonpano
- Vaihe 4: Ohjelmointi A: Arduino
- Vaihe 5: Ohjelmointi B: Python ja käyttöliittymä
Video: MIDI -rumpusetti Pythonilla ja Arduinolla: 5 vaihetta (kuvilla)
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:00
Olen aina halunnut ostaa rumpusetin lapsesta asti. Silloin kaikilla musiikkilaitteilla ei ollut kaikkia digitaalisia sovelluksia, kuten meillä on paljon tänään, joten hinnat ja odotukset olivat liian korkeat. Äskettäin olen päättänyt ostaa halvimman rumpusarjan eBaysta. Ainoa prioriteetti: Mahdollisuus repiä se alas ja liittää laitteeni ja ohjelmistoni laitteeseen.
Osto ei ollut pettymys: Kannettava roll-up rumpusetti, jossa on 9 erilaista äänityynyä, kaksi jalkakytkinpoljinta potkurirummulle ja hi-hat ja mikro-USB-pistorasia. Mikä oli todella demotivoivaa, se on lähtöäänet (Tämän sarjan todellinen käyttö on ulkoisen kaiuttimen liittäminen ja nauttiminen). Niinpä päätin muuntaa sen omaksi ohjelmoitavaksi USB: n kautta, Arduinoon perustuvan MIDI -rumpusarjan ja Python -pohjaisen käyttöliittymän käteväksi käyttöön ja helppokäyttöisiksi, kuten äänenvoimakkuuden, muistiinpanon ja kanavavalinnat.
Laitteen ominaisuudet:
- Alhainen hinta
- Luo rumpusetti mistä tahansa digitaalitulosta - jopa joukko painikkeita
- Tiedonsiirtotuki ja virtalähde vain USB -liitännän kautta - USB -liitäntä UART -muuntimeen ja Arduino -laitteeseen
- Mininaariosat moitteettomaan toimintaan
- Helppokäyttöinen Python-pohjainen käyttöliittymä
- Täydellinen MIDI -tuki säädettävällä nopeudella, muistiinpanolla ja Arduino -nastoilla
- Tallenna ja lataa laitteen muistiin tallennetut mukautetut rumpumääritykset
Jatketaan projektia…
Vaihe 1: Toimintateoria
Lohkokaavio
Ensinnäkin keskitytään projektin rakenteeseen ja jaetaan se erillisiin lohkoihin:
Roll-up rumpusetti
Hankkeen pääyksikkö. Se koostuu yhdeksästä erillisestä rumputyynystä, joissa jokainen tyyny on joukko painikkeita, jotka muuttavat logiikkatilaansa osuessaan. Rakenteensa vuoksi on mahdollista rakentaa tämä rumpusetti mistä tahansa painikkeesta. Jokainen rumputyyny on kytketty pääelektronisen piirilevyn vetovastusvastukseen, joten kun rumputyynyä isketään toistuvasti, tietty kytkin on sidottu piirin maahan ja rummun tyynylinjalla on looginen LOW. Kun painetta ei käytetä, rumputyynyn kytkin on auki ja sähköjohtoon kohdistuvan vetovastuksen vuoksi rummutyynylinjassa on looginen HIGH. Koska projektin tarkoituksena on luoda täydellinen digitaalinen MIDI -laite, kaikki pääpiirilevyn analogiset osat voidaan jättää huomiotta. On tärkeää huomata, että rumpusarjassa on kaksi poljinta potkurirumpua ja hihat-hattua varten, jotka on myös sidottu vetovastusvastuksiin ja joilla on sama toimintalogiikka kuin kaikilla rumputyypeillä (keskustelemme siitä hieman myöhemmin).
Arduino Pro-Micro
Rumpusetin aivot. Sen tarkoituksena on havaita, tuleeko rumputyynystä signaalia, ja tarjota asianmukainen MIDI -lähtö kaikilla tarvittavilla parametreilla: Huomautus, nopeus ja signaalin kesto. Rumputyynyjen digitaalisen luonteen vuoksi ne voidaan yksinkertaisesti sitoa arduino -digitaalituloihin (yhteensä 10 nastaa). Kaikkien haluttujen asetusten ja MIDI-tietojen tallentamiseksi aiomme käyttää sen muistia-EEPROMia, joten aina kun kytket laitteeseen virran, MIDI-tiedot ladataan EEPROMista, jolloin se voidaan ohjelmoida uudelleen ja määrittää uudelleen. Lisäksi Arduino Pro-Micro on saatavana hyvin pienessä pakkauksessa, ja se voidaan sijoittaa helposti rumpusarjan sisäkoteloon.
FTDI USB -sarjamuunnin
Laitteemme ominaisuuksien ohjelmoimiseksi ja määrittämiseksi PC-sovelluksen avulla on tarpeen muuntaa USB-liitäntä sarjaliitäntään, koska Arduino Pro-Micro -laitteessa ei ole USB-liitäntää. Koska laitteiden välinen tiedonsiirto perustuu UART: iin, FTDI -laitetta käytetään tässä projektissa, koska se on helppokäyttöinen lisäominaisuuksistaan riippumatta.
PC -sovellus - Python
Mitä tulee käyttöliittymien kehittämiseen ja nopeasti rakennettaviin projekteihin, Python on loistava ratkaisu. Käyttöliittymäsovelluksen tarkoituksena on tehdä paljon helpommaksi määritellä uudelleen rumpusarjamme MIDI -ominaisuudet, tallentaa tietoja, ohjelmoida laitetta ja muodostaa kommunikaatio järjestelmien välillä ilman tarvetta koota koodia uudestaan ja uudestaan. Koska käytämme sarjaliitäntää kommunikoidaksesi rumpusarjan kanssa, Internetissä on runsaasti ilmaisia moduuleja, jotka tukevat kaikenlaista sarjaliikennettä. Lisäksi, kuten myöhemmin käsitellään, UART -liitäntä koostuu yhteensä kolmesta nastasta: RXD, TXD ja DTR. DTR: ää käytetään Arduino -moduulin nollaamiseen, joten kun olemme kiinnostuneita MIDI -sovelluksen käyttämisestä tai käyttöliittymän kytkemisestä ohjelmointilaitteeseen, USB -kaapelia tai mitään ei tarvitse liittää uudelleen.
Vaihe 2: Osat ja välineet
Osat
- Rullasarja
- 2 x Sustain -polkimet (sisältyvät yleensä DK -pakettiin).
- FTDI - USB -sarjamuunnin
- Arduino Pro Micro
- Micro-USB-kaapeli
Välineet
- Juotin/asema
- Tina juotos
- Ohut halkaisijainen yhden ytimen lanka
- Pinsetit
- Leikkuri
- Pihdit
- Veitsi
- Ruuvimeisseli
- 3D -tulostin (valinnainen - mukautetuille pedaalialustoille)
Ohjelmisto
- Arduino IDE
- Python 3 tai uudempi
- JetBrains Pycharm
- Karvaton MIDI -käyttöliittymä
- loopMIDI
Vaihe 3: Juotos ja kokoonpano
Koska kolme moduulia on yhdistettävä, juotos- ja kokoonpanoprosessi on lyhyt ja yksinkertainen:
-
Kiinnitä Arduino Pro-Micro ja FTDI-laite yhteen ja varmista, että liitännät ovat kullakin laitteella määritettyjen I/O-liitännät:
- VBUS-VBUS
- GND-GND
- DTR-DTR
- RXD-TXD
- TXD-RXD
- Irrota kaikki ruuvit rummun muovikotelosta, varmista, että voit keskittyä pad-to-board -kaapeliin ja sen vetovastuksiin
-
Juottaa ohuet johdot Arduino-FTDI-moduulille, jonka olemme rakentaneet aiemmin:
- Digitaalitulot: D [2:11]
- VBUS
- D+
- D-
- GND
- Aseta moduuli paristokotelon sisään niin, että johdot kelluvat samalla puolella kuin tyynyjen vetovastus
- Juotos kaikki digitaalitulot rummun tyynyliittimiin, kuten viimeisessä kuvassa on esitetty.
- Liitä mikro-USB-väylä (VBUS, D+, D-, GND) FTDI-laitteeseen, varmista, että näiden johtojen jäljittämisessä ei ole virheitä.
- Kiinnitä Arduino-FTDI-moduuli kuumaliimalla akkukoteloon
- Asenna laite sopivilla ruuveilla
Olemme tehneet sen, laite on koottu. Jatketaan koodista…
Vaihe 4: Ohjelmointi A: Arduino
Kuvataan luonnostamme vaihe vaiheelta:
Ensinnäkin on sisällytettävä kaksi tarvittavaa kirjastoa asianmukaiseen toimintaan. EEPROM on jo esiasennettu Arduino IDE -laitteeseen, mutta potkurirumpun poistomoduuli on asennettava erikseen
#Sisällytä #Sisällytä
Näitä kytkimiä käytetään pääasiassa virheenkorjaussarjoissa. Jos haluat kokeilla Arduino -liittimien yhteyttä rumputyynyihin ja määrittää kaikki digitaalitulot, nämä kytkimet on määritettävä
/ * Kehityskytkimet: Poista kommenttien haluttu tila virheenkorjausta tai alustamista varten.
Vakiokentät edustavat kaikkia oletusarvoja, mukaan lukien rummun tyynyjen luettelointi. Jotta laitetta voidaan käyttää ensimmäistä kertaa, on tiedettävä Hi-Hat- ja Kick-pedaalien tarkka yhteys
/ * Rummutyyppien luettelointi */
enum DRUM_POSITION {KICK = 0, SNARE, HIHAT, RIDE, CYMBAL1, CYMBAL2, TOM_HIGH, TOM_MID, TOM_LO, HIHAT_PEDAL};
/ * Oletusarvot */
const uint8_t DRUM_NOTES [10] = {36, 40, 42, 51, 49, 55, 47, 45, 43, 48}; const uint8_t DRUM_VELOCITIES [10] = {110, 100, 100, 110, 110, 110, 110, 110, 110, 110}; const uint8_t DRUM_PINS [10] = {8, 6, 4, 3, 11, 9, 5, 10, 2, 7};
/ * Potkurirummun kesto */
const uint8_t KICK_DB_DURATION = 30;
EEPROMia käytetään kaikkien PC -sovelluksesta tulevien tietojen tallentamiseen/lataamiseen. Yllä kuvattu osoitteiden alue näyttää kunkin rumputyypin MIDI -tietojen tarkan sijainnin
/* EEPROM Osoittaa kartoituksen
Huomautuksia: | 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09 |
Nastat: | 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13 | Nopeudet | 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x20, 0x21, 0x22, 0x23 | */ const uint8_t NOTES_ADDR = 0x00; const uint8_t ELOKUVAT_ADDR = 0x14; const uint8_t PINS_ADDR = 0x0A;
Globaaleja muuttujia käytetään määrittämään kunkin tyynyn tila ja suorittamaan MIDI -tiedonsiirto vastaavasti
/ * Globaalimuuttujat */
uint8_t drumNotes [10], drumVelocities [10], drumPins [10]; // MIDI -muuttujat
uint8_t uartBuffer [64]; // UART -puskuri MIDI Data Debouncer -potkun keräämiseen ja tallentamiseen (DRUM_PINS [KICK], KICK_DB_DURATION); // Potkurirummun haihtuvan boolin laukaisukohde previousState [9] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // Rumpualustan edellinen logiikka ilmoittaa haihtuvan bool currentState [9] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // Rumpualustan nykyiset logiikkatilat
EEPROM -toiminnot
/* Tallenna asetukset EEPROMiin*/
void storeEEPROM () {
muisti (drumNotes, uartBuffer, 10); muisti (drumPins, uartBuffer + 10, 10); muisti (drumVelocities, uartBuffer + 20, 10); for (uint8_t i = 0; i <10; i ++) EEPROM.write (NOTES_ADDR+i, drumNotes ); for (uint8_t i = 0; i <10; i ++) EEPROM.write (PINS_ADDR+i, drumPins ); for (uint8_t i = 0; i <10; i ++) EEPROM.write (VELOCITIES_ADDR+i, drumVelocities ); }
/* Lataa asetukset EEPROMista*/
void loadEEPROM () {for (uint8_t i = 0; i <10; i ++) drumNotes = EEPROM.read (NOTES_ADDR+i); for (uint8_t i = 0; i <10; i ++) drumPins = EEPROM.read (PINS_ADDR+i); for (uint8_t i = 0; i <10; i ++) drumVelocities = EEPROM.read (VELOCITIES_ADDR+i); }
Muuttujien alustus ja ohjelmointitila, kun kyseessä ovat polkimet ja Arduino -käynnistys, aktivoidaan samanaikaisesti
void enterProgrammingMode () {
bool vahvistaBreak = epätosi; uint8_t lineCnt = 0; uint8_t charCnt = 0; char readChar = 0; while (! vahvistaBreak) {if (Serial.available ()) {uartBuffer [charCnt] = Serial.read (); if (charCnt> = 29) vahvistaBreak = true; muu charCnt ++; }} Serial.println ("OK"); storeEEPROM (); }
void initValues () {
#ifdef LOAD_DEFAULT_VALUES memcpy (drumNotes, DRUM_NOTES, 10); muisti (drumVelocities, DRUM_VELOCITIES, 10); muisti (drumPins, DRUM_PINS, 10); #else loadEEPROM (); #loppu Jos }
MIDI -tiedonsiirtokäsittelijät 1 ms: n viiveellä
/ * Toista MIDI -muistitoiminto */
void midiOut (enum DRUM_POSITION drumIn) {
if (drumIn == HIHAT) {// Jos HI-HAT osui, on tarkistettava, painetaanko poljinta, jos (! digitalRead (drumPins [HIHAT_PEDAL])) {noteOn (0x90, drumNotes [HIHAT_PEDAL], drumVelocities [HIHAT_PEDAL]); viive (1); noteOn (0x90, drumNotes [HIHAT_PEDAL], 0); } else {noteOn (0x90, drumNotes [HIHAT], drumVelocities [HIHAT]); viive (1); noteOn (0x90, drumNotes [HIHAT], 0); }} else {// Säännöllinen rumpu MIDI -lähetys noteOn (0x90, drumNotes [drumIn], drumVelocities [drumIn]); viive (1); noteOn (0x90, drumNotes [drumIn], 0); }}
void noteOn (int cmd, int pitch, int velocity) {Serial.write (cmd); Serial.write (piki); Serial.write (nopeus); }
setup () - ja loop () -toiminnot, joissa on ääretön laitteen toimintasilmukka:
void setup () {
Sarja.alku (115200);
for (uint8_t i = 0; i <10; i ++) {pinMode (i+2, INPUT); } #ifdef PRINT_PADS_PIN_NUMBERS while (true) {// Infinite debug loop for (uint8_t i = 0; i <10; i ++) {if (! digitalRead (i+2)) {Serial.print ("Pin No: D"); Sarjanjälki (i + '0'); // Muunna numero ASCII -merkiksi}}} #else initValues (); / * Ohjelmointitila: Jos kahta poljinta painetaan käynnistyksen aikana - tila on aktivoitu */ if (! DigitalRead (drumPins [KICK]) &&! DigitalRead (drumPins [HIHAT_PEDAL])) enterProgrammingMode (); #loppu Jos }
void loop () {for (uint8_t i = 1; i <9; i = i + 1) {currentState = digitalRead (drumPins ); if (! currentState && previousState ) midiOut (i); // Vertaa tiloja ja havaitse putoava reuna previousState = currentState ; } kick.update (); // Potkurumpu käyttää mukautettua palautusalgoritmia if (kick.edge ()) if (kick.falling ()) midiOut (KICK); }
Vaihe 5: Ohjelmointi B: Python ja käyttöliittymä
Python -käyttöliittymä on hieman monimutkainen ymmärtää ensisilmäyksellä, joten yritämme selittää sen perusasiat, kuinka käyttää, mitä toimintoa jokaisella painikkeella on ja kuinka ohjelmoida Arduino -laite oikein.
Käyttöliittymä - sovellus
Käyttöliittymä on graafinen esitys rumpusarjan ohjelmoijallemme, mikä tekee siitä todella helppokäyttöisen ja kätevän ohjelmoida Arduino -laitteen milloin tahansa. Käyttöliittymä koostuu useista graafisista moduuleista, jotka on sidottu niiden ehdotettuun toimintaan. tarkastellaan niitä yksi kerrallaan:
- Rumpusarjakuva: Python-käyttöliittymä määrittää XY-kuvan koordinaatit valitun rummutyypin määrittämiseksi. Jos kelvollinen rumpualue on valittu, näkyviin tulee toissijainen IO -viesti, jossa on muistiinpanokentät, nopeus ja Arduino -liitäntä omistetulle rumputyynylle. Kun käyttäjä on tarkistanut ja hyväksynyt nämä parametrit, nämä arvot voidaan lähettää suoraan Arduino -laitteelle.
- Ulkoisen ohjaimen kuva: Jotta voidaan käyttää MIDI-rumpusettiä VST/musiikkia luovan ympäristön kanssa, on käytettävä Serial-to-MIDI-tulkkia. Olen käyttänyt Hairlessia, joka on saatavilla ilmaiseksi ja jota voidaan käyttää suoraan käyttöliittymästämme vain painamalla sen kuvaa.
- COM -porttiluettelo: Jotta voit kommunikoida Arduinon kanssa, sinun on määritettävä sen liitteenä oleva COM -portti. Listaa päivitetään painamalla Päivitä -painiketta.
- Lataa/tallenna kokoonpano: Koodissa on määritetty oletusarvoisia MIDI -arvoja, joita käyttäjä voi muokata vuorovaikutuksessa käyttöliittymän kanssa. Määritykset määritetään config.txt -tiedostossa tietyssä muodossa, jonka käyttäjä voi tallentaa tai ladata.
- Ohjelmointilaitteen painike: Kaikkien muokattujen MIDI-arvojen tallentamiseksi Arduino EEPROM -laitteeseen on sen jälkeen painettava kahta jalkapoljinta (potkurirumpu ja Hi-hat-poljin), odota tietojen siirtämistä loppuun. Jos viestintäongelmia esiintyi, oikea ponnahdusikkuna näytetään. Jos lähetys onnistuu, käyttöliittymä näyttää onnistuneen viestin.
- Poistu -painike: Poistu sovelluksesta vain käyttäjän luvalla.
Python -koodin kohokohdat
Koodissa tapahtuu paljon asioita, joten laajennamme kirjallisiin toimintoihin koko koodin sijasta.
Ensinnäkin käyttöliittymän käyttämiseksi on ladattava useita moduuleja koodin toimimiseksi:
tuoda osimport -ketjutus tuonti tkinter tk: stä tkinteristä tuoda viestilaatikko tkinter -tuonnista * PIL -tuonnista ImageTk, kuvan tuonti numero np -tuontina sarjatuonti globaali
Jotkut moduulit sisältyvät Python -oletuspakettiin. PIP -työkalun kautta on asennettava useita moduuleja:
pip asenna tyyny
pip install numpy pip install ScreenInfo
On erittäin suositeltavaa käyttää sovellusta PyCharmin kautta. Tulevissa julkaisuissa aion viedä suoritettavan tiedoston projektille.
Lyhyt selitys koodista
Koodin ymmärtäminen on paljon helpompaa, jos tarkastelemme sen rivejä funktioiden ja luokkien näkökulmasta:
1. Päätoiminto - tästä koodi alkaa
jos _nimi_ == '_main_': drumkit_gui ()
2. Rumpusarjan vakioita, koordinaatteja ja oletus -MIDI -tietoja
luokan rummut: DRUM_TYPES = ["Kick", "Hihat", "Snare", "Crash 1", "Crash 2", "Tom High", "Tom Mid", "Tom Low", "Ride", "Hihat Pedal" "," Ohjain "]
COORDINATES_X = [323, 117, 205, 173, 565, 271, 386, 488, 487, 135, 79]
COORDINATES_Y = [268, 115, 192, 40, 29, 107, 104, 190, 71, 408, 208] DIMS_WIDTH = [60, 145, 130, 120, 120, 70, 70, 130, 120, 70, 145] DIMS_LENGTH = [60, 60, 80, 35, 35, 40, 40, 70, 35, 100, 50]
DRUM_ENUM = ["Kick", "Snare", "Hihat", "Ride", "Crash 1", "Crash 2", "Tom High", "Tom Mid", "Tom Low", "Hihat Pedal"]
DRUM_NOTES = [36, 40, 42, 51, 49, 55, 47, 45, 43, 48] DRUM_VELOCITIES = [110, 100, 100, 110, 110, 110, 110, 110, 110, 110] DRUM_PINS = [8, 6, 4, 3, 11, 9, 5, 10, 2, 7]
3. Käyttöliittymätoiminnot - Käyttöliittymän ja graafisten objektien käsittely
def set_active (ui)
def sekundäärinen_ui (rummun_tyyppi)
luokka SelectionUi (tk. Frame)
luokan sovellus (tk. kehys)
def drumkit_gui ()
def event_ui_clicked (tapahtuma)
def getorigin (itse, tapahtuma)
4. Sarjaviestintä
def get_serial_ports ()
def kommunikoida_arduinon kanssa (portti)
5. Tiedostojen käsittely: Tallenna/lataa asetukset txt -tiedostosta
def save_config ()
def load_config ()
6. Suorita ulkoinen sovellus hairless.exe koodista Python Threading -ominaisuuksien avulla
luokka ExternalExecutableThread (threading. Thread)
def run_hairless_executable ()
Koodin suorittamiseksi on luettelo tiedostoista, jotka on liitettävä projektikansioon:
- config.txt: Asetustiedosto
- hairless.exe: Karvaton MIDI -muunnin
- drumkit.png: Kuva, joka määrittää kaikki käyttöliittymämme napsautettavat rumputyynyt (on ladattava tämän vaiheen kuvasarjasta)
- drumgui.py: Projektikoodi
Se on kaikki mitä meidän on korostettava, jotta se toimisi. On erittäin tärkeää lisätä tiedostoja projektiin: rumpusarjakuva, suoritettava tiedosto hairless.exe ja asetustiedosto config.txt.
Ja.. Tässä olemme tehneet!:)
Toivottavasti tästä opettavaisesta on sinulle hyötyä.
Kiitos lukemisesta!:)
Suositeltava:
Visualisoi Bitcoinin voitto ja tappio Arduinolla ja Pythonilla: 6 vaihetta
Visualisoi Bitcoinin voitto ja tappio Arduinolla ja Pythonilla: Perusidea Henkilökohtaisesti olen kryptovaluutta -sijoittaja. Mutta minulla on myös töitä kuormittavaa työtä. Joten en voi seurata bitcoinin hintaa kuin 10 kertaa minuutissa. Haluan kuitenkin edelleen tietää, ansaitsenko vai menetänkö rahaa. Täten
Useiden LEDien ohjaaminen Pythonilla ja Raspberry Pi: n GPIO -nastoilla: 4 vaihetta (kuvilla)
Useiden LED -valojen ohjaaminen Pythonilla ja Raspberry Pi: n GPIO -nastoilla: Tämä käyttöohje osoittaa, kuinka voit ohjata RaspberryPi -laitteesi useita GPIO -nastoja neljän LED -valon käyttämiseksi. Se myös esittelee sinulle parametrit ja ehdolliset lausekkeet Pythonissa. Aiempi ohjeemme Raspberry Pi: n GPIO -nastojen käytöstä
Osallistumisjärjestelmä lähettämällä RFID -tietoja MySQL -palvelimelle Pythonilla Arduinolla: 6 vaihetta
Osallistumisjärjestelmä lähettämällä RFID-tietoja MySQL-palvelimelle Pythonilla Arduinon kanssa: Tässä projektissa olen liittänyt RFID-RC522: n arduinoon ja sitten lähetän RFID-tietoja phpmyadmin-tietokantaan. Toisin kuin aikaisemmat projektimme, emme käytä tässä tapauksessa mitään ethernet -suojaa, tässä luemme vain sarjatietoja, jotka ovat peräisin ar
Ublox LEA 6h 02 GPS -moduuli Arduinolla ja Pythonilla: 4 vaihetta
Ublox LEA 6h 02 GPS -moduuli, jossa on Arduino ja Python: GPS -moduulin liitäntä Arduino UNO: ta (tai mitä tahansa muuta Arduino -laitetta) käyttäen ja lasketaan leveys- ja pituusaste näytettäväksi sovellusikkunassa, joka on kirjoitettu Pythonilla
QuizzPi, Raspberry Pi triviapeli Pythonilla: 7 vaihetta (kuvilla)
QuizzPi, Raspberry Pi triviapeli Pythonilla: QuizzPi on arcade -tyyppinen triviapeli. QuizzPi syntyi, koska minulla oli tarve tarjota tyttärelleni viihdettä. Hän on 7 -vuotias ja vaatii jo uuden teknologian käyttöä, ajatuksena oli luoda jotain, joka oli sekä hauskaa että opettavaista