Hacking Spy Video Trakr (21 / 22 steg)
Steg 21: Använda GPIO stiften till blixt lampor (lysdioder)
Du kan se hur det var lödda i den övre vänstra delen av bilden. När du springa den trakrmotorcontrol app och ingen knapp trycks, ingenting lyser upp. När du trycker på knappen A, tänds den gröna lysdioden; När B-knappen trycks, tänds den röda lysdioden.
C språk kod:
////////////////////////////////////////////
LED blixt program för Spy Video TRAKR
Programmet söker igenom för att se om knappen A var
pressade på TRAKR remote och uppsättningar GPC0 hög
och GPC1 låg att skicka ström genom LED
i bias riktning framåt (påslagen).
//
Om B-knappen trycks, ställer GPC0 låg
och GPC1 hög att skicka ström genom
LED i omvänd riktning (avstängd).
///////////////////////////////////////////
#include "svt.h" //include officiella API
#include "JAPI.h" //include "Hemliga sås" API
#define GPC0 (1 << 0) //bitmask för pin GPC0 = 00000001
#define GPC1 (1 << 1) //bitmask för pin GPC1 = 00000010
#define GPC2 (1 << 2) //bitmask för pin GPC2 = 00000100
#define GPC3 (1 << 3) //bitmask för pin GPC3 = 00001000
#define GPC4 (1 << 4) //bitmask för pin GPC4 = 00010000
#define GPC5 (1 << 5) //bitmask för pin GPC5 = 00100000
#define GPC6 (1 << 6) //bitmask för pin GPC6 = 01000000
#define GPC7 (1 << 7) //bitmask för pin GPC7 = 10000000
int keyState; definiera "keystate" som heltal
void Start()
{
JAPI_SetIoOutputMode(GPC0+GPC1); //Set Utläge för stift GPC0 och GPC1
}
bool Run()
{
keyState=GetRemoteKeys(); TRAKR fjärrkontroll nedtryckt
tilldela keystate
om (keyState > 0)
{//if keystate är större än 0
IF(keyState&KEY_INPUT1)
{//Button en pressad (motor framåt)
JAPI_SetIoHigh (GPC0), //Set GPC0 pin hög (3.3V)
} annat {
JAPI_SetIoLow(GPC0); Stänga av pin GPC0
}
IF(keyState&KEY_INPUT2)
{//Button B tryckte (motor bakåt)
JAPI_SetIoHigh (GPC1), //Set GPC1 pin hög (3.3V)
} annat {
JAPI_SetIoLow(GPC1); Stänga av pin GPC1
}
IF(keyState&KEY_HOME)
{//if hem-knappen intryckt
returnera false; Detta kommer att avslutas loopen
}
}
return true; loopen upprepas tills falskt
}
void End()
{//Program avsluta - Stäng av båda stiften
JAPI_SetIoLow(GPC0+GPC1);
}
Skapa fil:
# Makefile för TRAKR leksak
# Trakr projektet
TRACKR_PATH = C:/elinagrip
Programnamn = trakrmotorcontrol
PRETTY_NAME = trakrmotorcontrol
OUTPUT_PATH =. / mellanliggande
OUTPUT_NAME = $(OUTPUT_PATH) / $(programnamn) Elf
INTERNALS_PATH =... / Internals
KÄLLOR = app.c
S_OBJECTS = $(OUTPUT_PATH)/app.o
OBJEKT = $(S_OBJECTS) $(INTERNALS_PATH)/trakr.a
SHELL = sh
CC = arm-elf-gcc
SOM = arm-elf-as
BIN = arm-elf-ld
LD = arm-elf-ld
TOPMEMORY = 0XFFE7C000
CFLAGS = - O0-JAG... / Internals/Include-jag... / Internals-vägg - gstabs +
TARGET_FLAG = - mcpu = arm926ejs - mapcs-32 - mlittle-endian - specs=specs.semi
LDFLAGS = -T... /Internals/WJ_APP_8M.LD -Wl,--defsym-Wl,__stack_base=$(TOPMEMORY) -Wl,-karta -Wl, $(basename $ - nostartfiles-static
alla: prebuild $(OUTPUT_NAME) postbuild
$(OUTPUT_NAME): $(OBJECTS)
"Länka... "
"Skapa filen $
-u _start -o $@ $(INTERNALS_PATH)/trakr_start.a $(OBJECTS) $(TARGET_FLAG) $(LDFLAGS)
$(OUTPUT_PATH)/app.o:app.c Makefile
"Sammanställa $<"
-c -o "$" $< "$(TARGET_FLAG) $(CFLAGS)
. FALSKA: Rengör prebuild postbuild
ren:
$(RM) -f $(programnamn) .bin
$(RM) -f "$(PRETTY_NAME) .bin"
$(RM) -f $(OUTPUT_PATH)/app.o
$(RM) -f $(OUTPUT_NAME)
$(RM) -f $(MKDEPFILE)
postbuild:
arm-elf-objcopy - O binära $(OUTPUT_NAME) "$(PRETTY_NAME) .bin"
[ -d "E:/" ] ; sedan \
CP "$(PRETTY_NAME) .bin" e:/APPS /; \
Fi
prebuild:
# Slut på Makefile
När du kompilerar ovanstående kod med ovanstående gör fil, detta kommer att skapa en Trakr App fil som heter "trakrmotorcontrol.bin" och filen måste kopieras till Trakr. Se till att Trakr är avstängd och Anslut den till din dator med den gula USB-kabeln som följde med Trakr. Kopiera trakrmotorcontrol.bin till mappen APPS i mappen Trakr. Koppla bort Trakr från datorn och slå Trakr på. Växla Trakr remote på, klicka på hem-knappen och välj trakrmotorcontrol på menyn.
Trakrmotorcontrol app kan du styra många olika typer av elektriska apparater... motorer, lampor, reläer, etc.