Mendeteksi koneksi serial yang terputus pada Arduino

Koneksi serial pada berfungsi sebagai sarana komunikasi (–utama) pada arduino. Untuk mengetahui apakah port serial tersebut terhubung atau tidak dapat dideteksi dengan membaca register ‘frame error’, yaitu register yang bernilai 1 apabila frame serial yang diterima tidak sesuai dengan format yang ditentukan.

Ketika koneksi serial diputus, maka kondisi pin RX akan bernilai 0. Kondisi pin RX 0 juga berarti dimulainya pengiriman sebuah frame (start bit), namun dikarenakan koneksi terputus maka bit yang diterima berikutnya akan bernilai 0 juga. seperti kita ketahui sebuah frame komunikasi serial terdiri dari start bit, data, parity dan stop bit. dan tentu saja block serial akan melaporkan kesalahan ini sebagai ‘frame error’ yang bisa dimanfaatkan untuk mendeteksi menyambung atau terputusnya koneksi komunikasi serial.

Tester : Arduino mega 2560 (memanfaatkan Serial1)

Skema detektor serial:

catatan: metode register¬† ‘frame error’ ini tidak berfungsi pada Serial biasa (Serial0) karena Serial0 terhubung ke downloader (USB to Serial)

Program/sketch:

bool serial1TidakTersambung = false;

void setup() {
	Serial.begin(9600);
	Serial1.begin(9600);
	Serial.println("Mendeteksi koneksi serial");
	Serial.println("Jika Koneksi serial dilepas, maka arduino akan mengirimkan pesan");
	Serial.println("'Serial1 tidak terhubung' hingga Serial port menerima data valid");
  Serial.println("https://www.semesin.com/project");
}
	
void loop() {
	char c;
	if(Serial1.available())
	{
		if(UCSR1A & (1<<FE1))
		{
			serial1TidakTersambung = true;
		}
		else
		{
			serial1TidakTersambung = false;
			c = Serial1.read();
			Serial.print(c);
		}
	}
	
	if(serial1TidakTersambung)
	{
		Serial.println("Serial1 tidak terhubung");
		delay(1000);
	}
}