Я пытаюсь отправить буфер ввода 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();
}
Вы можете преобразовать символ в uint8_t следующим образом:
//assume these variables
char thisChar = '9';
uint8_t thisByte;
thisByte |= thisChar;
Serial.println(thisByte, BIN);
Выход этого: 00111001
Это работает, потому что они оба являются однобайтовой переменной. Вы перемещаете биты, используя побитовую операцию.
Не уверен, что вы пытаетесь сделать здесь.
serial.read()
а также serial.write()
иметь дело с буфером данных длиной до 32 байтов. Вы не можете преобразовать это в целое число осмысленным способом. Также обратите внимание, что buffer
указатель на память, в которой находятся данные Каждый раз это будет одно и то же число, поэтому отправлять его не имеет смысла.
analogWrite()
записывает значение ШИМ от 0 до 255 на вывод. Это действительно то, что вы хотите сделать?
Нашел решение:
Это полная программа:
#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();
}