Schietspel

Arduino specifieke Software
Berichten: 55
Geregistreerd: 20 Feb 2014, 11:37

Schietspel

Berichtdoor Dennis485 » 03 Mrt 2014, 13:00

Ik ben bezig om een programma te schrijven waarmee ik een schietspel kan maken.
het idee is dat je met twee mensen kunt spelen speler 1 heeft een X aantal schoten ter beschikking als deze op zijn dan blijft zijn eind score op de display staan vervolgens kan speler 2 het zelfde aantal keer schieten als speler 1 en als speler 2 door zijn schoten is kan via input 5 de display terug gezet worden naar 0000 en kan er opnieuw geschoten worden.

Nu wil ik graag via drie verschillende inputs "tellen"

als input 1 hoog word dan komt er 5 bij de display
als input 2 hoog word dan komt er 10 bij de display
als input 3 hoog word dan komt er 15 bij de display
als input 4 hoog is telt de counter voor speler 2 is input 4 laag telt de counter voor speler 1
als input 5 hoog word reset dan beide spelers

ik heb een 4 segment display die ik in tweeën wil delen (2 segmenten voor speler 1 en 2 voor speler 2)

Deze is aan te sturen met 7 pennen en 4 grounds

Wie o wie wilt mij hier mee helpen??:)

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Schietspel

Berichtdoor nicoverduin » 03 Mrt 2014, 13:33

Hoe komen die ingangen binnen? knoppen? en zo ja, maak je het jezelf gemakkelijker door ze juist LAAG te maken (scheelt weer een paar weerstanden)
Wat doe je als iemand per ongeluk de verkeerde knop indrukt?
Wat verwacht je van hulp? Ik denk dat er zat zullen zijn die (in het kader van educatie :)) je best willen helpen. De vraag is wat jij er zelf aan gaat doen? M.a.w. kom maar op met jouw source code? En waar zitten de knelpunten?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 55
Geregistreerd: 20 Feb 2014, 11:37

Re: Schietspel

Berichtdoor Dennis485 » 03 Mrt 2014, 14:53

Dag Nico,
Dank voor je reactie.

Hieronder heb ik een filmpje dat ik een poosje terug heb gefilmd (inmiddels zitten alle Infrarood ontvangers erin)
Filmpje:
https://www.dropbox.com/sc/kw9ydm9y41ro6li/4RpTz9vOza
Zoals je ziet gaan de groene led's knipperen op het moment dat er op de IR geschoten word ( in het filmpje gebruiken we nog een zaklamp) dit signaal komt op onderstaande print binnen:
Foto print:
Afbeelding

Hier zitten twee 555IC's op die er voor zorgen dat de puls die binnenkomt 1 sec hoog blijft en tijdens die 1 sec zorgt de tweede 555 ervoor dat er geknipperd word. Nu wil ik het signaal dat 1 sec hoog is de arduino in stoppen (na de 1 sec word deze laag en pas weer hoog als hij geschoten word) van deze printjes heb ik er 3 gemaakt voor elke circel 1 dus het is de bedoeling dat er drie verschillende inputs op de arduino komen om de score te ontvangen. hoe ik dit moet doen in combinatie het juiste getal op de display's te krijgen (zowel van speler 1 als speler 2) heb ik niet echt een idee hoe ik dit moet aanpakken

Dit display heb ik:
http://nl.farnell.com/avago-technologies/hdsp-b03e/led-display-4-digit-red-cc/dp/1003345?Ntt=1003345

Graag zie ik je reactie tegemoet!!:)

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Schietspel

Berichtdoor nicoverduin » 03 Mrt 2014, 18:37

Hier heb je een voorbeeld (lijkt me wat complex) voor multiplexing.
Maar het zou kunnen:
- Je hebt 5 input pinnen
- je hebt 4 7seg displays = (4 + 7) = 11 pinnen (4 voor elk cijfer)
Ik zou zelf:
- Gewoon een tabel maken voor de vertaling cijfer naar 7Segmenten
- Een eindeloze loop die constant de 4 cijfers displayed
- de 3 pinnen die dienen voor de printjes op een pinChangeInterrupt zetten

Dan heb je in de loop() dat je eigenlijk alleen maar het displayen van de 4 cijfers.
En zodra er een interrupt komt van een van de drie printen wordt er gekeken welke en wordt de teller opgehoogd.

Meest eenvoudige oplossing zonder extra elektronica zoals in het filmpje.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 55
Geregistreerd: 20 Feb 2014, 11:37

Re: Schietspel

Berichtdoor Dennis485 » 04 Mrt 2014, 09:23

Klinkt goed Nico,
Alleen dan de daad werkelijke code, hoe krijg ik de variabele die op de 3 interrupt ingangen komen opgeteld bij het display??

van de mega zijn ingang 2,3,20 en 21 naar mijn idee geschikt om te gebruiken?

Het printje gebruiken we om de led's te laten knipperen zoals in het filmpje te zien is!

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Schietspel

Berichtdoor nicoverduin » 04 Mrt 2014, 09:35

Je maakt het jezelf een stuk gemakkelijker om pinChange interrupts op 1 poort te zetten dus PORTD oid (dit is terug te vinden via de Arduino pin Maps afhankelijk van de processor.
Wat je moet doen:
- is een routine maken die automatisch start bij pinChange op een bepaalde PORT(google maar op pinchange interrupt)
- in die routine lees je de individuele pinnen waar die pulse binnenkomt en tel je afhankelijk van de speler1/speler2 switch de juiste waarde op
- gebruik CHANGE bij het opzetten van die ISR (interrupt service routine) dan pak je hem altijd op de flank.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 55
Geregistreerd: 20 Feb 2014, 11:37

Re: Schietspel

Berichtdoor Dennis485 » 04 Mrt 2014, 10:33

Dus als ik het goed begrijp bedoel je dat ik 3 interrupts poorten moet gebruiken? (voor iedere ring 3stuks 1 interrupt)
de pinChange ben ik bekend mee! Zodra de ingang verandert voert ie zijn actie uit.
maar hoe zorg ik ervoor dat zodra interrupt 1 verandert (van laag naar hoog) dat er een getal geschreven word na de display's??

Berichten: 55
Geregistreerd: 20 Feb 2014, 11:37

Re: Schietspel

Berichtdoor Dennis485 » 04 Mrt 2014, 11:37

Ik heb nu het volgende:
Code: Alles selecteren
int n = 0;    // n = Aantal interrupts die geteld worden   

void setup()
   {   
   Serial.begin(9600);    // start serial communication   
   pinMode(2, INPUT);    // maak van pin 2 een input pin     


   attachInterrupt(0, myRoutine, FALLING);
   }   

void loop()
   {   
   Serial.println(n);      // print de huidige waarde van n   
   delay(200);
   }   

void myRoutine()
   {   
   n++;                    // tel deze interrupt
   }


Kun je mij verder helpen hoe ik de koppeling maak naar het 4 7 segment display?

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Schietspel

Berichtdoor nicoverduin » 04 Mrt 2014, 12:11

Je hebt een pinchange interrupt nodig. Dit is de standaard interrupt en reageert alleen op de hardware interrupt pin 2.
Deze is complexer maar uiteindelijke wel eenvoudiger te programmeren : http://playground.arduino.cc/Main/PinCh ... xWkHIWGn8c
Als je even googled vind je zat voorbeelden voor het aansturen van 7 segment displays met multiplexing.
Je moet de volgende stappen doen:
Code: Alles selecteren
//
// in te ISR doe je de volgende stappen als er een waarde veranderd
//
    zet de tellers om in een string (zie sprintf functie). Elk apart
    daarna voeg je ze samen tot een string van 4 characters  (+ een \0)


in de loop()

Code: Alles selecteren
loop(){
     voor elk cijfer
         zet de kathode van het cijfer HOOG
         zoek de segment waardes op in een tabel (die vertaald het cijfer naar 7 segmenten)
         schijf de waardes naar de segmenten
         zet de kathode van het cijfer LAAG
     volgend cijfer
}


Ik ga het niet voor je uitschrijven. Daar is het forum niet voor. Dan moet je een programmeur inhuren :) Ik heb er nu zat gehad die met fantastische PMén komen en waarbij het vervolgens heel stil wordt als je hebt opgeleverd.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 55
Geregistreerd: 20 Feb 2014, 11:37

Re: Schietspel

Berichtdoor Dennis485 » 04 Mrt 2014, 12:53

Dank voor je code opbouw, zou je misschien het stukje kunnen schrijven wat er voor zorgt dat de input een waarde krijgt en dat vertoont wordt op de display?

Ik zou namelijk echt werkgelijkwaar geen idee hebben hoe ik dat moet doen.

Volgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Majestic-12 [Bot], ofwozap en 15 gasten