Gyro kontroler
Mamy 5 przycisków do zaprogramowania: A, W, S, D i Spacja. Możliwe jest również jednoczesne naciśnięcie W + A i W + D.
Aby zbudować kontroler, będziesz potrzebować:
- Arduino LEONARDO !!!!!!!!!!!
- Czujnik żyroskopowy MPU6050
- Płyta uniwersalna
Połączenie:
- SDA -> SDA
- SCL -> SCL
- Vcc -> 5 V.
- GND -> GND
Sketch:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
/* * ForbiddenBit.com */ #include<Wire.h> #include <Keyboard.h> const int MPU_addr=0x68; // I2C address of the MPU-6050 int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ; int pos; int z0 = 3000; int zstop = 13000; int y0 = 10000; void setup(){ pinMode(8, INPUT_PULLUP); Wire.begin(); Wire.beginTransmission(MPU_addr); Wire.write(0x6B); // PWR_MGMT_1 register Wire.write(0); // set to zero (wakes up the MPU-6050) Wire.endTransmission(true); Serial.begin(9600); } void loop(){ Wire.beginTransmission(MPU_addr); Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H) Wire.endTransmission(false); Wire.requestFrom(MPU_addr,14,true); // request a total of 14 registers AcX=Wire.read()<<8|Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L) AcY=Wire.read()<<8|Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L) AcZ=Wire.read()<<8|Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L) //Serial.println Keyboard.begin(); byte pause = digitalRead(8); if( abs(AcZ)>zstop ){ Keyboard.write(0); } else{ Serial.print("AcY:"); Serial.print(AcY); Serial.print("AcZ"); Serial.print(AcZ); Serial.print("AcX"); Serial.print(AcX); if(pause = LOW){ Serial.println("PAUSE") delay(500); } if(AcZ > z0 && abs(AcY) < y0){ Keyboard.write('S'); } if(AcZ > z0 && AcY > y0){ Keyboard.write('A'); } if(AcZ > z0 && AcY < -y0){ Keyboard.write('D'); } if(AcZ < z0 && AcY > y0){ Keyboard.write('W'); Keyboard.write('A'); } if(AcZ < z0 && AcY < -y0){ Keyboard.write('W'); Keyboard.write('D'); } if(AcZ < z0 && abs(AcY) < y0){ Keyboard.write('W'); } } delay(10); Keyboard.end(); } |