Paso 9:
-Exploración de las teclas del control remoto
-Encendiendo y apagando GPIOs
-Entrada lectura de GPIOs
-Visualización de gráficos de la pantalla que representan los Estados claves
Esta aplicación funcionará bien sin el hardware conectado, para que puedas ver la pantalla las respuestas. Ten en cuenta, que sin la tarjeta de circuitos conectada, GPC7 flota en algún lugar entre 0v y 2.5v, y obtendrá un mensaje de ocasionales "de misiles"
Código de lenguaje C de Trakr lanzamisiles:
/ * Esta aplicación fue escrita y probada con el lanzador de misil de espuma 'Striker II'.
Esta Torreta lanza tres misiles de espuma y tiene un láser apuntado.
Tablero original del interfaz del USB de la torreta se sustituye por un conductor del tablero que
conectado a líneas GPIO de Trakr. Esta aplicación debería funcionar con cualquier
similar escritorio lanzamisiles.
GPC0 = inclinación hacia arriba
GPC1 = inclinación hacia abajo
GPC2 = pan izquierda
GPC3 = pan derecha
GPC4 = fuego láser
GPC5 = misil de fuego
GPC6 = misil (una leva en el mecanismo de disparo activa un microinterruptor después
cada misil es disparado. Esto evita que el software que se hace referencia a la posición de
el hardware del lanzamiento
GPC7 = reload (fuera de la munición)
El botón GO sirve de tecla de 'shift la función' (gracias por la idea, RorschachUK!).
Cuando se mantiene el botón ir, funciones de las teclas del control remoto se cambian de puesto a 'control de misiles' como sigue:
Lforward = inclinación hacia arriba
Lback = inclinación hacia abajo
Rforward = bandeja izquierda
RVolver = pan derecha
B (entrada2) = fuego láser
C (menú) = misil de fuego
Tenga en cuenta que todas las funciones de control de misiles son momentáneas, excepto 'misil de fuego',
que inicia una secuencia completa para disparar un solo misil.
Agradecimiento especial a RorschachUK para explicar las rutinas de manipulación de mapa de bits.
Terminé usando mapas de bits exclusivamente, pero los comandos de DrawText para la izquierda
efectos de demostración
Esta aplicación también podría modificarse fácilmente para controlar un brazo robot * /
#include "svt.h"
#include "JAPI.h"
#define GPC0 (1 << 0) //bitmask PIN GPC0 = 00000001
#define GPC1 (1 << 1) //bitmask PIN GPC1 = 00000010
#define GPC2 (1 << 2) //bitmask PIN GPC2 = 00000100
#define GPC3 (1 << 3) //bitmask PIN GPC3 = 00001000
#define GPC4 (1 << 4) //bitmask PIN GPC4 = 00010000
#define GPC5 (1 << 5) //bitmask PIN GPC5 = 00100000
#define GPC6 (1 << 6) //bitmask PIN GPC6 = 01000000
#define GPC7 (1 << 7) //bitmask PIN GPC7 = 10000000
/ * Los nombres de estas variables son generados por el compilador y se basan en
el nombre del archivo de la imagen se compila. Se utilizan para calcular la longitud
de las imágenes .bmp son convertidos a datos matrices * /
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 [];
pernos de unsigned char; definir la variable 'pins' para leer entradas GPIO
Color blanco, verde, rojo, azul, negro, gris, amarillo; colores a utilizar para el texto;
maneja el registro de imagen
int bkgndimg;
int
int
int izquierda;
int derecha;
int firemissile;
int firelaser;
misil del int;
aletas int;
int a;
int espera;
bool bgstate; variable de estado de repintado de fondo
RGBColor - devuelve una estructura de color
Color {RGBColor (unsigned char R G de unsigned char, unsigned char B, unsigned char T)
Color ret;
Ret. R = R;
Ret. G = G;
Ret. B = B;
Ret. Transparente = T;
Return ret;
}
anular //defines Splash() una rutina de pantalla splash
{
OpenGraphics(); Tomar el control de pantalla
ClearScreen();
SetTextColor(white);
DrawText (1, 30, "Misil Control v1.3");
SetTextColor(yellow);
DrawText (15, 60, "por CPT_Hans");
Show();
Sleep(3000);
ClearScreen();
SetTextColor(green);
DrawText (20,15, "Pulse y mantenga pulsado");
DrawText (20.30, "la clave de ir a");
DrawText (20,45, "activar misiles");
DrawText(20,60,"controls");
Show();
Sleep(3000);
ClearScreen();
SetTextColor(green);
DrawText (35,15, "joystick L =");
DrawText(35,30,"up/down");
DrawText (35,55, "joystick R =");
DrawText(35,70,"left/right");
Show();
Sleep(4000);
ClearScreen();
SetTextColor(green);
DrawText (35,15, "clave de B =");
DrawText (35,30, laser del fuego del"");
DrawText (35,55, "tecla C =");
DrawText (35,70, misil de fuego del"");
Show();
Sleep(3000);
}
void Start()
{
JAPI_SetIoOutputMode(GPC0+GPC1+GPC2+GPC3+GPC4+GPC5); Establece modo de salida para pernos de GPC0 a través del GPC5
JAPI_SetIoInputMode(GPC6+GPC7); Modo de ajuste de única entrado para clavijas GPC6 y GPC7
bgstate = 1; establecido para dibujar fondo inicial
Registro de las imágenes - toma una dirección de inicio y un tamaño, que se calcula teniendo en cuenta el extremo dirección menos la dirección de inicio
OpenImageRegister();
bkgndimg = RegisterImage (_binary_Images_bkgndimg_bmp_start, _binary_Images_bkgndimg_bmp_end - _binary_Images_bkgndimg_bmp_start);
arriba = RegisterImage (_binary_Images_up_bmp_start, _binary_Images_up_bmp_end - _binary_Images_up_bmp_start);
abajo = RegisterImage (_binary_Images_down_bmp_start, _binary_Images_down_bmp_end - _binary_Images_down_bmp_start);
izquierda = RegisterImage (_binary_Images_left_bmp_start, _binary_Images_left_bmp_end - _binary_Images_left_bmp_start);
derecha = 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);
misiles = RegisterImage (_binary_Images_missile_bmp_start, _binary_Images_missile_bmp_end - _binary_Images_missile_bmp_start);
las aletas = RegisterImage (_binary_Images_fins_bmp_start, _binary_Images_fins_bmp_end - _binary_Images_fins_bmp_start);
on = RegisterImage (_binary_Images_on_bmp_start, _binary_Images_on_bmp_end - _binary_Images_on_bmp_start);
espera = RegisterImage (_binary_Images_standby_bmp_start, _binary_Images_standby_bmp_end - _binary_Images_standby_bmp_start);
CloseImageRegister();
Definir colores para texto en pantalla
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);
Llamada pantalla de bienvenida en el arranque inicial
Splash();
Dormir (2000);
ClearScreen();
Show();
CloseGraphics(); control de Release de pantalla
}
bool Run()
/ * El arreglo de anidado if/else bucles abajo puede parecer extraño, pero
asegura la correcta secuencia operacional del hardware asociado.
Cambios en esta estructura pueden ser necesarios al usar hardware diferente. */
{
Si (GetRemoteKeyStatus (KEY_HOME)) //Check programa salida
devuelven el valor false;
Analizar el estado de la tecla GO para entrar subloop de control de misiles
Si (GetRemoteKeyStatus(KEY_RUN)==1)
{
bgstate = 1; establecido para volver a dibujar la pantalla de fondo al salir del bucle
OpenMotors(); Esto mantiene los motores todavía mientras que pan y tilt del lanzador de misiles
OpenGraphics(); Tomar el control de pantalla
ClearScreen(); Borrar pantalla
SetTextColor(red);
DrawText (20, 20, "misiles CTL en"); Notifique que han cambiado las funciones de botón del control remoto
DrawImage(bkgndimg,0,0,black); Dibujar imagen de bkgndimg
DrawImage(missile,70,80,black); Dibujar cuerpo de misil blanco
DrawImage(fins,72,89,black); Dibujar las aletas rojas
DrawImage(on,30,20,black);
Show();
CloseGraphics(); control de Release de pantalla
pernos = JAPI_GetIoInput(); representación bit a bit de los 8 terminales
Si (pins & GPC6)
{
JAPI_SetIoLow(GPC5);
}
Si (pins & GPC7)
{
OpenGraphics(); Tomar el control de pantalla
DrawImage(bkgndimg,0,0,black); Dibujar imagen de bkgndimg
SetTextColor(blue);
DrawText (20,80 "De misiles!");
Show();
CloseGraphics(); control de Release de pantalla
}
Si (GetRemoteKeyStatus(KEY_INPUT2)) //Fire láser de secuencia de comandos
{
OpenGraphics(); Tomar el control de pantalla
ClearScreen();
DrawImage(bkgndimg,0,0,black); Sorteo bkgndimg
DrawImage(missile,70,80,black); Dibujar cuerpo de misil blanco
DrawImage(fins,72,89,black); Dibujar las aletas rojas
DrawImage(firelaser,110,85,black); Sorteo láser splash
DrawImage(on,30,20,black);
SetTextColor(red);
DrawText (5, 20, "Disparo láser!");
Show();
CloseGraphics(); control de Release de pantalla
JAPI_SetIoHigh(GPC4); Configurar pin de GPC4 alta (3,3 v)
}
otra cosa
{
JAPI_SetIoLow(GPC4); Configurar pin de GPC4 bajo (0v)
}
Si (GetRemoteKeyStatus(KEY_LEFT_FORWARD)) //Elevate torreta comando secuencia
{
OpenGraphics(); Tomar el control de pantalla
ClearScreen();
DrawImage(bkgndimg,0,0,black); Sorteo bkgndimg
DrawImage(missile,70,80,black); Dibujar cuerpo de misil blanco
DrawImage(fins,72,89,black); Dibujar las aletas rojas
DrawImage(up,75,70,black); Elaboración de flecha
DrawImage(on,30,20,black);
SetTextColor(white);
DrawText (5, 35, "Misiles de elevar");
Show();
CloseGraphics(); control de Release de pantalla
JAPI_SetIoHigh(GPC0); Configurar pin de GPC0 alta (3,3 v)
}
otra cosa
{
JAPI_SetIoLow(GPC0); Configurar pin de GPC0 bajo (0v)
}
Si (GetRemoteKeyStatus(KEY_LEFT_BACK)) //Depress torreta comando secuencia
{
OpenGraphics(); Tomar el control de pantalla
ClearScreen();
DrawImage(bkgndimg,0,0,black); Sorteo bkgndimg
DrawImage(missile,70,80,black); Dibujar cuerpo de misil blanco
DrawImage(fins,72,89,black); Dibujar las aletas rojas
DrawImage(down,75,100,black); Llamar la flecha hacia abajo
DrawImage(on,30,20,black);
SetTextColor(white);
DrawText (5, 35, "Reducción de misiles");
Show();
CloseGraphics(); Tomar el control de pantalla
JAPI_SetIoHigh(GPC1); Configurar pin de GPC1 alta (3,3 v)
}
otra cosa
{
JAPI_SetIoLow(GPC1); Configurar pin de GPC1 bajo (0v)
}
Si (GetRemoteKeyStatus(KEY_RIGHT_FORWARD)) //Traverse torreta izquierda secuencia de comandos
{
OpenGraphics(); Tomar el control de pantalla
ClearScreen();
DrawImage(bkgndimg,0,0,black); Sorteo bkgndimg
DrawImage(missile,70,80,black); Dibujar cuerpo de misil blanco
DrawImage(fins,72,89,black); Dibujar las aletas rojas
DrawImage(left,60,85,black); Dibujar la flecha izquierda
DrawImage(on,30,20,black);
SetTextColor(white);
DrawText (5, 50, "Rotación izquierda");
Show();
CloseGraphics(); control de Release de pantalla
JAPI_SetIoHigh(GPC2); Configurar pin GPC2 alta (3,3 v)
}
otra cosa
{
JAPI_SetIoLow(GPC2); Configurar pin GPC2 bajo (0v)
}
Si (GetRemoteKeyStatus(KEY_RIGHT_BACK)) //Traverse torreta derecha de secuencia de comandos
{
OpenGraphics(); Tomar el control de pantalla
ClearScreen();
DrawImage(bkgndimg,0,0,black); Sorteo bkgndimg
DrawImage(missile,70,80,black); Dibujar cuerpo de misil blanco
DrawImage(fins,72,89,black); Dibujar las aletas rojas
DrawImage(right,90,85,black); Dibujar la flecha derecha
DrawImage(on,30,20,black);
SetTextColor(white);
DrawText (5, 50, "Girar derecha");
Show();
CloseGraphics(); control de Release de pantalla
JAPI_SetIoHigh(GPC3); Configurar pin de GPC3 alta (3,3 v)
}
otra cosa
{
JAPI_SetIoLow(GPC3); Configurar pin de GPC3 bajo (0v)
}
Si (GetRemoteKeyStatus(KEY_MENU)) //Missile secuencia de la leña
{
OpenGraphics(); Tomar el control de pantalla
ClearScreen();
DrawImage(bkgndimg,0,0,black); Sorteo bkgndimg
DrawImage(missile,70,80,black); Dibujar cuerpo de misil blanco
DrawImage(fins,72,89,black); Dibujar las aletas rojas
DrawImage(firemissile,60,96,black); Sorteo misil escape
DrawImage(on,30,20,black);
SetTextColor(red);
DrawText (5, 65, "Disparar misiles!");
Show();
CloseGraphics(); control de Release de pantalla
JAPI_SetIoHigh(GPC5); Configurar pin GPC5 alta (3,3 v)
/ * Es necesario hacer una pausa aquí, dejar que el árbol de levas del lanzador
Gire el microinterruptor; una limitación mecánica
del hardware * /
Sleep(1500);
}
}
otra cosa
{
pernos = JAPI_GetIoInput(); representación bit a bit de los 8 terminales
Si (pins & GPC6) //Check para puesto de camsshaft
{
JAPI_SetIoLow(GPC5); Desactivar señal de motor de misil de fuego
}
Si (bgstate == 1) //check para ver si es necesaria la renegociación de fondo
{
CloseMotors();
OpenGraphics(); Tomar el control de pantalla
ClearScreen();
SetTextColor(green);
DrawText (20, 20, "misiles CTL apagado"); Notificar que las funciones de los botones del control remoto son normales
DrawImage(bkgndimg,0,0,black); Dibujar imagen de bkgndimg
DrawImage(standby,25,20,black);
Show();
CloseGraphics(); control de Release de pantalla
bgstate = 0; restablecer la bandera para que el fondo no es necesario volver a dibujar
}
}
{
Sleep(200); / / esperar a 200ms
}
verdaderas;
}
End() vacío
{
CloseMotors()
CloseGraphics()
}
Aquí están algunos recursos adicionales que puede encontrar útiles cuando el Spy Video Trakr de hacking:
Spy Video Trakr Wiki
http://www.trakrhakr.com/wiki/index.php?title=Main_Page
Foros oficiales de Spy Video Trakr:
http://www.spygear.net/Forum/viewforum.php?f=18
Diversión con circuitos rápidos Hacks:
http://funwithsnapcircuits.wordpress.com/2011/03/17/and-Now-for-Something-Completely-different/
Tigre desobediente hacks:
http://disobedienttiger.blogspot.com/search/label/Spy%20Trakr
Hack un Hack de primer día:
http://HackADay.com/2010/09/02/Spy-video-trakr-Software-and-First-hack/
REFERENCIA DE LA FCC (ESQUEMAS, CUADROS EXTERNOS, CUADROS INTERNOS):
Referencia de la FCC para Trakr remoto:
HTTPS://FJALLFOSS.FCC.GOV/OETCF/EAS/REPORTS/VIEWEXHIBITREPORT.CFM?MODE=EXHIBITS&REQUESTTIMEOUT=500&CALLEDFROMFRAME=N&APPLICATION_ID=545152&FCC_ID= 'N3ESPYVIDEOTRAKR1'
Referencia de la FCC para Trakr:
HTTPS://FJALLFOSS.FCC.GOV/OETCF/EAS/REPORTS/VIEWEXHIBITREPORT.CFM?MODE=EXHIBITS&REQUESTTIMEOUT=500&CALLEDFROMFRAME=N&APPLICATION_ID=884190&FCC_ID= 'N3ESPYVIDEOTRAKR2'
OTRO MATERIAL DE REFERENCIA:
Guía de diseño de W55VA91:
http://docs.Google.com/Viewer?URL=http%3A%2F%2Fdl.Dropbox.com%2Fu%2F4295670%2FW55VA91_DesignGuide%2528fullset%2529%2520-%2520A4.pdf
nRF24L01 (viruta del transmisor-receptor de Radio):
http://www.nordicsemi.com/eng/products/2.4GHz-RF/nRF24L01
Manual de referencia técnica de ARM926EJ-S:
http://Infocenter.ARM.com/help/index.jsp?topic=/com.ARM.doc.ddi0198e/index.html
W9864G6IH 8 MB SDRAM:
http://www.Winbond.com/HQ/ENU/ProductAndSales/ProductLines/SpecialtyDRAM/SDRAM/W9864G6IH.htm
ESPECIFICACIONES DE HARDWARE:
Dos procesadores ARM 9 (Nuvoton W55VA91: base ARM926EJ ejecuta @ 192 MHz y asistida por hardware JPEG codec)
8 MB de RAM a bordo – para aplicaciones sofisticadas, memoria-intensiva, generado por el usuario (programado en C).
Ranura para tarjeta SD, almacenamiento extraíble de alta capacidad de programa, video, audio e imagen.
Acceso puerto host USB, para conexión de dispositivos USB.
Puerto de dispositivo USB-para conectar a un ordenador y comunicación.
Cámara VGA de visión Omni – potencial velocidad de 30 fotogramas por segundo (el TRAKR es configurada para fps 15). (Permite programación para procesamiento de imágenes en tiempo real.)
Nordic 2.4 GHz radio – para la comunicación inalámbrica de baja potencia.
Dual, de alto corriente (2A) H-puentes con los sensores de corriente – permite control avanzado de motor.
QVGA pantalla y altavoz mando a distancia con 5 botones y palancas de 2 mando – potencial para ser reasignados para diferentes tareas.
Bloque de audio con sintetizador polifónico – incluye soporte para síntesis de voz.
Operación sistema: Lunix OS
IR LED se ilumina por la conmutación de un transistor SS8050.
SPI/FLASH/USB de arranque
BORDE DE SANGRÍA TRAKR HACKING:
http://www.trakrhakr.com/wiki/index.php?title=bootstrapping