Не удается прочитать последовательный ввод

#c #serial-port #arduino

#c #последовательный порт #arduino

Вопрос:

У меня есть Arduino, подключенный через usb к моему компьютеру. Из него я пытаюсь прочитать из COM-порта.

Кто-нибудь может увидеть, есть ли в этом что-то явно неправильное???

 void main()
{   
    int exitStatus;
    unsigned int bytesToRead = 1;
    unsigned char *buffer = (unsigned char*) malloc(sizeof(unsigned char)   1);
    Serial *connection = new Serial("COM3");

    if(connection->IsConnected()){
        exitStatus=connection->ReadData(buffer, bytesToRead);
        if( *buffer > 0)
            <statement I'm trying to hit>
    }

}    
  

Прямо сейчас он всегда попадает в «оператор, который я пытаюсь выполнить», даже если это не предполагается. Отладка всегда показывает, что содержимое буфера — это много мусора. Я знаю, что то, что поступает с последовательного ввода, должно быть правильным, потому что из того, что я вижу на последовательном мониторе, все выглядит хорошо.

Мысли?

Ответ №1:

Вы не оцениваете exitStatus переменную, что может указывать на то, что чтение прошло успешно.

Также вам не нужно использовать память malloc, если вы хотите прочитать только один байт, вы можете просто передать указатель на локальную переменную char .

И пока я этим занимаюсь, тип для main — либо int main() или int main(int argc, char** argv)

 int main()
{   
    int exitStatus;
    unsigned int bytesToRead = 1;
    unsigned char buffer;
    Serial *connection = new Serial("COM3");

    if(connection->IsConnected()){
        exitStatus=connection->ReadData(amp;buffer, 1);
        if((exitStatus == <Insert the value for a correct read status>) amp;amp; (buffer != '0'))
            <statement I'm trying to hit>
    }
    return 0;
}
  

Обновить
Изменил проверку ! = 0 на != ‘0’, поскольку я подозреваю, что из последовательного интерфейса поступает символ ‘0’ (= 0x30).

Комментарии:

1. ах, я виноват в этом. Я работал над этим кодом так много раз, что не заметил этого. Но проблема не в этом. Он всегда сообщает об успешном чтении, устанавливая ExitStatus как количество прочитанных байтов.

2. @ZacAttack Можете ли вы проверить с помощью программы терминала, действительно ли нет связи? Также правильно ли настроен порт (скорость передачи данных, стоп-биты, четность). Я не вижу очевидной проблемы в вашем коде.

3. Я использую последовательный монитор Arduino, чтобы посмотреть, что поступает. Это поток «0», если я не нажму кнопку вниз. Затем, пока он не работает, это поток на ‘1. Я добавил ваши исправления, и они определенно очистили место! Но я все еще получаю странные результаты в отладчике

4. и скорость передачи данных в порядке, сейчас я смотрю на четность и стоп-биты

5. На самом деле я не знаю, как определить, какую комбинацию четности и стоп-битов я должен использовать.