перевод чисел в байты вида 0x00
На вход будут поступать числа, значение датчика расстояния, мне нужно перевести их к виду 0x01, 0x20, 0xA0, 0x00 первые биты младшие
например число 400 должно быть в виде 0x90, 0x01
Что бы подставить в выражение: unsigned char stmp[8] = {0x90, 0x01};
#include <SPI.h>
#include "mcp_can.h"
const int SPI_CS_PIN = 10;
MCP_CAN CAN(SPI_CS_PIN);
void setup()
{
Serial.begin(115200);
while (CAN_OK != CAN.begin(CAN_250KBPS, MCP_8MHz))
{
Serial.println("CAN BUS Shield init fail");
Serial.println(" INit CAN BUS Shield again");
delay(100);
}
Serial.println("CAN BUS Shield Init OK!");
}
// Пробег
unsigned char stmp[8] = {0x90, 0x01};
void loop()
{
Serial.println("In loop");
CAN.sendMsgBuf(0x18FEC1EE, 1, 8, stmp);
delay(100);
}
Ответы (1 шт):
Автор решения: Vanyamba Electronics
→ Ссылка
unsigned char stmp[8] = {0, 0, 0, 0, 0, 0, 0, 0};
int number = 400;
*((int*)stmp) = number;
Чтобы избежать приведения типа (вдруг компилятор так строго настроен), можно использовать более хитрый код:
typedef union {
unsigned char uc_array[8];
unsigned int ui_number;
} stmp_t;
stmp_t stmp;
number = 400;
stmp.ui_number = number;
CAN.sendMsgBuf(0x18FEC1EE, 1, 8, stmp.uc_array);