User Tag List

Показано с 31 по 40 из 42

Тема: Вопросы начинающего Ардуинщика...

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #28
    SoftWareGuy
    Гость

    По умолчанию

    Цитата Сообщение от SoftFelix Посмотреть сообщение
    Вот так заработает?
    Есть одна небольшая ошибочка - лишняя точка с запятой в условии if (receivedByte != syncSuccess1986[numBytesReceived]). Это приведет к тому что в случае несовпадения байта выполнится пустая инструкция, а затем будет безусловный return false. Плюс кое-какие стилистические правки я добавил чтобы по возможности избавляться от "магических чисел" и дать возможность компилятору самому вычислять количество байт ответа основываясь на содержимом массива syncSuccess1986 - он обязательно должен быть типа byte иначе оператор sizeof вернет неправильное количество байт.

    Код:
    bool SYNC_1986_handshake()
    {
      while (Serial.available()) Serial.read();
    
      for (int i = 0; i < 512; i++) {
        Serial.write(0);
      }
      Serial.flush();
    
      byte syncSuccess1986 [] = {0x0D, 0x0A, 0x3E}; //для проверки ответа от 1986ВЕ91
      const int NumBytesToReceive = sizeof(syncSuccess1986); // количество байт которые ждем в ответ
    
      int numBytesReceived = 0; // здесь храним количество принятых байт
      for (int istep = 0; istep < 5; ++istep) // делаем несколько попыток считать ответ
      {
        while (Serial.available() && numBytesReceived < NumBytesToReceive) // читаем все что уже есть во входном буфере
        {
          byte receivedByte = Serial.read(); // можно сохранить это где нибудь чтобы проверить значение
          if (receivedByte != syncSuccess1986[numBytesReceived]) //парсим принятый байт на правильное совпадение с ответом 1986
          {
            return false; //байт не совпал - выходим с ошибкой
          }
          ++numBytesReceived; // храним количество принятых байт
        }
    
        if (numBytesReceived == NumBytesToReceive) // получили все что нужно
        {
          return true; // возвращаем успех
        }
        delay(10);
      }
    
      return false; // возвращаем неудачу
    }

    Этот пользователь поблагодарил SoftWareGuy за это полезное сообщение:

    SoftFelix(16.02.2020)

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

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

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

Похожие темы

  1. Вопросы начинающего ATM'щика
    от Максагор в разделе Разный софт
    Ответов: 43
    Последнее: 19.09.2023, 13:52
  2. Вопросы начинающего спектрумопаятеля :)
    от The_Medved в разделе Несортированное железо
    Ответов: 44
    Последнее: 08.10.2011, 22:59
  3. Монитор начинающего Спектрумиста
    от Doktor в разделе Для начинающих
    Ответов: 5
    Последнее: 14.04.2011, 11:02
  4. Ответов: 5
    Последнее: 25.08.2008, 01:13

Ваши права

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