Sensor_Project

Dependencies:   N5110 SRF02 mbed

main.cpp

Committer:
xinxinwc
Date:
2016-05-05
Revision:
0:fdd8c55c50e9

File content as of revision 0:fdd8c55c50e9:


#include "main.h"

int main()
{
    int distance;
    int lcd_message;
    char distance_array [14];
    lcd.init();  // initialise display
    lcd.normalMode();      // normal colour mode
    lcd.setBrightness(1.0); // put LED backlight on 50%
    for (int i=0; i < 23; i++) {
        lcd.drawCircle(42,24,i,0);
        lcd.refresh();
        wait(0.2);
    }
    lcd.clear();
    lcd.printString("Welocme to",15,1);
    lcd.printString ("Sensor Project",2,3);
    lcd.printString("Xin Zhang",0,5);
    wait (2.0);
    lcd.clear();
    lcd.refresh();
    ticker.attach(&timer_isr,0.5); //2Hz   LED flash
    detect.attach(&detect_isr,0.5); //2HZ  Sensor detect 
    while(1) {

        if(g_detect_timer_flag == 1) {
            for(int i=0; i<=9; i++) {                     //Detect 10 times 
                distanceArray[i]=sensor.getDistanceCm(); // read sensor distance in cm and print over serial port
            }

            int sum=0;                                  // Make sensor to detect 10 times and add togther in order to get mean value
            for(int i=0; i<=9; i++) {
                sum=sum+distanceArray[i];
            }

            distance = sum/10;                          // Getting Mean vlaue

            lcd_message = sprintf(distance_array, "D = %d CM",distance);// short delay before next measurement

            lcd.printString(distance_array,5,1);

            int x;
            clearCar(xOld,40);
            if (distance >= 300) {                       // situation which distance is above 300
                x=2;
                xOld=2;
                drawCar(x,40);

                lcd.clearPixel(77,9);      //Delete symbol for exclamation mark
                lcd.clearPixel (77,10);
                lcd.clearPixel (77,11);
                lcd.clearPixel (77,12);
                lcd.clearPixel (77,13);
                lcd.clearPixel (77,15);

                lcd.clearPixel (79,9);
                lcd.clearPixel (79,10);
                lcd.clearPixel (79,11);
                lcd.clearPixel (79,12);
                lcd.clearPixel (79,13);
                lcd.clearPixel (79,15);

                lcd.clearPixel (75,9);
                lcd.clearPixel (75,10);
                lcd.clearPixel (75,11);
                lcd.clearPixel (75,12);
                lcd.clearPixel (75,13);
                lcd.clearPixel (75,15);

                buzzer.period(1.0/1000.0);      // buzzer cloesd
                buzzer=0.0;
                wait(0.2);

            } else if(distance < 300 && distance >16) {     // situation  which distance is from 16 to 300
                x = 68.0-(66.0/284 * distance);
                xOld = 68.0-(66.0/284 * distance);
                drawCar(x,40);

                lcd.clearPixel(77,9);
                lcd.clearPixel (77,10);
                lcd.clearPixel (77,11);
                lcd.clearPixel (77,12);
                lcd.clearPixel (77,13);
                lcd.clearPixel (77,15);

                lcd.clearPixel (79,9);
                lcd.clearPixel (79,10);
                lcd.clearPixel (79,11);
                lcd.clearPixel (79,12);
                lcd.clearPixel (79,13);
                lcd.clearPixel (79,15);

                lcd.clearPixel (75,9);
                lcd.clearPixel (75,10);
                lcd.clearPixel (75,11);
                lcd.clearPixel (75,12);
                lcd.clearPixel (75,13);
                lcd.clearPixel (75,15);

                buzzer.period(1.0/1000.0);    // buzzer closed
                buzzer=0.0;
                wait(0.2);


            } else {                                     // situation which distance is below 16 and
                x=67;
                xOld = 67;
                drawCar(x,40);

                lcd.setPixel(77,9);  // symbol for exclamation mark
                lcd.setPixel (77,10);
                lcd.setPixel (77,11);
                lcd.setPixel (77,12);
                lcd.setPixel (77,13);
                lcd.setPixel (77,15);

                lcd.setPixel (79,9);
                lcd.setPixel (79,10);
                lcd.setPixel (79,11);
                lcd.setPixel (79,12);
                lcd.setPixel (79,13);
                lcd.setPixel (79,15);

                lcd.setPixel (75,9);
                lcd.setPixel (75,10);
                lcd.setPixel (75,11);
                lcd.setPixel (75,12);
                lcd.setPixel (75,13);
                lcd.setPixel (75,15);

                buzzer.period(1.0/1000.0);    //buzzer up
                buzzer=0.5;
                wait(0.2);




            }
        }
        lcd.setPixel(82,43);   //Building walls
        lcd.setPixel(81,42);
        lcd.setPixel(80,41);
        lcd.setPixel(79,40);
        lcd.setPixel(78,39);
        lcd.setPixel(77,38);
        lcd.setPixel (77,37);
        lcd.setPixel(77,36);
        lcd.setPixel (77,35);
        lcd.setPixel (77,34);
        lcd.setPixel (77,33);
        lcd.setPixel (77,32);
        lcd.setPixel (77,31);
        lcd.setPixel (77,30);
        lcd.setPixel (77,29);
        lcd.setPixel (77,28);
        lcd.setPixel (78,28);
        lcd.setPixel (79,29);
        lcd.setPixel (80,30);
        lcd.setPixel (81,31);
        lcd.setPixel (82,32);

        if ( distance >=0 && distance <= 16) {   //When the distance is from 0 to 16, the two led will flash and show warining signal
            if(g_timer_flag == 1) {
                r_led1 = !r_led1;
                r_led2= !r_led2;
            }
        } else {                                //When the distance is above 16, the only one led flashs
            if(g_timer_flag == 1) {
                r_led1 = !r_led1;
                r_led2= 0;
            }
        }
        lcd.refresh();
        sleep();
    }
}

void timer_isr()
{
    g_timer_flag = 1;   // set flag in ISR
}

void detect_isr()
{
    g_detect_timer_flag = 1;
}

void drawCar(int x,int y)   //43
{
    lcd.setPixel(x,y);
    lcd.setPixel(x+1,y);
    lcd.setPixel(x+2,y);
    lcd.setPixel (x+3,y);
    lcd.setPixel (x+4,y);
    lcd.setPixel (x+5,y);
    lcd.setPixel (x+6,y);
    lcd.setPixel (x+7,y);
    lcd.setPixel (x+8,y);
    lcd.setPixel (x+9,y);
    lcd.setPixel (x+10,y);
    lcd.setPixel (x,y-1);
    lcd.setPixel (x+1,y-2);
    lcd.setPixel (x+2,y-3);
    lcd.setPixel (x+3,y-3);
    lcd.setPixel (x+4,y-3);
    lcd.setPixel (x+5,y-3);
    lcd.setPixel (x+6,y-3);
    lcd.setPixel (x+7,y-3);
    lcd.setPixel (x+9,y-1);
    lcd.setPixel (x+8,y-2);
    lcd.setPixel (x+10,y);
    lcd.drawCircle(x+2,y+2,1,1);
    lcd.drawCircle(x+7,y+2,1,1);

}

void clearCar(int x,int y)
{
    lcd.clearPixel(x,y);
    lcd.clearPixel(x+1,y);
    lcd.clearPixel(x+2,y);
    lcd.clearPixel (x+3,y);
    lcd.clearPixel (x+4,y);
    lcd.clearPixel (x+5,y);
    lcd.clearPixel (x+6,y);
    lcd.clearPixel (x+7,y);
    lcd.clearPixel (x+8,y);
    lcd.clearPixel (x+9,y);
    lcd.clearPixel (x+10,y);
    lcd.clearPixel (x,y-1);
    lcd.clearPixel (x+1,y-2);
    lcd.clearPixel (x+2,y-3);
    lcd.clearPixel (x+3,y-3);
    lcd.clearPixel (x+4,y-3);
    lcd.clearPixel (x+5,y-3);
    lcd.clearPixel (x+6,y-3);
    lcd.clearPixel (x+7,y-3);
    lcd.clearPixel (x+9,y-1);
    lcd.clearPixel (x+8,y-2);
    lcd.clearPixel (x+10,y);
    lcd.drawCircle(x+2,y+2,1,2);
    lcd.drawCircle(x+7,y+2,1,2);
}