Stap 9:
-Scannen toetsen van de afstandsbediening
-Het draaien van GPIOs aan en uit
-Lezing GPIOs ingang
-Het weergeven van scherm afbeeldingen die de belangrijke staten tonen
Dit app werkt prima zonder de hardware aangesloten, zodat u kunt zien het op het scherm reacties. Let wel, dat zonder het circuit bord aangesloten, GPC7 ergens tussen 0v en 2.5v zweeft, en kan je een occasionele "van raketten" bericht
C Langugae code voor de Lanceerinrichting van de raket van de Trakr:
/ * Dit app werd geschreven en getest met de Lanceerinrichting van de raket van het schuim van 'Striker II'.
Dit torentje lanceert drie schuim raketten, en heeft een doelgerichtheid laser.
Het torentje van originele USB interfacekaart is vervangen door een stuurprogramma dat aan boord
is verbonden met de Trakr de GPIO lijnen. Dit app zou moeten werken met bijna om het even welk
soortgelijke USB desktop missile launcher.
GPC0 = tilt up
GPC1 = tilt omlaag
GPC2 = pan links
GPC3 = rechts pan
GPC4 = brand laser
GPC5 = brand raket
GPC6 = raket afgevuurd (een cam in het afvuren mechanisme zich bezighoudt een microswitch na
Elke raket wordt afgevuurd. Dit houdt de software waarnaar wordt verwezen naar de positie van
de lancering hardware
GPC7 = reload (uit munitie)
De GO-knop fungeert als een ' functie ' hoofdlettertoets (Bedankt voor het idee, RorschachUK!).
Wanneer de GO-knop wordt gehouden, zijn de belangrijkste functies van de afstandsbediening verschoven naar 'raket control' als volgt:
Lforward = tilt up
Lback = tilt omlaag
Rforward = pan links
Rback = rechts pan
B (Ingang2) = brand laser
C (Menu) = brand raket
Merk op dat alle raket controlefuncties zijn kortstondige, met uitzondering van 'brand raket',
die begint een complete reeks aan het vuur van een enkele raket.
Speciale dank aan RorschachUK voor het verklaren van de bitmap manipulatie routines.
Ik trachten opwaarts using uitsluitend bitmaps, maar verliet de DrawText opdrachten voor
demonstratie-doeleinden
Dit app kan ook eenvoudig worden aangepast om een robot-arm * /
#include "svt.h"
#include "JAPI.h"
#define GPC0 (1 << 0) //bitmask voor pin GPC0 = 00000001
#define GPC1 (1 << 1) //bitmask voor pin GPC1 = 00000010
#define GPC2 (1 << 2) //bitmask voor pin GPC2 00000100 =
#define GPC3 (1 << 3) //bitmask voor pin GPC3 00001000 =
#define GPC4 (1 << 4) //bitmask voor pin GPC4 00010000 =
#define GPC5 (1 << 5) //bitmask voor pin GPC5 00100000 =
#define GPC6 (1 << 6) //bitmask voor pin GPC6 01000000 =
#define GPC7 (1 << 7) //bitmask voor pin GPC7 10000000 =
/ * De namen van deze variabelen worden gegenereerd door de compiler en zijn gebaseerd op
de bestandsnaam van de afbeelding wordt samengesteld. Ze gebruikt voor het berekenen van de lengte
van de BMP-afbeeldingen wanneer ze zijn geconverteerd naar gegevens arrays * /
extern char _binary_Images_bkgndimg_bmp_end [];
extern char _binary_Images_bkgndimg_bmp_start [];
extern char _binary_Images_up_bmp_end [];
extern char _binary_Images_up_bmp_start [];
extern char _binary_Images_down_bmp_end [];
extern char _binary_Images_down_bmp_start [];
extern char _binary_Images_left_bmp_end [];
extern char _binary_Images_left_bmp_start [];
extern char _binary_Images_right_bmp_end [];
extern char _binary_Images_right_bmp_start [];
extern char _binary_Images_firemissile_bmp_end [];
extern char _binary_Images_firemissile_bmp_start [];
extern char _binary_Images_firelaser_bmp_end [];
extern char _binary_Images_firelaser_bmp_start [];
extern char _binary_Images_missile_bmp_end [];
extern char _binary_Images_missile_bmp_start [];
extern char _binary_Images_fins_bmp_end [];
extern char _binary_Images_fins_bmp_start [];
extern char _binary_Images_on_bmp_end [];
extern char _binary_Images_on_bmp_start [];
extern char _binary_Images_standby_bmp_end [];
extern char _binary_Images_standby_bmp_start [];
unsigned char pinnen; definiëren van de variabele 'pinnen' voor het lezen van de GPIO ingangen
Kleur wit, groen, rood, blauw, zwart, grijs, geel; kleuren worden gebruikt voor tekst;
grepen uit het register van de afbeelding
int bkgndimg;
int
int
int links;
int recht;
int firemissile;
int firelaser;
int raket;
int de vinnen;
int
int standby staat.
BOOL bgstate; variabele voor achtergrond herschrijven staat
RGBColor - geeft als resultaat een struct kleur
Kleur RGBColor (unsigned char R unsigned char G, unsigned char B, unsigned char T) {}
Kleur ret;
Ret. R = R;
Ret. G = G;
Ret. B = B;
Ret. Transparante = T;
terugkeer ret;
}
VOID Splash() //defines een splash scherm routine
{
OpenGraphics(); Scherm kan overnemen
ClearScreen();
SetTextColor(white);
DrawText (1, 30, "Raket controle v1.3");
SetTextColor(yellow);
DrawText (15, 60, "van CPT_Hans");
Show();
Sleep(3000);
ClearScreen();
SetTextColor(green);
DrawText (20,15, "Ingedrukt");
DrawText (20,30, "de GO key to");
DrawText (20,45, "enable raket");
DrawText(20,60,"controls");
Show();
Sleep(3000);
ClearScreen();
SetTextColor(green);
DrawText (35,15, "L joystick =");
DrawText(35,30,"up/down");
DrawText (35,55, "R joystick =");
DrawText(35,70,"left/right");
Show();
Sleep(4000);
ClearScreen();
SetTextColor(green);
DrawText (35,15, "B-toets =");
DrawText (35,30, "fire laser");
DrawText (35,55, "C-toets =");
DrawText (35,70, "fire raket");
Show();
Sleep(3000);
}
VOID Start()
{
JAPI_SetIoOutputMode(GPC0+GPC1+GPC2+GPC3+GPC4+GPC5); Instellen van de uitvoermodus voor pinnen GPC0 t/m GPC5
JAPI_SetIoInputMode(GPC6+GPC7); Instellen alleen invoermodus voor PIN GPC6 en GPC7
bgstate = 1; vlag te trekken van de aanvankelijke achtergrond instellen
Registreren van de beelden - neemt een beginadres en een bepaald formaat, dat we gezien het einde berekenen adres minus het startadres
OpenImageRegister();
bkgndimg = RegisterImage (_binary_Images_bkgndimg_bmp_start, _binary_Images_bkgndimg_bmp_end - _binary_Images_bkgndimg_bmp_start);
omhoog = RegisterImage (_binary_Images_up_bmp_start, _binary_Images_up_bmp_end - _binary_Images_up_bmp_start);
omlaag = RegisterImage (_binary_Images_down_bmp_start, _binary_Images_down_bmp_end - _binary_Images_down_bmp_start);
links = RegisterImage (_binary_Images_left_bmp_start, _binary_Images_left_bmp_end - _binary_Images_left_bmp_start);
rechts = RegisterImage (_binary_Images_right_bmp_start, _binary_Images_right_bmp_end - _binary_Images_right_bmp_start);
firemissile = RegisterImage (_binary_Images_firemissile_bmp_start, _binary_Images_firemissile_bmp_end - _binary_Images_firemissile_bmp_start);
firelaser = RegisterImage (_binary_Images_firelaser_bmp_start, _binary_Images_firelaser_bmp_end - _binary_Images_firelaser_bmp_start);
raket = RegisterImage (_binary_Images_missile_bmp_start, _binary_Images_missile_bmp_end - _binary_Images_missile_bmp_start);
vinnen = RegisterImage (_binary_Images_fins_bmp_start, _binary_Images_fins_bmp_end - _binary_Images_fins_bmp_start);
ingeschakeld = RegisterImage (_binary_Images_on_bmp_start, _binary_Images_on_bmp_end - _binary_Images_on_bmp_start);
standby = RegisterImage (_binary_Images_standby_bmp_start, _binary_Images_standby_bmp_end - _binary_Images_standby_bmp_start);
CloseImageRegister();
Kleuren voor schermtekst definiëren
White=RGBColor(255,255,255,0);
Green=RGBColor(0,255,0,0);
Red=RGBColor(255,0,0,0);
Blue=RGBColor(0,0,255,0);
Black=RGBColor(0,0,0,0);
Grey=RGBColor(128,128,128,0);
Yellow=RGBColor(255,255,0,0);
Oproep splash scherm op opstarten
Splash();
Slapen (2000);
ClearScreen();
Show();
CloseGraphics(); de besturing van het vrijgeven van scherm
}
BOOL Run()
/ * De rangschikking van geneste if/else lussen hieronder lijkt misschien vreemd, maar het
zorgt voor de juiste operationele volgorde van de bijbehorende hardware.
Wijzigingen in deze structuur kunnen noodzakelijk zijn bij het gebruik van verschillende hardware. */
{
Als (GetRemoteKeyStatus (KEY_HOME)) //Check voor programma afsluit
return false;
Braziliaanse deelstaat GO toets raket controle subloop scannen
Als (GetRemoteKeyStatus(KEY_RUN)==1)
{
bgstate = 1; vlag achtergrond scherm op lus afrit vernieuwen instellen
OpenMotors(); Dit houdt de motoren nog terwijl wij pannen en kantelen van de Lanceerinrichting van de raket
OpenGraphics(); Scherm kan overnemen
ClearScreen(); Scherm wissen
SetTextColor(red);
DrawText (20, 20, "raket CTL ON"); Houd op de hoogte dat de functies van de knoppen van de afstandsbediening zijn veranderd
DrawImage(bkgndimg,0,0,black); Loting bkgndimg afbeelding
DrawImage(missile,70,80,black); Witte raket lichaam tekenen
DrawImage(fins,72,89,black); Tekenen van rode vinnen
DrawImage(on,30,20,black);
Show();
CloseGraphics(); de besturing van het vrijgeven van scherm
pinnen = JAPI_GetIoInput(); bitsgewijze vertegenwoordiging van alle 8 pinnen
Als (pinnen & GPC6)
{
JAPI_SetIoLow(GPC5);
}
Als (pinnen & GPC7)
{
OpenGraphics(); Scherm kan overnemen
DrawImage(bkgndimg,0,0,black); Loting bkgndimg afbeelding
SetTextColor(blue);
DrawText (20,80, "Out of raketten!");
Show();
CloseGraphics(); de besturing van het vrijgeven van scherm
}
Als (GetRemoteKeyStatus(KEY_INPUT2)) //Fire laser commando's
{
OpenGraphics(); Scherm kan overnemen
ClearScreen();
DrawImage(bkgndimg,0,0,black); Loting bkgndimg
DrawImage(missile,70,80,black); Witte raket lichaam tekenen
DrawImage(fins,72,89,black); Tekenen van rode vinnen
DrawImage(firelaser,110,85,black); Loting laser splash
DrawImage(on,30,20,black);
SetTextColor(red);
DrawText (5, 20, "Afvuren Laser!");
Show();
CloseGraphics(); de besturing van het vrijgeven van scherm
JAPI_SetIoHigh(GPC4); Set GPC4 pin high (3,3 v)
}
anders
{
JAPI_SetIoLow(GPC4); GPC4 pincode laag (0v) instellen
}
Als (GetRemoteKeyStatus(KEY_LEFT_FORWARD)) //Elevate torentje command sequence
{
OpenGraphics(); Scherm kan overnemen
ClearScreen();
DrawImage(bkgndimg,0,0,black); Loting bkgndimg
DrawImage(missile,70,80,black); Witte raket lichaam tekenen
DrawImage(fins,72,89,black); Tekenen van rode vinnen
DrawImage(up,75,70,black); Pijl-omhoog trekken
DrawImage(on,30,20,black);
SetTextColor(white);
DrawText (5, 35, "Verhogen raketten");
Show();
CloseGraphics(); de besturing van het vrijgeven van scherm
JAPI_SetIoHigh(GPC0); Set GPC0 pin high (3,3 v)
}
anders
{
JAPI_SetIoLow(GPC0); GPC0 pincode laag (0v) instellen
}
Als (GetRemoteKeyStatus(KEY_LEFT_BACK)) //Depress torentje command sequence
{
OpenGraphics(); Scherm kan overnemen
ClearScreen();
DrawImage(bkgndimg,0,0,black); Loting bkgndimg
DrawImage(missile,70,80,black); Witte raket lichaam tekenen
DrawImage(fins,72,89,black); Tekenen van rode vinnen
DrawImage(down,75,100,black); Pijl-omlaag trekken
DrawImage(on,30,20,black);
SetTextColor(white);
DrawText (5, 35, "Verlagen raketten");
Show();
CloseGraphics(); Scherm kan overnemen
JAPI_SetIoHigh(GPC1); Set GPC1 pin high (3,3 v)
}
anders
{
JAPI_SetIoLow(GPC1); GPC1 pincode laag (0v) instellen
}
Als (GetRemoteKeyStatus(KEY_RIGHT_FORWARD)) //Traverse torentje links commando's
{
OpenGraphics(); Scherm kan overnemen
ClearScreen();
DrawImage(bkgndimg,0,0,black); Loting bkgndimg
DrawImage(missile,70,80,black); Witte raket lichaam tekenen
DrawImage(fins,72,89,black); Tekenen van rode vinnen
DrawImage(left,60,85,black); Tekenen van pijl-links
DrawImage(on,30,20,black);
SetTextColor(white);
DrawText (5, 50, "Links draaien");
Show();
CloseGraphics(); de besturing van het vrijgeven van scherm
JAPI_SetIoHigh(GPC2); Set GPC2 pin high (3,3 v)
}
anders
{
JAPI_SetIoLow(GPC2); GPC2 pincode laag (0v) instellen
}
Als (GetRemoteKeyStatus(KEY_RIGHT_BACK)) //Traverse torentje rechts commando's
{
OpenGraphics(); Scherm kan overnemen
ClearScreen();
DrawImage(bkgndimg,0,0,black); Loting bkgndimg
DrawImage(missile,70,80,black); Witte raket lichaam tekenen
DrawImage(fins,72,89,black); Tekenen van rode vinnen
DrawImage(right,90,85,black); Tekenen van pijl-rechts
DrawImage(on,30,20,black);
SetTextColor(white);
DrawText (5, 50, "Rechts draaien");
Show();
CloseGraphics(); de besturing van het vrijgeven van scherm
JAPI_SetIoHigh(GPC3); Set GPC3 pin high (3,3 v)
}
anders
{
JAPI_SetIoLow(GPC3); GPC3 pincode laag (0v) instellen
}
Als (GetRemoteKeyStatus(KEY_MENU)) //Missile afvuren van volgorde
{
OpenGraphics(); Scherm kan overnemen
ClearScreen();
DrawImage(bkgndimg,0,0,black); Loting bkgndimg
DrawImage(missile,70,80,black); Witte raket lichaam tekenen
DrawImage(fins,72,89,black); Tekenen van rode vinnen
DrawImage(firemissile,60,96,black); Loting raket uitlaat
DrawImage(on,30,20,black);
SetTextColor(red);
DrawText (5, 65, "Firing Raket!");
Show();
CloseGraphics(); de besturing van het vrijgeven van scherm
JAPI_SetIoHigh(GPC5); Set GPC5 pin high (3,3 v)
/ * Is het noodzakelijk hier te onderbreken, te laten van de launcher nokkenas
draaien van de microswitch; een mechanische beperking
van de hardware * /
Sleep(1500);
}
}
anders
{
pinnen = JAPI_GetIoInput(); bitsgewijze vertegenwoordiging van alle 8 pinnen
Als (pinnen & GPC6) //Check voor de positie van camsshaft
{
JAPI_SetIoLow(GPC5); Uitschakelen van signaal te vuren raket motor
}
Als (bgstate == 1) //check om te zien als achtergrond herschrijven vereist is
{
CloseMotors();
OpenGraphics(); Scherm kan overnemen
ClearScreen();
SetTextColor(green);
DrawText (20, 20, "raket CTL OFF"); Houd op de hoogte dat de functies van de knoppen van de afstandsbediening normaal zijn
DrawImage(bkgndimg,0,0,black); Loting bkgndimg afbeelding
DrawImage(standby,25,20,black);
Show();
CloseGraphics(); de besturing van het vrijgeven van scherm
bgstate = 0; instellen van vlag, zodat de achtergrond hoeft niet te worden getekend
}
}
{
Sleep(200); / / wait voor 200ms
}
return true;
}
VOID End()
{
CloseMotors()
CloseGraphics()
}
Hier zijn een aantal extra middelen die kan handig zijn bij het hacken van de Spy Video Trakr:
Spy Video Trakr Wiki
http://www.trakrhakr.com/wiki/index.php?title=Main_Page
Officiële Spy Video Trakr forums:
http://www.spygear.net/forum/viewforum.php?f=18
Plezier met Snap Circuits Hacks:
http://funwithsnapcircuits.WordPress.com/2011/03/17/and-now-for-something-completely-different/
Ongehoorzaam Tiger hacks:
http://disobedienttiger.blogspot.com/search/label/Spy%20Trakr
Hack een dag eerste Hack:
http://hackaday.com/2010/09/02/Spy-Video-trakr-software-and-First-Hack/
FCC REFERENTIE (EXTERNE AFBEELDINGEN, SCHAKELSCHEMA 'S, INTERNE FOTO 'S):
FCC referentie voor Trakr remote:
HTTPS://FJALLFOSS.FCC.GOV/OETCF/EAS/REPORTS/VIEWEXHIBITREPORT.CFM?MODE=EXHIBITS&REQUESTTIMEOUT=500&CALLEDFROMFRAME=N&APPLICATION_ID=545152&FCC_ID= 'N3ESPYVIDEOTRAKR1'
FCC referentie voor Trakr:
HTTPS://FJALLFOSS.FCC.GOV/OETCF/EAS/REPORTS/VIEWEXHIBITREPORT.CFM?MODE=EXHIBITS&REQUESTTIMEOUT=500&CALLEDFROMFRAME=N&APPLICATION_ID=884190&FCC_ID= 'N3ESPYVIDEOTRAKR2'
ANDERE REFERENTIEMATERIAAL:
Ontwerphandleiding voor W55VA91:
http://docs.Google.com/viewer?URL=http%3a%2F%2Fdl.Dropbox.com%2Fu%2F4295670%2FW55VA91_DesignGuide%2528fullset%2529%2520-%2520A4.PDF
nRF24L01 (Radio Transceiver Chip):
http://www.nordicsemi.com/eng/Products/2.4GHz-RF/nRF24L01
ARM926EJ-S Technical Reference Manual:
http://InfoCenter.arm.com/Help/index.jsp?topic=/com.arm.doc.ddi0198e/index.html
W9864G6IH 8 MB SDRAM-geheugen:
http://www.Winbond.com/HQ/enu/ProductAndSales/ProductLines/SpecialtyDRAM/SDRAM/W9864G6IH.htm
HARDWARESPECIFICATIES:
Twee wapen 9-processors (Nuvoton W55VA91: ARM926EJ kern met @ 192 MHz, en hardware-bijgewoonde JPEG codec)
8 MB RAM-geheugen aan boord – voor geavanceerde, geheugenintensieve, door de gebruiker gegenereerde apps (geprogrammeerd in C).
SD-kaartsleuf – voor verwisselbare, hoge capaciteit opslag voor het programma, video, audio en beeld.
Toegankelijke USB gastheerhaven-voor aansluiting van USB-apparaten.
USB device poort – voor het aansluiten op een computer voor herprogrammering en communicatie.
Omni visie VGA camera – potentiële beeldsnelheid van 30 frames per seconde (de TRAKR is ingesteld voor 15 fps). (Hiermee kunt programmeren voor real-time beeldverwerking.)
Nordic 2.4 GHz radio – voor draadloze communicatie van de spaarstand.
Dual, hoge huidige (2A) H-bruggen met Stroomsensoren-geavanceerde motor controle mogelijk maakt.
QVGA-scherm & spreker op afstandsbediening met 5 knoppen en 2 joysticks – potentiële aan voor verschillende taken worden toegewezen.
Audio blok met polyfone synthesizer-bevat ondersteuning voor spraaksynthese.
Operating systeem: Lunix OS
IR LED brandt door over te schakelen op een SS8050 transistor.
FLITS/SPI/USB Boot
BLOEDEN EDGE TRAKR HACKEN:
http://www.trakrhakr.com/wiki/index.php?title=Bootstrapping