При чтении компаса CMPS 10 с использованием I2C высота тона содержится в одном байте, который находится в диапазоне +/- 90 градусов.
Использование char для принятия результата и преобразования в int хорошо работает на ArduinoUno с распечаткой, показывающей положительные и отрицательные числа, и это то, что мне нужно.
#include "FastLED.h"
#define NUM_LEDS 150
#define DATA_PIN 6
#define CMPS_GET_ANGLE8 0x12
#define CMPS_GET_PITCH 0x14
#define BAUD38400 0xA1
CRGB leds[NUM_LEDS];
unsigned char angle8;
char pitch;
int intpitch;
void setup()
{
FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
Serial.begin(9600);
Serial1.begin(9600);
delay(100);
Serial1.write(BAUD38400);
Serial1.end();
Serial1.begin(38400);
delay(100);
}
void loop()
{
getAngleAndPitch();
Serial.print("angle 8: "); // Display 8bit angle
Serial.print(angle8, DEC);
Serial.print(" pitch: "); // Display pitch data
intpitch = pitch;
Serial.println(intpitch);
FastLED.showColor(CHSV(angle8, 200,200));
delay(10);
}
void getAngleAndPitch()
{
Serial1.write(CMPS_GET_ANGLE8); // Request and read 8 bit angle
while(Serial1.available() < 1);
angle8 = Serial1.read();
Serial1.write(CMPS_GET_PITCH); // Request and read pitch value
while(Serial1.available() < 1);
pitch = Serial1.read();
}
На Arduino DUE отрицательные числа от -1 до -90 составляют от 255 до 165
Это где-то задокументированои как я могу получить правильные отрицательные числа, не прибегая к выражению IF?