/*----------------------------------------------------------------------------*/ #include "uart.h" #include "timer.h" #define FPSIZE 2 #include "utils_float.h" #define _LCD_4BIT_INTERFACE_ /** DB4-DB7 => P0 (UPPER NIBBLE) */ /** E => P0.2 : NEEDS -ve EDGE */ /** R/W => P0.1 : 0=WR 1=RD */ /** RS => P0.0 : 0=CMD 1=DAT */ #include "textlcd.h" /*----------------------------------------------------------------------------*/ /** * Testing IR module and HC-SR04 ultrasonic sensor module * - display on both uart and lcd **/ /*----------------------------------------------------------------------------*/ MY1SBIT(IRMOD,PIN10); MY1SBIT(TRIG,PIN16); MY1SBIT(ECHO,PIN17); /*----------------------------------------------------------------------------*/ MY1SBIT(TEST_IR,PIN14); MY1SBIT(TEST_HC,PIN15); /*----------------------------------------------------------------------------*/ #define FLAG_IR 0x01 #define FLAG_HC 0x02 /*----------------------------------------------------------------------------*/ void main(void) { unsigned char wait; unsigned int tval,loop, flag; float fval, dist; char buff[16]; uart_init(); uart_puts("\r\nTESTING NMK322 STUFFS\r\n"); lcd_init(); lcd_goto_line1(); lcd_puts("TESTKIT 4 NMK322"); timer_init(); flag = 0; while (1) { if (TEST_IR==0) { if ((flag&FLAG_IR)==0) { lcd_goto_line1(); lcd_puts("TEST 4 IR MODULE"); uart_puts("\r\nTESTING IR MODULE\r\n"); flag = FLAG_IR; } lcd_goto_line2(); lcd_puts(" "); lcd_goto_line2(); lcd_puts("Waiting... "); uart_puts("\r\nWaiting... "); while (IRMOD); // outputs logic low when obstacle detected lcd_puts("|*"); uart_puts("|*"); while (!IRMOD); lcd_puts("|"); uart_puts("|\r\n"); for (loop=65000;loop;loop--); } if (TEST_HC==0) { if ((flag&FLAG_HC)==0) { lcd_goto_line1(); lcd_puts("TEST HC-SR04 MOD"); uart_puts("\r\nTESTING HC-SR04 MODULE\r\n"); flag = FLAG_HC; } lcd_goto_line2(); lcd_puts(" "); lcd_goto_line2(); timer_prep(0); TRIG = 1; for (wait=10;wait;wait--); // arounf 10us? TRIG = 0; while (!ECHO); timer_exec(); while (ECHO); timer_stop(); tval = ((unsigned int)TH0<<8)|TL0; fval = (float)tval * 1.085; // in us dist = fval / 58.0; // in cm lcd_puts("Dist:"); uart_puts("-- Distance="); float2str(buff,dist); lcd_puts(buff); lcd_puts("cm"); uart_puts(buff); uart_puts(" cm\r\n"); for (loop=65000;loop;loop--); } } } /*----------------------------------------------------------------------------*/