01-01-2025, 17:50
Witam,
Stawiam dopiero pierwsze kroki w Arduino i napotkałem na pewne problemy ze współpracą dwóch urządzeń po I2C.
Podłączyłem po I2C wyświetlacz OLED 128x32 i żyroskop GY-521 MPU-6050.
Każde z urządzeń osobno działa prawidłowo pod warunkiem, że są dwa niezależne programy, tzn.:
1) Z wykorzystaniem biblioteki Adafruit_SSD1306.h Próby wyświetlania tekstów na wyświetlaczu OLED są prawidłowe.
2) Kod p. Korneliusza Jarzębskiego - MPU6050_gyro_pitch_roll_yaw - żyroskop działa i wyświetla wyniki po COM.
Próbowałem połączyć oba programy, aby wyniki z żyroskopu wyświetlały się na OLED, ale niestety nie działa, wyświetlacz jest ciemny i nic nie wyświetla. Przypuszczam, że problemem są adresy urządzeń. Ustaliłem, że OLED ma adres: 0x3C, a żyroskop 0x68. Niestety nie wiem, jak tą informację wykorzystać.
Używam Arduino Nano.
Poniżej kod, który testowałem. Byłbym wdzięczny za wskazówki jak zmodyfikować kod?
Z góry dziękuję i pozdrawiam w Nowym Roku.
Stawiam dopiero pierwsze kroki w Arduino i napotkałem na pewne problemy ze współpracą dwóch urządzeń po I2C.
Podłączyłem po I2C wyświetlacz OLED 128x32 i żyroskop GY-521 MPU-6050.
Każde z urządzeń osobno działa prawidłowo pod warunkiem, że są dwa niezależne programy, tzn.:
1) Z wykorzystaniem biblioteki Adafruit_SSD1306.h Próby wyświetlania tekstów na wyświetlaczu OLED są prawidłowe.
2) Kod p. Korneliusza Jarzębskiego - MPU6050_gyro_pitch_roll_yaw - żyroskop działa i wyświetla wyniki po COM.
Próbowałem połączyć oba programy, aby wyniki z żyroskopu wyświetlały się na OLED, ale niestety nie działa, wyświetlacz jest ciemny i nic nie wyświetla. Przypuszczam, że problemem są adresy urządzeń. Ustaliłem, że OLED ma adres: 0x3C, a żyroskop 0x68. Niestety nie wiem, jak tą informację wykorzystać.
Używam Arduino Nano.
Poniżej kod, który testowałem. Byłbym wdzięczny za wskazówki jak zmodyfikować kod?
Z góry dziękuję i pozdrawiam w Nowym Roku.
Kod:
#include <SPI.h>
#include <Wire.h>
#include <MPU6050.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
MPU6050 mpu;
Adafruit_SSD1306 display(4);
// Timers
unsigned long timer = 0;
float timeStep = 0.01;
// Pitch, Roll and Yaw values
float pitch = 0;
float roll = 0;
float yaw = 0;
void setup()
{
// Calibrate gyroscope. The calibration must be at rest.
// If you don't want calibrate, comment this line.
mpu.calibrateGyro();
// Set threshold sensivty. Default 3.
// If you don't want use threshold, comment this line or set 0.
mpu.setThreshold(3);
display.begin(SSD1306_SWITCHCAPVCC,0x3C);
display.clearDisplay();
}
void loop()
{
timer = millis();
// Read normalized values
Vector norm = mpu.readNormalizeGyro();
// Calculate Pitch, Roll and Yaw
pitch = pitch + norm.YAxis * timeStep;
roll = roll + norm.XAxis * timeStep;
yaw = yaw + norm.ZAxis * timeStep;
// Output raw
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(1,1);
display.print("Pitch=");
display.println(pitch);
display.print("Roll=");
display.println(roll);
display.print("Yaw=");
display.println(yaw);
display.display();//odświeżanie
// Wait to full timeStep period
delay((timeStep*1000) - (millis() - timer));
}