C ++ / Arduino serial.read to

Я пытаюсь отправить буфер ввода USB HID (который всегда числовой) в функцию аналогового ввода. Поэтому мне нужно преобразовать его в байт или целое число. Есть идеи как?

#include <HIDSerial.h>

HIDSerial serial;

unsigned char buffer[32];
ledPin = 10;

void setup() {
serial.begin();
}

void loop() {
if(serial.available()) {
int size = serial.read(buffer);
if (size!=0) {
serial.write((const uint8_t*)buffer, size);
// It will fail cause it needs a conversion from unsigned char to something else..
analogWrite (ledPin,buffer)
}
}
serial.poll();
}

0

Решение

Вы можете преобразовать символ в uint8_t следующим образом:

//assume these variables
char thisChar = '9';
uint8_t thisByte;

thisByte |= thisChar;

Serial.println(thisByte, BIN);

Выход этого: 00111001

Это работает, потому что они оба являются однобайтовой переменной. Вы перемещаете биты, используя побитовую операцию.

0

Другие решения

Не уверен, что вы пытаетесь сделать здесь.

serial.read() а также serial.write() иметь дело с буфером данных длиной до 32 байтов. Вы не можете преобразовать это в целое число осмысленным способом. Также обратите внимание, что buffer указатель на память, в которой находятся данные Каждый раз это будет одно и то же число, поэтому отправлять его не имеет смысла.

analogWrite() записывает значение ШИМ от 0 до 255 на вывод. Это действительно то, что вы хотите сделать?

0

Нашел решение:

Это полная программа:

#include <HIDSerial.h>

HIDSerial serial;

unsigned char buffer[2];

void setup() {
serial.begin();
}

void loop() {
if(serial.available()) {
int size = serial.read(buffer);
if (size!=0) {
int bright = atoi((char *) buffer) ;
analogWrite(0,bright);
serial.println(bright);

}
}
serial.poll();
}
0
По вопросам рекламы [email protected]