post125
New member
Добрый день!
Хочу прикрутить к ESP8266 магнитометр QRM3100 для отслеживания изменения магнитного поля.
Скетч такой:
Скетч работает на ProMini, но не хочет на ESP8266. Насколько я понимаю, проблема в разрядности процессоров. ESP не хочет делать отрицательные "int". Пробовал методом "научного тыка" менять типы переменных, ничего хорошего не получается.
Ардуино выдает: X 475.00 Y -1268.00 Z 3557.00
ESP выдает: X 593.00 Y 16775842.00 Z 3409.00
т.е. положительные значения похожи, а с отрицательными беда.
Поскажите, пожалуйста, как подружить этот скетч с ESp8266.
Хочу прикрутить к ESP8266 магнитометр QRM3100 для отслеживания изменения магнитного поля.
Скетч такой:
Код:
#include <Wire.h>
float x, y, z;
byte QRM3100_I2C_ADDRESS =0x23;
void setup() {
Serial.begin(9600);
Wire.begin();
writeRegister(0b0000001,0b01110001);
}
void loop() {
delay(500);
while ((readRegister(0x34) & 0x80) != 0x80) {}
uint8_t mx2 = readRegister(0x24);
uint8_t mx1 = readRegister(0x25);
uint8_t mx0 = readRegister(0x26);
uint8_t my2 = readRegister(0x27);
uint8_t my1 = readRegister(0x28);
uint8_t my0 = readRegister(0x29);
uint8_t mz2 = readRegister(0x2A);
uint8_t mz1 = readRegister(0x2B);
uint8_t mz0 = readRegister(0x2C);
x = ((int32_t)(mx2 * 256 * 256) | (mx1 * 256) | mx0);
y = ((int32_t)(my2 * 256 * 256) | (my1 * 256) | my0);
z = ((int32_t)(mz2 * 256 * 256) | (mz1 * 256) | mz0);
Serial.print("M: X\t");
Serial.print(x);
Serial.print("\t Y\t");
Serial.print(y);
Serial.print("\t Z\t");
Serial.print(z);
Serial.println("");
delay(500);
}
uint8_t readRegister(uint8_t address){ // функция чтения регистра
uint8_t output;
Wire.beginTransmission(QRM3100_I2C_ADDRESS);
Wire.write(address);
Wire.endTransmission();
delayMicroseconds(2);
Wire.requestFrom(QRM3100_I2C_ADDRESS, 1);
while(Wire.available())
{
output = Wire.read();
}
return output;
}
void writeRegister(uint8_t address, uint8_t value){ // функция записи в регистр
Wire.beginTransmission(QRM3100_I2C_ADDRESS);
Wire.write(address);
Wire.write(value);
Wire.endTransmission();
}
Ардуино выдает: X 475.00 Y -1268.00 Z 3557.00
ESP выдает: X 593.00 Y 16775842.00 Z 3409.00
т.е. положительные значения похожи, а с отрицательными беда.
Поскажите, пожалуйста, как подружить этот скетч с ESp8266.