Indholdsfortegnelse:

ITTT Rolando Ritzen - Motion Control Arcade Handske: 5 trin
ITTT Rolando Ritzen - Motion Control Arcade Handske: 5 trin

Video: ITTT Rolando Ritzen - Motion Control Arcade Handske: 5 trin

Video: ITTT Rolando Ritzen - Motion Control Arcade Handske: 5 trin
Video: Часть 1 — Аудиокнига Эдит Уортон «Дом веселья» (Книга 1 — главы 01–05) 2024, Juli
Anonim
ITTT Rolando Ritzen - Motion Control Arcade Handske
ITTT Rolando Ritzen - Motion Control Arcade Handske

En håndskifte, der kan bruges som bevægelsescontroller til on-rail shooters. Det gimmick van dit projekt er, at alt bevægelseskontrol er, inklusive det schieten. (Je schiet door te "finger bangen")

Trin 1: Det materiale

Det materiale, du har brug for, er meget enkelt. 1x Arduino pro micro fra Arduino Leonardo1x MPU6050 gyroskop

4x kabels

Trin 2: De Bekabeling

De Bekabeling
De Bekabeling

Zoals er et skema i den billede, der ser meget enkelt ud. MPU VCC> Arduino VCCMPU jord> Arduino jord MPU SCL> Pin 3MPU SDA> Pin 2

Trin 3: Biblioteker 1

Biblioteker 1
Biblioteker 1

For dette projekt har du et par brugerdefinerede biblioteker, der er nødvendige for dette link:

Download en ZIP -fil via knappen "Klon eller download".

Trin 4: Biblioteker 2

Biblioteker 2
Biblioteker 2

Åbn Zip -filen, og klik på "Arduino". En ud af dette Arduino -kort vil pakke "I2Cdev" og "MPU6050" pakke og i dine Arduino -biblioteker sætte (programfiler> Arduino> biblioteker)

Trin 5: Kode

#omfatte

#include #include #include #include

MPU6050 mpu;

int16_t ax, ay, az, gx, gy, gz;

int16_t accx, accy, accz; int vx, vy; flydevinkel;

// kode til udjævning af inputint readIndex = 0; const int numReadings = 20; int angleReadings [numReadings]; int total = 0; float averageAngle = 0,0;

int oldZ = 0;

int newZ = 0;

ugyldig opsætning () {Serial.begin (115200); Wire.begin (); Mus.begynd (); mpu.initialize (); hvis (! mpu.testConnection ()) {while (1); }

for (int thisReading = 0; thisReading <numReadings; thisReading ++) {angleReadings [thisReading] = 0; }}

void loop () {

total = total - angleReadings [readIndex];

angleReadings [readIndex] = vinkel; total = total + angleReadings [readIndex]; readIndex = readIndex + 1; hvis (readIndex> = numReadings) {readIndex = 0; }

hvis (gz> 30000) {Serial.println ("Bang"); Mus. Klik (); // Skyd ved at slå pistolen baglæns (fingerslag)}

// accx, accy, accz;

mpu.getMotion6 (& ax, & ay, & az, & gx, & gy, & gz); mpu.getAcceleration (& accx, & accy, & accz); //Serial.println(gy); // Serial.println (vinkel);

oldZ = newZ;

vx = (gx + 1000) / 150; vy = - (gz - 200) / 150; Mus.move (vx, vy); forsinkelse (20);

Denne stykkeje kode har en smule nødvendig, fordi du sandsynligvis har brug for en lille smule til at passe.

Hvad der sandsynligvis vil ske, er, at din markør kan se sig selv over dit skærmbillede vil blive vist (fra højre til links, fra oven til under diagonalen) og denne kodekode kan sørge for, at din kurve stadig forbliver som ingen indtastning. Du skal bruge værdierne i "gx + 1000" og "gz - 200", før du får resultatet, at jeg vil, og jeg kan angive, at værdierne skal have en uafhængig løsning fra din skærm. Hvis markøren fra sig selv til højre henvises til links, vil du sige, at "gx + x" kan passere. Als markøren kan komme ud af sig selv til at se, at "gz - x" kan passere. Som den diagonale påstået, kan du vælge en af de to værdier, for at vi kan passere, før han kun kan overskride en, da den kan bruges til andre.

Serial.print ("gx =");

Seriel.print (gx); Serial.print ("| gz ="); Seriel.print (gz); Serial.print ("| gy ="); Serial.println (gy); hvis (gx> 32000) {Serial.println ("Flick til højre"); // Genindlæs, når du smider pistol til højre Keyboard.write ('r'); forsinkelse (250); } Serial.print ("accx ="); Serial.print (accx); Serial.print ("| accy ="); Serial.print (accy); Serial.print ("| accz ="); Serial.println (accz); // arbejder // vinkel = atan2 ((float) (ay - 16384), (float) (ax - 16384)) * (180,0 /PI) * -1; vinkel = atan2 ((float) ay, (float) ~ ax) * (180,0 / PI); // flydevinkel = atan2 ((float) ay, (float) -ax) * (180,0 /PI); //Serial.println(averageAngle); }

Anbefalede: