Разница между Arduino DUE и Arduino UNO при конвертации символов - PullRequest
0 голосов
/ 21 сентября 2018

При чтении компаса 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?

1 Ответ

0 голосов
/ 24 сентября 2018

Стандарт C ++ не определяет, является ли тип char подписанным или неподписанным.В вашем случае кажется, что UNO использует подписанные символы, но Due использует неподписанные символы.

Вы можете указать подпись вашей переменной напрямую:

signed char pitch; 

Или вы можете использовать целочисленные значения typedefs фиксированной длины (находятся в заголовке <cstdint>).):

int8_t pitch;

Как правило, вы предпочитаете использовать типы с точной шириной, если у вас нет веских причин не делать этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...