added sketch

This commit is contained in:
Alexander Gabriel 2023-02-07 16:18:38 +01:00
parent 31f1ba85a5
commit 7cc741ee64
1 changed files with 100 additions and 0 deletions

100
gyrocontrol.ino Normal file
View File

@ -0,0 +1,100 @@
#include <Keyboard_de_DE.h>
#include <Keyboard.h>
#include <KeyboardLayout.h>
#include <MPU6050_tockn.h>
#include <Wire.h>
MPU6050 mpu6050(Wire);
const int inactivePin = 5;
int inactivePinState = 0;
bool inactiveState = true;
const int recalibratePin = 16;
int recalibratePinState = 0;
int doRecalibrate = 0;
float offsetX = 0.0;
float offsetY = 0.0;
float offsetZ = 0.0;
float effectiveX = 0.0;
float effectiveY = 0.0;
float effectiveZ = 0.0;
void setup() {
pinMode(inactivePin, INPUT_PULLUP);
pinMode(recalibratePin, INPUT_PULLUP);
Serial.begin(9600);
Wire.begin();
mpu6050.begin();
mpu6050.calcGyroOffsets(true);
offsetX = mpu6050.getGyroAngleX();
offsetY = mpu6050.getGyroAngleY();
offsetZ = mpu6050.getGyroAngleZ();
effectiveX = mpu6050.getGyroAngleX() - offsetX;
effectiveY = mpu6050.getGyroAngleY() - offsetY;
effectiveZ = mpu6050.getGyroAngleZ() - offsetZ;
Keyboard.begin();
}
void loop(){
inactivePinState = digitalRead(inactivePin);
recalibratePinState = digitalRead(recalibratePin);
mpu6050.update();
if(inactivePinState == LOW) {
Keyboard.releaseAll();
inactiveState = !inactiveState;
if(!inactiveState) doRecalibrate = 1;
while(digitalRead(inactivePin) == LOW) {
delay(50);
}
}
if(inactiveState) {
Serial.println("device inactive");
return;
}
if(recalibratePinState == LOW) {
Keyboard.releaseAll();
doRecalibrate = 1;
while(digitalRead(recalibratePin) == LOW) {
delay(50);
}
}
if(doRecalibrate) {
Keyboard.releaseAll();
Serial.println("do recalibration, dont move!");
delay(1000);
doRecalibrate = 0;
offsetX = mpu6050.getGyroAngleX();
offsetY = mpu6050.getGyroAngleY();
offsetZ = mpu6050.getGyroAngleZ();
Serial.println("done recalibration, 1s...");
delay(1000);
}
if (!inactiveState) {
effectiveX = mpu6050.getGyroAngleX() - offsetX;
effectiveY = mpu6050.getGyroAngleY() - offsetY;
effectiveZ = mpu6050.getGyroAngleZ() - offsetZ;
if (effectiveX > 8) { Keyboard.press('w'); Serial.println("w"); } else { Keyboard.release('w'); }
if (effectiveX < -8) { Keyboard.press('s'); Serial.println("s"); } else { Keyboard.release('s'); }
if (effectiveZ > 8) { Keyboard.press('a'); Serial.println("a"); } else { Keyboard.release('a'); }
if (effectiveZ < -8) { Keyboard.press('d'); Serial.println("d"); } else { Keyboard.release('d'); }
}
Serial.print("angleX : ");
Serial.print(effectiveX);
Serial.print("\tangleY : ");
Serial.print(effectiveY);
Serial.print("\tangleZ : ");
Serial.print((effectiveZ));
Serial.print("\toffsetX : ");
Serial.print(offsetX);
Serial.print("\toffsetY : ");
Serial.print(offsetY);
Serial.print("\toffsetZ : ");
Serial.println(offsetY);
}