Re: а как два байта послать?
учитывая, что обороты двигателя с точностью до 1 в минуту никогда не нужно знать, можно посылать не сами обороты, а обороты, разделенные на что-либо, к примеру, на 30. Тогда 255 будет соответствовать 7650 оборотам.
Ну или делать делать какой-никакой протокол обмена.
Re: а как два байта послать?
Цитата:
в переменную result тип Word принимаем старший байт и сдвигаем его в лево на 8 бит , потом в эту же переменную result принимаем младший байт
Chip скажи пожалуйста, это вот так должно выглядеть?
PHP код:
void serialEvent(Serial myPort) {
inByte = myPort.read();
serialInArray[serialCount] = inByte;
serialCount++;
if (serialCount ==2) {
// volts = serialInArray[0];
//turbo = serialInArray[1];
//pboost = serialInArray[2];
//watertemp = serialInArray[3];
result = (serialInArray[0] & 768) << 8;
result = serialInArray[1] & 255;
myPort.clear();
serialCount = 0;
inByte = 0;
Это я на Processing делал, только там по моиму нет переменной Word!
Re: а как два байта послать?
А arduino что шлет первым старший или младший байт?
Re: а как два байта послать?
Цитата:
bytes[0] = result & 255; // преобразовать в 2-байта
bytes[1] = (result & 768) >> 8;
Serial.write( bytes,2); // отправить прочитаное значение компьютеру
Всё как ты написал!!!
вот мой кусок:
.............................
byte bytes[2];
..............................
void loop()
{
int result = 6000;
......................................
bytes[0] = result & 255;
bytes[1] = (result & 768) >> 8;
Serial.write( bytes,2);
// delay(10);
bytes[0] = 0;
bytes[1] = 0;
/////////////////////////////////////////
Он мне почему-то присылает цифру 2.
////////////////////////////////////////////////////////////
Я в воскресенье у вас буду в гостях, можно пару кардуин будет купить?
Re: а как два байта послать?
Попробуй вот так
PHP код:
void serialEvent(Serial myPort) {
inByte = myPort.read();
serialInArray[serialCount] = inByte;
serialCount++;
if (serialCount ==2) {
// volts = serialInArray[0];
//turbo = serialInArray[1];
//pboost = serialInArray[2];
//watertemp = serialInArray[3];
result = serialInArray[1];
result = (result << 8) | serialInArray[0];
myPort.clear();
serialCount = 0;
inByte = 0;
Поповоду приезда, я в Москве буду поздно вечером
Re: а как два байта послать?
Chip спасибо!
Если делать как ты сказал, то получается вот что:
число от 0 до 1023 принимается нормально, число 1024 принимается как 0, а свыше 1024 начинается отсчёт с нуля, то есть отправляешь 1025 получаешь 1, отсылаешь
1026 получаешь 2 и так далее! Из-за чего так?
Re: а как два байта послать?
Потому что маска 768 , для АЦП больше и не требовалось, у него разрядность 10бит
768+255=1023, а Тебе для передачи 16 битного значения нужно использовать маску 65280
Я бы все таки посоветовал разобраться с логическими преобразованиями, а то без этого много не на программируешь.
Я программирование начал осваивать именно с логических преобразований.
Re: а как два байта послать?
Спасибо большое!!! Буду разбираться!
Re: а как два байта послать?
Chip а подскажи чего почитать про логические преобразования, чтоб по доступнее было? Плиз!
Re: а как два байта послать?
Во у тебя подглядел!!!))))))
Цитата:
bytes[4] = result & 0xFF; // преобразовать в 4-байта
bytes[5] = (result & 0xFF00) >> 8;
bytes[6] = (result & 0xFF0000) >> 16;
bytes[7] = (result & 0xFF000000) >> 24;
/////////////////////////////////////////////////////////////////////////////////////////////
result = serialInArray[7];
result = (result << 24) | serialInArray[6];
result = (result << 16) | serialInArray[5];
result = (result << 8) | serialInArray[4];
Теперь 32000 пролезает)))))) Спасибо!)