Repository
Jelle,
Ik heb even in die repositories gekeken, maar kon er zo gauw geen wijs uit worden. Het lijkt of je de volledige Arduino libraries, inclusief examples, gepost hebt.
Ik wilde erin kijken om te zien wat je architectuur is. Ik heb er zelf even over nagedacht, en zou het alsvolgt opzetten (als het in een kleine micro moest als een AVR of een PIC).
Ik zou software architectuur laten bestaan uit een main, en een enkel interrupt level. Het hart zou een vrijlopende 16bit timer kunnen zijn op 1uSec tik.
De main zou een lus hebben van 20mSec, die lus wordt ieder keer gestart bij een puls van de throttle van de RC receiver. Hij meet in (max 2 mSec) de puls van de throttle, en meteen daarna (de volgende 2 msec) stuurt hij de throttle puls uit op throttle out. Je kunt dit gelijktijdig doen, maar dat hoeft niet (end de code is makkelijker als je wilt gaan stotteren). De overige 16msec worden gebruikt voor het vuren. Dit 16msec block start afwisselend 2 stukjes code. In het even tijdslot decodeer je de VUUR PWM ingang (gas zit op 3 of 1 (Futaba/Graupner)) en VUUR op 5,6,7,8 dus dit past netjes in de timing). Het oneven tijdslot gebruik je voor het uitsturen van een IR code naar de IR LED als je vuurt. Je kunt dat niet doen in een RC5 frame (duurt 25mSec) maar dan neem je b.v. een 4PPM protocol van 10 bits. Dat past wel. Of je verzint zelf wat met een mark-space van 1mSec : 1.5mSec verhouding. Zorg dat de IR burst minimaal 400uSec is anders hebben IR oogjes er problemen mee. Dit IR protocol gebruik je ook voor alle communicatie (zie beneden).
Dit geeft een maximale vuur snelheid van 1 schot per 40mSec, ofwel 25 schoten per seconde. Minder kan natuurlijk altijd. Dan sla je wat tijdsloten over.
De interrupt routine loopt hier onafhankelijk van, en decodeert de IR ontvanger. Belangrijk is dat de IR routine op flank triggering werkt, en vergelijkt de codes met een vrijlopende timer. Iedere onafhankelijke interrupt moet kort zijn om de timing van de main niet te veel te beinvloeden.
Dit zou moeten kunnen werken op de traagste micro'tjes (8 pins 4MHz PIC12F509).
Elke HIT zou opgeslagen worden in EEPROM, als adres van de aanvaller. Zo zou een lijst onstaan van hits. Aanvallers zouden een nummer hebben van b.v. 0-29 (in geval 5 bits adres). De overige 5 bits kunnen gebruikt worden voor checksum en wapen keuze (rakket, kanon, mitrailleur, pistool).
Het uitlezen zou ik doen via de bestaande IR LED en IR oogje. Ik zou een adres reserveren (b.v. adres 31), en bij het ontvangen van die code gaat de software (in dezelfde lus als boven) achtereenvolgens alle nummers uitspugen die in EEPROM zijn opgenomen. Een IR oogje aan een PC kan deze lijst verwerken (met b.v. Winlirc). Tenslotte stuurt de PC een andere gereserveerde code (b.v. adres 30), en die code wist het EEPROM weer.
Ik weet niet of dit in de richting komt van wat je aan het doen bent, maar dat hoor ik graag.