Как я могу сравнить показания двух последовательных портов на Arduino Mega?
Я пишу некоторый код, который сравнивает информацию от двух Arduino Unos с помощью Arduino Mega 2560. Проблема, с которой я сталкиваюсь, заключается в том, что когда я читаю информацию, поступающую через Serial1
и Serial2
в моих утверждениях if
, я получаю оба входа на свой серийный монитор для Mega, но если я попытаюсь сравнить их после того, как прочитаю их, это не сработает. это предназначено. Я не знаю, может быть, у меня отсутствует какой-то синтаксис в моем коде или я делаю это неправильно, но я был бы признателен за любую помощь, которую я могу получить.
byte inData;
byte inDataTwo;
void setup()
{
// Открытие последовательной связи и ожидание открытия порта:
Serial.begin(9600);
Serial1.begin(9600);
Serial2.begin(9600);
while (!Serial)
{
; // ждем подключения последовательного порта. Требуется только для родного порта USB
}
}
void loop()
{
if (Serial1.available()>0 )
{
inData = Serial1.read();
Serial.print(char(inData));
}
if (Serial2.available()>0)
{
inDataTwo = Serial2.read();
Serial.print(char(inDataTwo));
}
if(inData == inDataTwo)
{
Serial.print("true");
}
else
{
Serial.print("False");
}
}`
@Carl Fern, 👍0
Обсуждение1 ответ
Я думаю, что ваш код в целом реализован неправильно. Даже если бы он работал «как задумано», он не вел бы себя так, как вам хотелось бы.
Первая проблема заключается в том, что вы опрашиваете байты, полученные асинхронно. Это означает, что две последовательности байтов должны быть не только равными, они также должны быть отправлены «одновременно», если они должны пройти ваш сравнительный тест. Поскольку atmega выполняет loop()
очень быстро, допустимое время очень мало.
Во-вторых, переменные, в которые вы записываете полученные значения, не сбрасываются, а это означает, что как только они получат одинаковое значение, они будут передавать оператор if до тех пор, пока не будет получен другой байт. На самом деле они не инициализированы и поэтому в самом начале будут 0
. Поэтому мне интересно, почему ваш интерфейс Serial
не очищается true
. Это вообще весь код?
В качестве решения я предлагаю накапливать полученные байты в буфере и ждать байта завершения soecific (часто /n
). Если был получен символ завершения, выполните сравнение в этом буфере.
- Как разделить входящую строку?
- Какова максимальная длина провода для последовательной связи между двумя Arduino?
- Последовательная связь между двумя Arduino (запрос и получение)
- Не нашел датчик отпечатков пальцев :( Arduino Mega 2560 Adafruit Fingerprint Sensor
- Модуль SIM808: команда определения местоположения GSM (AT+CIPGSMLOC=1,1) дает неверное значение после выполнения команды отправки сообщения (AT+CMGS=+91xxxxxxxx)
- Как правильно получить MIDI с Arduino, с 6n138?
- Bluetooth-модуль HC-05 не принимает AT-команды
- Сбой Arduino во время последовательной печати без очевидной причины
Можете ли вы также предоставить образец вывода .. !?, @varun
что вы имеете в виду образец вывода? когда я получаю информацию о arduino mega, я получаю результаты от обоих моих arduino unos и могу отображать их на экране. Я отправляю письма через лазер, а два Arduino преобразуют информацию обратно в символы, и я могу отобразить это на экране. когда я подключаю их к arduino mega, mega отображает на экране оба одинаковых символа. Я знаю, что работает, но когда я сравниваю их, программа, кажется, не делает то, что я хочу делать., @Carl Fern
напечатать их в
else
, @JurajВы можете сказать, что вы отправляете на серийный терминал?, @Vaibhav
Кроме того, я вижу маленький символ после вашей последней скобки для цикла(). Я думал, что это пятнышко грязи на моем экране, но у вас на самом деле есть персонаж., @Neal Rosenblum