A porting of a GPS decoding and presenting program within the mbos RTOS. It is not a definitive application but a study program to test NMEA full decoding library and a first approach to an RTOS. Many thanks to Andrew Levido for his support and his patience on teaching me the RTOS principles from the other side of the Earth. It uses NMEA library by Tim (xtimor@gmail.com) ported by Ken Todotani (http://mbed.org/users/todotani/) on public mbed library (http://mbed.org/users/todotani/programs/GPS_nmeaLib/5yo4h) also available, as original universal C library, on http://nmea.sourceforge.net

Dependencies:   mbos Watchdog TextLCD mbed ConfigFile

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Task4LedBlink.cpp Source File

Task4LedBlink.cpp

00001 #include "Task4LedBlink.h"
00002 
00003 void LedBlinkTask(void)
00004 {/**
00005  *\brief TASK 4
00006          LED 1: Quick blink=NOT fix, Slow blink=fix OK  
00007          LED 2: blinks proportionally to HDOP
00008          LED 3: blinks proportionally to VDOP
00009  */
00010 
00011  static int LedCnt1=0;
00012  //    static int LedCnt2=0;
00013  int OnH=0;
00014  int OnV=0;
00015 
00016  #define MAX 20
00017   
00018  os.SetTimer(LED_BLINK_TMR, 100, 100);
00019 
00020  while(1)
00021  {
00022     os.WaitEvent(LED_BLINK_EVT);
00023             
00024     if((info.HDOP>0)&&(info.HDOP<=2))
00025     {
00026         OnH=2;
00027     }
00028     else if((info.HDOP>2)&&(info.HDOP<=4))
00029     {
00030         OnH=4;    
00031     }
00032     else if((info.HDOP>4)&&(info.HDOP<=6))
00033     {
00034         OnH=6;    
00035     }
00036     else if((info.HDOP>6))
00037     {
00038         OnH=MAX/2;    
00039     }        
00040 
00041     if((info.VDOP>0)&&(info.VDOP<=2))
00042     {
00043         OnV=2;
00044     }
00045     else if((info.VDOP>2)&&(info.VDOP<=4))
00046     {
00047         OnV=4;    
00048     }
00049     else if((info.VDOP>4)&&(info.VDOP<=6))
00050     {
00051         OnV=6;    
00052     }
00053     else if((info.VDOP>6))
00054     {
00055         OnV=MAX/2;    
00056     } 
00057            
00058     if(info.sig == 0)
00059     {
00060         led1=!led1;
00061         led2=0;
00062         led3=0;
00063     }
00064     else
00065     {
00066        if(LedCnt1<=MAX/2)
00067        {
00068             LedCnt1++;
00069             led1=0;
00070             if(LedCnt1<OnH)
00071             {
00072                led2=!led2; 
00073             }
00074             else 
00075             {
00076                 led2=0;
00077             }    
00078             
00079             if(LedCnt1<OnV)
00080             {
00081                led3=!led3; 
00082             }
00083             else 
00084             {
00085                 led3=0;
00086             }          
00087        } 
00088        else if((LedCnt1>MAX/2)&&(LedCnt1<=MAX))
00089        {
00090             LedCnt1++;
00091             led1=1;
00092             led2=0;
00093             led3=0;
00094        }
00095        else if(LedCnt1>MAX)
00096        {
00097             LedCnt1=0;       
00098        }
00099     }
00100  }
00101 }