#include "stm32l0xx_hal.h"
#include "SPI.h"
// Библиотеки для работы с дисплеем и датчиками
#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#include "MPU6050.h"
#include "OneWire.h"
#include "DS18B20.h"

// Настройки пинов
#define TFT_DC PA5
#define TFT_CS PA4
#define MPU6050_SDA PB7
#define MPU6050_SCL PB6
#define ENCODER_CLK PA1
#define ENCODER_DT PA0
#define TEMPERATURE_DATA PA8

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
MPU6050 mpu6050;
DS18B20 ds18b20(TEMPERATURE_DATA);

void setup() {
  // Инициализация периферии
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_SPI1_Init();
  MX_I2C1_Init();

  // Инициализация дисплея
  tft.begin();
  tft.setRotation(1);
  tft.fillScreen(ILI9341_BLACK);

  // Инициализация датчиков
  mpu6050.initialize();
  ds18b20.begin();
}

void loop() {
  static int sensor_display = 0; // 0 - температура, 1 - акселерометр, 2 - гироскоп

  // Чтение состояния энкодера
  if (HAL_GPIO_ReadPin(GPIOA, ENCODER_CLK) == GPIO_PIN_SET) {
    sensor_display = (sensor_display + 1) % 3;
  }

  // Очистка экрана
  tft.fillScreen(ILI9341_BLACK);

  // Чтение и отображение данных с датчиков
  switch (sensor_display) {
    case 0: // Температура
      float temperature = ds18b20.getTempC();
      tft.setCursor(0, 0);
      tft.setTextColor(ILI9341_WHITE);
      tft.setTextSize(2);
      tft.print("Temp: ");
      tft.print(temperature);
      tft.println(" C");
      break;
    case 1: // Акселерометр
      int16_t ax, ay, az;
      mpu6050.getAcceleration(&ax, &ay, &az);
      tft.setCursor(0, 0);
      tft.setTextColor(ILI9341_WHITE);
      tft.setTextSize(2);
      tft.print("Acc X: ");
      tft.print(ax);
      tft.print(" Y: ");
      tft.print(ay);
      tft.print(" Z: ");
      tft.print(az);
      break;
    case 2: // Гироскоп
      int16_t gx, gy, gz;
      mpu6050.getRotation(&gx, &gy, &gz);
      tft.setCursor(0, 0);
      tft.setTextColor(ILI9341_WHITE);
      tft.setTextSize(2);
      tft.print("Gyro X: ");
      tft.print(gx);
      tft.print(" Y: ");
      tft.print(gy);
      tft.print(" Z: ");
      tft.print(gz);
      break;
  }

  HAL_Delay(500); // Задержка для уменьшения частоты обновления
}

int main(void) {
  setup();
  while (1) {
    loop();
  }
}
Loading
st-nucleo-l031k6
Loading
ds18b20