4.1.4. Pengendalian Komunikasi USART
Pada bagian ini membahas program yang berfungsi sebagai komunikasi serial USART untuk mengkomunikasikan antara laptop yang digunakan dengan mikrokontroler
Atmega 32. Program pengendalian komunikasi USART ditulis sebagai berikut:
int a; unsigned char b[16];
void komunikasi {
a=getchar; lcd_gotoxy0,0;
sprintfb,komunikasi= d ,a; lcd_putsb;
delay_ms100; lcd_clear;delay_ms10;
}
Pada tahap komunikasi serial baudrate yang digunakan bernilai 9600bps. Fungsi “ getchar
” yaitu untuk menerima karakter dari laptop agar mikrokontroler dapat menerima pada saat mengirimkan karakter yang mendefinisikan perintah setiap kondisi atau
pemanggilan fungsi pada karakter.
4.1.5. Pengendalian Motor Servo
Program pengendali motor servo menggunakan interrupt timer0 sebagai pembangkit pulsa untuk menggerakan motor servo. Listing program pengendali sudut putar
motor servosebagai berikut :
define servo1 PORTB.0 define servo2 PORTB.1
define servo3 PORTB.2 signed int i=0,data1=0,data2=0,data3=0;
Timer 0 overflow interrupt service routine interrupt [TIM0_OVF] void timer0_ovf_isrvoid
{
if i864 {i=0;}
else {i++;}
if idata1 {servo1=1;}
else {servo1=0;}
if idata2
{servo2=1;} else
{servo2=0;} if idata3
{servo3=1;} else
{servo3=0;} }
Listing program di atas adalah penyetingan port yang digunakan motor servo.
Kodisi nilai i++ artinya adalah timer mulai mencacah dari 0 hingga 255, jika lebih dari itu maka timer overflow dan mulai mengaktifan PWM. Nilai 864 adalah nilai overflow selama
perioda motor servo yaitu 20ms.Kemudian pemberian logika high pada tiap port, jika kondisi nilai i lebih kecil dari pada nilai variabel data1servo1, data2servo2,
data3servo3, sehingga mulai memberikan pulsa agar motor servo bergerak dan logika low
jika kondisinya tidak terpenuhi maka portb akan direset.
void siaga_robot {
data1=64; 90 delay_ms100;
data2=69; 80 delay_ms100;
data3=75; 90 delay_ms100;
}
Pada program ini berfungsi untuk memberikan nilai OCR untuk menentukan sudut yang diinginkan sesuai kondisi. Program diatas salah satu kondisi lengan robot pada
kondisi siaga.Program ditulis sebagai berikut:
void angka_satu {
12 data1=64; 90
delay_ms100; data2=69; 90
delay_ms100;
for data3=75;data3=80;data3++ 100 {
delay_ms100; };
mundur for data2=69;data2=50;data2--
{ delay_ms100;
}; siaga2_robot;
delay_ms500; for data2=50;data2=69;data2++
{ delay_ms100;
}; }
Program diatas merupakan program penulisan angka 1 Untuk mempermudah dalam penentuan tahapan sudut motor servo, digunakan fungsi “for” untuk mencacah nilai OCR
secara satu per satu. Setiap tahap diberikan fungsi “for” dan diberi “delay” supaya
pergerakan lengan robot lebih halus dan pelan. Program pengulisan angka 1 mengacu pada flowchart 3.30. Program pergerakan lainnya dapat di lihat pada Lampiran L37.
4.2. Implementasi GUI Matlab dan Program Pengenalan Ucapan