Saya mencoba membuat program linux ubuntu yang akan membaca data dari port serial tty (port COM di windows). Saya tidak menggunakan adaptor USB tetapi port COM sebenarnya. Ini kode komunikasi saya sejauh ini:
int OpenPort(void)
{
int fd; // file description for sp
fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_SYNC);
if(fd == -1) // port not opened
{
printf("Error:\n%s.\n", strerror(errno));
}
else
{
fcntl(fd, F_SETFL, 0);
printf("Success.\n");
}
return(fd);
} // Open sp
void Communicate(void)
{
struct termios settings;
tcgetattr( fd, &settings );
cfsetispeed(&settings, B9600); // Set bouds
cfsetospeed(&settings, B9600);
settings.c_cflag &= ~PARENB; // set no parity, stop bits, data bits
settings.c_cflag &= ~CSTOPB;
settings.c_cflag &= ~CSIZE;
settings.c_cflag |= CS8;
tcflush( fd, TCIFLUSH );
if (tcsetattr(fd, TCSAFLUSH, &settings)!= 0)
{
printf("Error message");
}
//Create byte array
unsigned char send_bytes[] = { 0x1, 0x6, 0x2, 0xAA, 0x2, 0x3, 0xB8, 0x4 };
write(fd, send_bytes, sizeof(send_bytes)); // Send data
printf("Data sent. \n");
char buffer[64]; // buffer to receive data
printf("I'm reading data...\n");
int n = read(fd, buffer, sizeof(buffer));
if (n < 0)
printf("Failed to read\n");
int i;
printf("Showing data...\n");
for(i=0; i<sizeof(buffer); i++)
{
printf("Hex: %x\n", buffer[i]);
}
printf("Closing...\n");
close(fd);
printf("All done!\n");
}
Saya punya beberapa masalah di sini:
- Setelah saya menjalankan program setelah dijalankan dengan benar tetapi ketika saya mencoba menjalankannya lagi, program berhenti di "Saya sedang membaca data..." dan tidak dapat dimulai bahkan setelah saya me-restart komputer. Setelah beberapa waktu, saya dapat menjalankan program lagi.
- Setelah program mengembalikan data, ia akan mengirimi saya data hex seperti A7, 9F dll. tetapi ini memberi saya nilai integer.
- Haruskah saya dan bagaimana cara menghapus array buffer untuk mengosongkan memori
Adakah yang bisa membantu mengatasi masalah ini?