Სარჩევი:

ITTT როლანდო რიცენი - მოძრაობის კონტროლის არკადული ხელთათმანი: 5 ნაბიჯი
ITTT როლანდო რიცენი - მოძრაობის კონტროლის არკადული ხელთათმანი: 5 ნაბიჯი

ვიდეო: ITTT როლანდო რიცენი - მოძრაობის კონტროლის არკადული ხელთათმანი: 5 ნაბიჯი

ვიდეო: ITTT როლანდო რიცენი - მოძრაობის კონტროლის არკადული ხელთათმანი: 5 ნაბიჯი
ვიდეო: 3 ხერხი,რომლითაც გააოცებთ თქვენს მეგობრებს! PT 2 2024, ივლისი
Anonim
ITTT როლანდო რიცენი - მოძრაობის კონტროლის არკადული ხელთათმანი
ITTT როლანდო რიცენი - მოძრაობის კონტროლის არკადული ხელთათმანი

ხელის ჩამორთმევა შეიძლება იყოს მოძრაობის კონტროლერი რკინიგზის მსროლელებისთვის. ეს არის მოძრაობის კონტროლის მეთოდი, რომელიც მოიცავს ყველა მოძრაობის კონტროლს. (Je schiet door te "finger bangen")

ნაბიჯი 1: Het Materiaal

Het materiaal dat je gaat nodig hebben is vrij simpel. Arduino Leonardo– ს 1x Arduino pro micro 1 x გიროსკოპი MPU6050

4x კაბელი

ნაბიჯი 2: დე ბექაბელინგი

დე ბექაბელინგი
დე ბექაბელინგი

Zoals je in het schema de de afbeelding ziet არის bekabeling super simpel. MPU VCC> Arduino VCCMPU გრუნტი> Arduino ადგილზე MPU SCL> Pin 3MPU SDA> Pin 2

ნაბიჯი 3: ბიბლიოთეკები 1

ბიბლიოთეკები 1
ბიბლიოთეკები 1

არაჩვეულებრივი პროექტია ბიბლიოთეკები, რომლებიც მითითებულია ბმულზე:

ჩამოტვირთეთ ZIP ფაილი "კლონირება ან გადმოწერა" knop rechts bovenaan- ის საშუალებით.

ნაბიჯი 4: ბიბლიოთეკები 2

ბიბლიოთეკები 2
ბიბლიოთეკები 2

გახსენით Zip ფაილი და დააწკაპუნეთ რუკაზე "Arduino". Arduino- ს რუქა იქნება "I2Cdev" და "MPU6050" შენახული Arduino ბიბლიოთეკებში (პროგრამის ფაილები> Arduino> ბიბლიოთეკები)

ნაბიჯი 5: კოდი

#ჩართეთ

#ჩართეთ #ჩართეთ #ჩართეთ #ჩართეთ

MPU6050 mpu;

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

int16_t accx, accy, accz; int vx, vy; float კუთხე;

// კოდი შეყვანის შესასწორებლად readIndex = 0; const int numReadings = 20; int angleReadings [numReadings]; int სულ = 0; float საშუალოAngle = 0.0;

int oldZ = 0;

int newZ = 0;

void setup () {Serial.begin (115200); Wire.begin (); თაგვი. დაწყება (); mpu. ინიციალიზაცია (); თუ (! mpu.testConnection ()) {ხოლო (1); }

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

ბათილი მარყუჟი () {

სულ = სულ - angleReadings [readIndex];

angleReadings [readIndex] = კუთხე; სულ = სულ + angleReadings [readIndex]; readIndex = readIndex + 1; if (readIndex> = numReadings) {readIndex = 0; }

if (gz> 30000) {Serial.println ("Bang"); Mouse.click (); // ისროლე იარაღის უკან დახევით (თითის დარტყმა)}

// accx, accy, accz;

mpu.getMotion6 (& ax, & ay, & az, & gx, & gy, & gz); mpu.getAcceleration (& accx, & accy, & accz); //Serial.println(gy); // Serial.println (კუთხე);

oldZ = newZ;

vx = (gx + 1000) / 150; vy = - (gz - 200) / 150; თაგვი. გადაადგილება (vx, vy); დაგვიანება (20);

Dit stukje კოდი heeft een beetje uitleg nodig omdat je het waarschijnlijk een klein beetje moet aanpassen.

Wat er waarschijnlijk gaat gebeuren is dat je cursor uit zichzelf over je scherm gaat bewegen (van rechts naar links, van boven naar onder of diagonaal) en dit stukje code zorgt er voor dat je curor stil blijft staan als je geen input geeft. ეს არის ღირებულებები "gx + 1000" და "gz - 200" ananpassen totdat je het resultaat krijat ეს არის მისი შექმნის შედეგი, როდესაც ის მიიღებს მნიშვნელობებს, თუ ისინი მიიღებენ გადაწყვეტილებას. Als de cursor uit zichzelf van rechts naar links beweegd wil je "gx + x" aanpassen. Als de cursor uit zichzelf van boven naar onder beweegd wil je de "gz - x" aan passen. Als het diagonaal beweegd, dan kies je een van de twee values om aan te passen totdat hij nog maar over een as beweegd en dan pas je de andere aan.

Serial.print ("gx =");

სერიული. ბეჭდვა (gx); Serial.print ("| gz ="); სერიული. ბეჭდვა (gz); Serial.print ("| gy ="); Serial.println (gy); if (gx> 32000) {Serial.println ("დაწკაპუნებით მარჯვნივ"); // გადატვირთეთ იარაღის მარჯვენა კლავიში გადაადგილებისას. ჩაწერეთ ('r'); დაგვიანება (250); } Serial.print ("accx ="); Serial.print (accx); Serial.print ("| accy ="); სერიული. ბეჭდვა (accy); Serial.print ("| accz ="); Serial.println (accz); // სამუშაო // კუთხე = atan2 ((float) (ay - 16384), (float) (ax - 16384)) * (180.0 /PI) * -1; კუთხე = atan2 ((float) ay, (float) ~ ax) * (180.0 / PI); // float angle = atan2 ((float) ay, (float) -ax) * (180.0 /PI); //Serial.println(averageAngle); }

გირჩევთ: