#include <Wire.h>
#include <MPU6050.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// MPU6050 I2C
MPU6050 mpu;
// DS18B20 on pin 2
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature ds(&oneWire);
// Encoder
#define ENCODER_CLK 10
#define ENCODER_DT 11
int lastCLK = HIGH;
int mode = 0;
void setup() {
Serial.begin(115200);
Wire.begin();
mpu.initialize();
if (!mpu.testConnection()) {
Serial.println("MPU6050 not connected");
while (1);
}
ds.begin();
pinMode(ENCODER_CLK, INPUT_PULLUP);
pinMode(ENCODER_DT, INPUT_PULLUP);
lastCLK = digitalRead(ENCODER_CLK);
printMode();
}
void printMode() {
Serial.println();
Serial.print("Mode: ");
if (mode == 0) Serial.println("ACCEL");
if (mode == 1) Serial.println("GYRO");
if (mode == 2) Serial.println("TEMP");
}
void loop() {
// Обработка энкодера
int currentCLK = digitalRead(ENCODER_CLK);
if (currentCLK != lastCLK && currentCLK == LOW) {
if (digitalRead(ENCODER_DT) != currentCLK) mode++;
else mode--;
if (mode < 0) mode = 2;
if (mode > 2) mode = 0;
printMode();
}
lastCLK = currentCLK;
// MPU6050 чтение
int16_t ax, ay, az, gx, gy, gz;
mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
if (mode == 0) {
Serial.print("ACC X: "); Serial.print(ax);
Serial.print(" Y: "); Serial.print(ay);
Serial.print(" Z: "); Serial.println(az);
}
else if (mode == 1) {
Serial.print("GYRO X: "); Serial.print(gx);
Serial.print(" Y: "); Serial.print(gy);
Serial.print(" Z: "); Serial.println(gz);
}
else {
ds.requestTemperatures();
float t = ds.getTempCByIndex(0);
Serial.print("TEMP: "); Serial.print(t); Serial.println(" C");
}
delay(500);
}