Невозможно прочитать последовательный порт через Arduino так, как ПО монитора последовательного порта читает его
У меня есть устройство, которое каждую минуту передает данные Rx Tx. Я подключил его к компьютеру. Я загрузил программное обеспечение монитора последовательного порта, и вот данные, которые я захватил с помощью этого программного обеспечения.
Теперь, когда я пытаюсь захватить те же данные с помощью Arduino, он захватывает что-то еще, как вы можете видеть на изображении ниже. Я попытался прочитать его как hex, char, byte, unsigned int, но он просто не читает данные должным образом.
Здесь я предоставил свой код. Может кто-нибудь, пожалуйста, определить проблему для меня? Я застрял на этом, по крайней мере, на 2 недели, и это просто нехорошее чувство! Любая помощь будет очень признательна.
Использование Arduino Ethernet со слотом для карт microSD
//#include <SoftwareSerial.h>
#include <SPI.h>
#include <SD.h>
static const int baud = 19200;
static const int chipSelect = 4;
static const int rx = 0;
static const int tx = 1;
File dataFile;
//SoftwareSerial serialPort = SoftwareSerial(rx, tx);
void setup() {
Serial.begin(baud); // opens serial port, sets data rate to 19200 bps
while (!Serial) {
;
}
//serialPort.begin(baud);
// pinMode(rx, INPUT);
// pinMode(tx, OUTPUT);
Serial.print("Initializing SD card...");
if (!SD.begin(chipSelect)) {
Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");
dataFile = SD.open("data.txt", FILE_WRITE);
Serial.println("Data file created!");
dataFile.close();
}
unsigned int incomingByte = 0;
void loop()
{
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();
Serial.print(incomingByte, HEX);
}
dataFile = SD.open("data.txt", FILE_WRITE);
dataFile.println(incomingByte, HEX);
dataFile.close();
}
Вы можете создать программное обеспечение монитора последовательного порта с помощью консольного приложения C#, вот код для этого:
using System;
using System.IO.Ports;
using System.Text;
class PortDataReceived
{
public static void Main()
{
SerialPort mySerialPort = new SerialPort("COM3");
mySerialPort.BaudRate = 19200;
mySerialPort.Parity = Parity.None;
mySerialPort.StopBits = StopBits.One;
mySerialPort.DataBits = 8;
mySerialPort.Handshake = Handshake.None;
mySerialPort.RtsEnable = true;
mySerialPort.Open();
while (true)
{
string data = ReadData(mySerialPort);
if (!string.IsNullOrEmpty(data))
{
Console.WriteLine(data);
}
}
}
public static string ReadData(SerialPort serial)
{
byte[] buffer = new byte[serial.BytesToRead];
serial.Read(buffer, 0, buffer.Length);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < buffer.Length; i++)
sb.AppendFormat("{0:X2} ", buffer[i]);
return sb.ToString();
}
}
@JayB, 👍0
Обсуждение1 ответ
Не рекомендуется использовать контакты 0 и 1 для программного обеспечения, так как они обычно подключены к последовательному
И не только это, но они, похоже, смешивают и сопоставляют как аппаратное, так и программное обеспечение, последовательное на одних и тех же выводах. Это никогда не будет очень приятно даже в лучшие времена. На самом деле я подозреваю, что все последовательные вызовы программного обеспечения завершатся неудачей, так как контакты настроены для подключения к периферийному устройству UART., @Majenko
Я обновил ответ, чтобы объяснить, почему 0/1-это плохая идея :), @Visual Micro
Спасибо вам за вашу быструю реакцию, ребята. Каково было бы решение для этого? Я хочу прочитать последовательный порт. И только контакты 0 и 1 могут дать мне доступ к линиям RX и TX., @JayB
Удалите все ссылки на программный последовательный порт. Просто используйте Серийный. Программный материал предназначен для тех случаев, когда вы хотите использовать контакты, ОТЛИЧНЫЕ ОТ контактов TX/RX., @Majenko
Обновил свой код в соответствии с вашими предложениями. Хотя он все еще дает те же шестнадцатеричные значения!, @JayB
И чего бы вы ожидали от него, когда вы говорите ему отправлять шестнадцатеричные значения?, @Majenko
Majenko: Значения на первом изображении, начиная с F8 до BF, в следующей строке представляют собой один набор данных. Я хочу захватить все данные точно так, как это программное обеспечение захватывает, но с помощью arduino. Визуальный-Микро: Я обновил код. Закомментировал ранее существовавшие разделы., @JayB
Просто прочитайте строку из последовательного порта. строка str = Последовательный.ReadToEnd(), На arduino .print() отправляет строку,. write() отправляет байт, @Visual Micro
- AT-команда не отвечает на последовательный монитор
- Как отправить команду AT на sim800l с помощью SoftwareSerial
- Ардуино для чтения с преобразователя RS232 в последовательный модуль TTL
- Как связаться с ESP8266 ESP01, отправив данные через программный сериал на Arduino Uno?
- myserial.available() возвращает нулевой байт
- Последовательная связь от Arduino до ESP8266 NodeMCU работает, но от NodeMCU до Arduino не работает
- SoftwareSerial данные недоступны
- последовательная передача данных на GPS-экране duinopeak
Не рекомендуется использовать контакты 0 и 1 для программного обеспечения, так как они обычно подключены к последовательному, @Visual Micro
Не только это, но и то, что они, похоже, смешивают и сопоставляют как аппаратные, так и программные серийные номера на одних и тех же выводах. Это никогда не будет очень хорошо в лучшие времена. На самом деле я подозреваю, что все последовательные вызовы программного обеспечения завершатся неудачей, так как контакты настроены для связи с периферийным устройством UART., @Majenko
Я обновил ответ, чтобы объяснить, почему 0/1-плохая идея :), @Visual Micro
Спасибо вам за вашу быструю реакцию, ребята. Как бы это можно было исправить? Я хочу прочитать последовательный порт. И только контакты 0 и 1 могут дать мне доступ к линиям RX и TX., @JayB
Удалите все ссылки на software serial. Просто используйте Серийный номер. SoftwareSerial предназначен для тех случаев, когда вы хотите использовать контакты, ОТЛИЧНЫЕ ОТ контактов TX/RX., @Majenko
Обновил свой код в соответствии с вашими предложениями. Однако он по-прежнему дает те же шестнадцатеричные значения!, @JayB
И что бы вы ожидали, что он отправит, когда вы скажете ему отправить шестнадцатеричные значения?, @Majenko
Майенко: Значения на первом изображении, начиная с F8 до BF, в следующей строке-это один набор данных. Я хочу захватить все данные точно так, как это программное обеспечение захватывает, но с помощью arduino. Visual-Micro: Я обновил код. Прокомментировал ранее существовавшие разделы., @JayB
Просто прочитайте строку из последовательного порта. строка str = Последовательный.ReadToEnd(), На arduino .print() отправляет строку, .write() отправляет байт, @Visual Micro