salve a tutti, sto cercando di collegare ad un esp32s3 un gy-511 ed un display (SH1107) sulla stessa linea i2c per fare una bussola che mi indichi sul display dove sto andando.
con questo sketch riesco a far funzionare il display:
#include <Arduino.h>
#include <U8g2lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
#define BtnPin 0 // STAMP_S3
U8G2_SH1107_64X128_F_SW_I2C u8g2(U8G2_R0, 15, 13 , U8X8_PIN_NONE); //GROVE STAMP_S3
void setup(void) {
Wire.begin();
Serial.begin(115200);
u8g2.begin();
Serial.println();
Serial.println("RayMod");
Serial.println();
pinMode(BtnPin, INPUT_PULLUP);
u8g2.clearDisplay();
// u8g2.setDisplayRotation(U8G2_MIRROR_VERTICAL);
u8g2.setDisplayRotation(U8G2_R1);
u8g2.setFlipMode(0);
u8g2.firstPage();
do {
/* all graphics commands have to appear within the loop body. */
//u8g2.setFont(u8g2_font_ncenB14_tr);
// u8g2.setFlipMode(1);
u8g2.setFont(u8g2_font_freedoomr10_tu);
u8g2.setCursor(0, 15);
u8g2.print("* COMPASS * :");
} while (u8g2.nextPage());
delay(5000);
}
void loop(void) {
stampa();
Serial.println("stampo");
}
void stampa() {
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_7Segments_26x42_mn);
u8g2.setCursor(20, 52);
u8g2.print("359°");
u8g2.drawDisc(120, 10, 4, U8G2_DRAW_ALL); // virgola
} while (u8g2.nextPage());
}
}
con quest'altro ho nel monitor seriale la mia direzione:
#include <Wire.h>
// LSM303 Compass Library
#include <LSM303.h>
LSM303 cmps;
void setup() {
Serial.begin(115200);
// Wire.begin(SDA, SCL);
//Wire.begin(13, 15); //STAMP_S3
Wire.begin();
cmps.init();
cmps.enableDefault();
Serial.println("Setup complete...");
/*
Calibration values; the default values of +/-32767 for each axis
lead to an assumed magnetometer bias of 0. Use the Calibrate example
program to determine appropriate values for your particular unit.
*/
cmps.m_min = (LSM303::vector<int16_t>){ -32767, -32767, -32767 };
cmps.m_max = (LSM303::vector<int16_t>){ +32767, +32767, +32767 };
}
void loop() {
cmps.read();
float heading = cmps.heading();
Serial.print("Heading: ");
Serial.println(heading);
delay(200);
}
a quanto dice lo scanner i2c, gli indirizzi sono:
Scanning...
I2C device found at address 0x19 // gy-511
I2C device found at address 0x1E // gy-511
I2C device found at address 0x3C // oled
done
ma quando cerco di unire i due sketch il tutto non va... i problemi cominciano quando aggiungo
u8g2.begin()
allo sketch della bussola... credo sia un problema di indirizzi ed ho provato anche ad usare i2cSetAddress
della libreria u8g2 prima del begin ma senza successo...
questo è lo sketch che si bocca:
#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
// LSM303 Compass Library
#include <LSM303.h>
LSM303 cmps;
U8G2_SH1107_64X128_F_SW_I2C u8g2(U8G2_R0, 15, 13 , U8X8_PIN_NONE); //GROVE STAMP_S3
void setup() {
Serial.begin(115200);
// Wire.begin(SDA, SCL);
//Wire.begin(13, 15); //STAMP_S3
Wire.begin();
cmps.init();
cmps.enableDefault();
Serial.println("Setup complete...");
/*
Calibration values; the default values of +/-32767 for each axis
lead to an assumed magnetometer bias of 0. Use the Calibrate example
program to determine appropriate values for your particular unit.
*/
cmps.m_min = (LSM303::vector<int16_t>){ -32767, -32767, -32767 };
cmps.m_max = (LSM303::vector<int16_t>){ +32767, +32767, +32767 };
u8g2.begin();
}
void loop() {
cmps.read();
float heading = cmps.heading();
Serial.print("Heading: ");
Serial.println(heading);
delay(200);
}
dove sbaglio??
grazie e buone feste!!