Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя
Показано с 11 по 20 из 22
  1. #11
    Модератор
    Регистрация
    06.07.2008
    Возраст
    46
    Сообщений
    414
    Вес репутации
    436

    По умолчанию Re: а как два байта послать?

    учитывая, что обороты двигателя с точностью до 1 в минуту никогда не нужно знать, можно посылать не сами обороты, а обороты, разделенные на что-либо, к примеру, на 30. Тогда 255 будет соответствовать 7650 оборотам.

    Ну или делать делать какой-никакой протокол обмена.

  2. #12
    Продвинутый
    Регистрация
    03.06.2008
    Возраст
    48
    Сообщений
    320
    Вес репутации
    326

    По умолчанию 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!
    Последний раз редактировалось XsanderS; 21.10.2011 в 16:32.

  3. #13
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,379
    Вес репутации
    10

    По умолчанию Re: а как два байта послать?

    А arduino что шлет первым старший или младший байт?

  4. #14
    Продвинутый
    Регистрация
    03.06.2008
    Возраст
    48
    Сообщений
    320
    Вес репутации
    326

    По умолчанию 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.

    ////////////////////////////////////////////////////////////
    Я в воскресенье у вас буду в гостях, можно пару кардуин будет купить?
    Последний раз редактировалось mebitek; 22.10.2011 в 05:41.

  5. #15
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,379
    Вес репутации
    10

    По умолчанию 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
    Поповоду приезда, я в Москве буду поздно вечером

  6. #16
    Продвинутый
    Регистрация
    03.06.2008
    Возраст
    48
    Сообщений
    320
    Вес репутации
    326

    По умолчанию Re: а как два байта послать?

    Chip спасибо!
    Если делать как ты сказал, то получается вот что:
    число от 0 до 1023 принимается нормально, число 1024 принимается как 0, а свыше 1024 начинается отсчёт с нуля, то есть отправляешь 1025 получаешь 1, отсылаешь
    1026 получаешь 2 и так далее! Из-за чего так?

  7. #17
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,379
    Вес репутации
    10

    По умолчанию Re: а как два байта послать?

    Потому что маска 768 , для АЦП больше и не требовалось, у него разрядность 10бит
    768+255=1023, а Тебе для передачи 16 битного значения нужно использовать маску 65280
    Я бы все таки посоветовал разобраться с логическими преобразованиями, а то без этого много не на программируешь.
    Я программирование начал осваивать именно с логических преобразований.
    Последний раз редактировалось Chip; 22.10.2011 в 19:37.

  8. #18
    Продвинутый
    Регистрация
    03.06.2008
    Возраст
    48
    Сообщений
    320
    Вес репутации
    326

    По умолчанию Re: а как два байта послать?

    Спасибо большое!!! Буду разбираться!

  9. #19
    Продвинутый
    Регистрация
    03.06.2008
    Возраст
    48
    Сообщений
    320
    Вес репутации
    326

    По умолчанию Re: а как два байта послать?

    Chip а подскажи чего почитать про логические преобразования, чтоб по доступнее было? Плиз!

  10. #20
    Продвинутый
    Регистрация
    03.06.2008
    Возраст
    48
    Сообщений
    320
    Вес репутации
    326

    По умолчанию 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 пролезает)))))) Спасибо!)

Страница 2 из 3 ПерваяПервая 123 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •