oooooo

Dependencies:   gps_settings_venus mbed

main.cpp

Committer:
ritvaldirandi
Date:
2014-06-04
Revision:
0:c6c878661d4e

File content as of revision 0:c6c878661d4e:

#include "mbed.h"
#include "gps_stg_venus.h"
#include "string.h"

Serial pc(USBTX,USBRX);
Serial gps(p13,p14);
GPSVenus venus(gps);
DigitalOut led1(LED1);
char data_gps[256],ns,ew,sampah[256];
int g=0, cek_gps,lock,satelit;
float waktu,latx,longx, laty, longy,dilution, altitude;
double lat_target,long_target;
double degrees, minutes, seconds;
int lattitude[3], longitude[3];

void initialize_gps()
{
    venus.setBaud_115200();
    wait(0.5); 
    gps.baud(115200);
    venus.setUpdateRate(20);
    wait(0.5);
    venus.setNmeaMessages(true, false, false, false, false, false);
}

void gps_interrupt()
{
//     char temp = gps.getc();
//     if(g==0)
//        {   led1=0;
//            data_gps[g]=temp;
//            if(data_gps[g]=='$')
//            {g=1;data_gps[0]='$';}
//        }
//    else if (g==42){g=0;}
//    else
//        {
//            data_gps[g]=temp;g++;led1=1;
//            if(data_gps[g-1]=='\r')g=0;
//        }
    char temp=gps.getc();
    if (temp=='$') {g=0;}
    data_gps[g]=temp;
    g++;
    
    
}

float trunc(float v) // pembulatan nilai
{
    if(v < 0.0) {
        v*= -1.0;
        v = floor(v);
        v*=-1.0;
    } else {
        v = floor(v);
    }
    return v;
}

void get_gps()
{       
        //if(data_gps[0]=='G'&&data_gps[1]=='P'&&data_gps[2]=='G'&&data_gps[3]=='G'&&data_gps[4]=='A'&&data_gps[5]==','){
        //$GPGGA,050749.299,0745.9647,S,11022.3071,E,0,00,,189.5,M,4.3,M,,0000*5E
        sscanf(data_gps,"$GPGGA,%f,%f,%c,%f,%c,%d,%2d,%f,%f",&waktu, &latx,&ns, &longx, &ew, &lock, &satelit, &dilution, &altitude);
           
                degrees = (latx / 100.0f);
                lattitude[0]=degrees;
                degrees= degrees-lattitude[0];
                minutes=(degrees*1000);
                lattitude[1]=minutes;
                minutes=minutes-lattitude[1];
                seconds =(minutes*1000);
                lattitude[2]= seconds;
                
                degrees = (longx / 100.0f);
                longitude[0]=degrees;
                degrees= degrees-longitude[0];
                minutes=(degrees*1000);
                longitude[1]=minutes;
                minutes=minutes-longitude[1];
                seconds =(minutes*1000);
                longitude[2]= seconds;
                       
}

void gps_ats()
{
    //fl waktu;
    if(cek_gps==1){
                sscanf(data_gps, "$GPGGA,%f,%f,%c,%f,%c",&waktu, &laty, &ns, &longy, &ew) ;
           
                if(ns == 'S') {    laty  *= -1.0; }
                if(ew == 'W') {    longy *= -1.0; }
                degrees = trunc(laty / 100.0f);
                minutes = laty - (degrees * 100.0f);
                lat_target = degrees + minutes / 60.0f;    
                degrees = trunc(longy / 100.0f);
                minutes = longy- (degrees * 100.0f);
                long_target = degrees + minutes / 60.0f;  
            }
}

void bin_dec_conv(unsigned int data)// anything to binary
{
    pc.printf("%d%d%d",(data/100),(data%100/10),(data%10));
}

void telemetry_gps(unsigned int data_1_x,unsigned int data_2_x, unsigned int data_2_y,unsigned int data_3_x, unsigned int data_3_y, unsigned int data_3_z)
{

        pc.putc(0x0D);
        bin_dec_conv(106);
        pc.putc(0x20);
        
        bin_dec_conv(data_1_x);
        pc.putc(0x20);
        
        bin_dec_conv(data_2_x);
        pc.putc(0x20);
        
        bin_dec_conv(data_2_y);
        pc.putc(0x20);
        
        bin_dec_conv(data_3_x);
        pc.putc(0x20);
        
        bin_dec_conv(data_3_y);
        pc.putc(0x20);
        
        bin_dec_conv(data_3_z);

}

int main()
{
    pc.baud(57600);
    gps.baud(115200);
    gps.attach(&gps_interrupt);
    initialize_gps();
    pc.printf("start!");
    wait(3);
    int i;
    while(1)
    {
        for(i=0;i<=65;i++)
        {
            pc.putc(data_gps[i]);
        }
        pc.putc('\t');
        get_gps();
        //telemetry_gps(lattitude[0],lattitude[1],lattitude[2],longitude[0],longitude[1],longitude[2]);
        //pc.putc('\t');
        //pc.printf("cek=%d ",cek_gps);
        pc.printf("waktu = %f\t",waktu);
        pc.printf("tinggi = %f\t",altitude);
        pc.printf("lock = %d\r",lock);
        wait(0.3);
        
    }
}