2014-11-01 2 views
0

Я пытаюсь отправить буфер USB HID-ввода (который всегда является числовым) в функцию аналогового ввода. Поэтому мне нужно преобразовать его в байт или целое число. Любая идея как?C++/Arduino serial.read to

#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

К сожалению, я должен пропустить детали здесь. Что вы ожидаете и что происходит? Вы получаете ошибку «неправильного преобразования»? – djUniversal

+0

Да, и это кажется логичным. Я не могу преобразовать буфер в байт. Возможно, я должен следовать другому подходу. – evans

+0

Вам нужно создать еще один массив из ints, который будет иметь одинаковую длину и передать каждое значение, а затем отправить каждый int. Вы использовали для петель? – djUniversal

ответ

0

Вы можете преобразовать символ в uint8_t, как это:

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

thisByte |= thisChar; 

Serial.println(thisByte, BIN); 

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

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

+0

Как это относится к вопросу? –

0

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

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

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

+0

Ну, мне нужно отправить через usb (используя библиотеку HIDSerial) значение PWM (байта) на вывод A0. Спрятанный последовательный порт имеет функцию serial.read. Любая кодовая помощь будет оценена по достоинству. благодаря – evans

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(); 
} 
Смежные вопросы