Тема: CITROEN-ARDUINO
Показать сообщение отдельно
Старый 15.07.2015, 23:39   #6
Bersenev
Бывалый писикарщик
 
Аватар для Bersenev
 
Регистрация: 23.04.2009
Возраст: 53
Город: Ставрополь
Регион: 26
Машина: Opel Zafira 2007
Сообщений: 5,275
Bersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant futureBersenev has a brilliant future
По умолчанию

Цитата:
Сообщение от T_r_D Посмотреть сообщение
также попробовал написать
if (canId = 8)
{
C = (buf[3]*256+buf[2])/16;
Serial.println(C);
}
И получил пляшущие цифры ни малейшим образом не намекающие на обороты!
И не удивительно,

C = (buf[3]*256+buf[2])/16;

Я не знаю тип переменной C , но в принципе это и не важно.

buf[3]*256 - байт умножается на 256 и сохраняется в байт, то есть всегда равно 0. Теперь к нулю прибавляем байт buf[2] и делим на 16 в результате значения от 0 до 15.

а надо так, если C имеет тип unsigned int, то

C = buf[3];
C = (C*256+buf[2])/16;

То есть сначала байт преобразуем в unsigned int, а уже потом выполняем все действия, вот тогда получим правильное значение
Bersenev вне форума   Ответить с цитированием