#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
st-nucleo-l031k6
Loading
ds18b20
ds18b20