DIY Wireless Joystick (trådlös Gaming) (10 / 11 steg)
Steg 10: Uppladdning av programmet
Alla anslutningar och lödning slutförs. Det är rätt tid att programmera i styrelsen. Jag utvecklade den AVSAudioConverter.old använder Arduino IDE. Då jag brände att IC med Arduion UNO och sedan sätta IC till styrelsen. Om du gillar att används endast atmega IC som mig istället för att använda full arduino ombord kan du följa denna tutorial (Från Arduino att en mikrokontroller på en skärbräda).
Här är programmet jag använde för min joystick. Jag lade också till filen nedan. Arduino VirtualWire bibliotek användes för samverkan med RF transceiver.
//..................................
#include < VirtualWire.h >
CONST int led_pin = 13.
CONST int transmit_pin = 9;
CONST int receive_pin = 10;
CONST int transmit_en_pin = 3;
int horzPin = A0; Analog utgång för horisontella joystick stift
int vertPin = A1; Analog utgång för vertikala joystick stift
int selPin = 11; Välj knappen pin på joystick
int vertZero, horzZero; Lagrar det initiala värdet för varje axel, vanligtvis runt 512
int vertValue, horzValue; Lagrar nuvarande analog utgång för varje axel
CONST int känslighet = 200. Högre känslighet värde = långsammare mus, bör vara < = ca 500
int mouseClickFlag = 0;
char * kontroller;
Sträng msgV, msgH;
int W = 8, A = 6, S = 5, D = 7, SPACE = 2;
void setup() {
pinMode(13,OUTPUT);
Delay(1000);
Serial.BEGIN(9600); Felsökning av endast
Serial.println("Setup");
pinMode (horzPin, ingång); Ange både analoga pins som ingångar
pinMode (vertPin, ingång);
pinMode (selPin, ingång); SET-knappen Välj pin som indata
digitalWrite (selPin, hög); Dra knappen Välj pin hög
Delay(1000); kort fördröjning att låta utgångar settle
vertZero = analogRead(vertPin); få det initiala värden
horzZero = analogRead(horzPin); Joysticken bör vara i neutralläge när man läser dessa
Initialisera IO och ISR
vw_set_tx_pin(transmit_pin);
vw_set_rx_pin(receive_pin);
vw_set_ptt_pin(transmit_en_pin);
vw_set_ptt_inverted(true); Krävs för DR3100
vw_setup(2000); Bitar per sekund
pinMode (5, ingång);
pinMode (6, ingång);
pinMode (7, ingång);
pinMode (8, ingående);
pinMode (2, ingång);
digitalWrite 5, hög,
digitalWrite (6, hög).
digitalWrite (7, hög).
digitalWrite 8, hög.
digitalWrite (2, hög).
Delay(1000);
}
void loop() {
vertValue = analogRead(vertPin) - vertZero; Läs vertikal förskjutning
horzValue = analogRead(horzPin) - horzZero; Läs horisontell offset
IF(digitalRead(W) == låg) {
Controller = "W";
vw_send ((uint8_t *) controller, strlen(controller));
vw_wait_tx(); Vänta tills hela meddelandet är borta
Delay(100);
}
IF(digitalRead(A) == låg) {
Controller = "A";
vw_send ((uint8_t *) controller, strlen(controller));
vw_wait_tx(); Vänta tills hela meddelandet är borta
Delay(100);
}
om (digitalRead (S) == låg) {
Controller = "S";
vw_send ((uint8_t *) controller, strlen(controller));
vw_wait_tx(); Vänta tills hela meddelandet är borta
Delay(100);
}
IF(digitalRead(D) == låg) {
Controller = "D";
vw_send ((uint8_t *) controller, strlen(controller));
vw_wait_tx(); Vänta tills hela meddelandet är borta
Delay(100);
}
IF(digitalRead(Space) == låg) {
Controller = "G".
vw_send ((uint8_t *) controller, strlen(controller));
vw_wait_tx(); Vänta tills hela meddelandet är borta
Delay(100);
}
om (vertValue > = 50) {
Mouse.Move (0, vertValue/känslighet, 0); flytta musen på y-axeln
om (vertValue/känslighet == 1)
Controller = "1";
annars om (vertValue/känslighet == 2)
Controller = "2".
annars om (vertValue/känslighet == 3)
Controller = "3";
annat
Controller = "4".
vw_send ((uint8_t *) controller, strlen(controller));
vw_wait_tx(); Vänta tills hela meddelandet är borta
Delay(100);}
om (horzValue > = 50) {
om (horzValue/känslighet == 1)
Controller = "5".
annars om (horzValue/känslighet == 2)
Controller = "6".
annars om (horzValue/känslighet == 3)
Controller = "7".
annat
Controller = "8".
vw_send ((uint8_t *) controller, strlen(controller));
vw_wait_tx(); Vänta tills hela meddelandet är borta
Delay(100);}
}