//----- Include Files --------------------------------------------------------- #include // include I/O definitions (port names, pin names, etc) #include // include I/O definitions (port names, pin names, etc) #include // include interrupt support #include "global.h" // include our global settings #include "uart.h" // include uart function library #include "rprintf.h" // include printf function library #include "timer.h" // include timer function library (timing, PWM, etc) void timerTest(void); //----- Begin Code ------------------------------------------------------------ uint32_t numofinterrupts; // total number of time interrupts since reset uint64_t time; // total number of microseconds since reset // Real time interupt function // time will equal the number of ticks that have happened // each tick is 4e-9 seconds int rtc(void) { numofinterrupts++; time = (uint64_t)numofinterrupts * 250 + TCNT2; return 0; } int pingSonar(void) { int starttime; int elapsed; float distance; // check the current time starttime = time; rprintf("%d",starttime); rprintf("\n"); // initiate ping cbi(PORTB, 5); // Power ON the sonar module. Yes 0 = on, its a PNP! sbi(PORTB, 4); // Ping! for (;(PINB & (1<<3)) != 0;); elapsed = time - starttime; elapsed = elapsed / 2; // Speed of sound at 19 degrees C = 342.785m/s distance = elapsed / 343; rprintf("%d",elapsed); rprintf("\n"); rprintf("%d",distance); rprintf("\n"); return distance; } int setup(void) { // initialize our libraries // initialize the UART (serial port) uartInit(); // set the baud rate of the UART for our debug/reporting output uartSetBaudRate(2400); // initialize rprintf system rprintfInit(uartSendByte); // print a little intro message so we know things are working rprintf("\r\n\n\nWelcome to the sonar test program!\r\n"); // set the OC1A and OC1B for PWM output sbi(DDRD, PD4); sbi(DDRD, PD5); // initialize the timer for RTC timer2Init(); timer2SetPrescaler(64); timerAttach(TIMER2OUTCOMPARE_INT, rtc); // setup the sonar pins sbi(DDRB, 4); // sets PB4 to be an output - INIT sbi(DDRB, 5); // sets PB5 to be an output - PWR cbi(DDRB, 3); // sets PB3 to be an input - ECHO cbi(PORTB, 4); // Dont ping yet cbi(PORTB, 5); // Power ON the sonar module. Yes 0 = on, its a PNP! return 0; } int main(void) { int distance; // Setup setup(); distance = pingSonar(); return 0; }