• Tidak ada hasil yang ditemukan

Analisis Latency Pengiriman Data Posisi Dan Kecepatan Pada Modul Gps Sim908-C

N/A
N/A
Protected

Academic year: 2017

Membagikan "Analisis Latency Pengiriman Data Posisi Dan Kecepatan Pada Modul Gps Sim908-C"

Copied!
27
0
0

Teks penuh

(1)

41 const int button_start = 7; //pin for start GPS

const int button_stop = 6; //pin for stop GPS

int buttonstate_start; // keadaaan tombol start

int buttonstate_stop; //keadaaan tombol stop

int ledPin = 13;

//---

char aux;

int x = 0;

//char N_S,W_E;

char frame[200];

char latitude[15];

char longitude[15];

char altitude[6];

char date[16];

char time[7];

(2)

42 char speedOTG[10];

char course[10];

float

old_latitude,old_longitude,new_latitude,new_longitude;

float micros_old,micros_new,waktu;

float jarak,velocity;

void setup(){

pinMode(ledPin, OUTPUT); //led for signal gps

pinMode(onModulePin, OUTPUT); //start module gps

pinMode(button_start, INPUT); //start button

pinMode(button_stop, INPUT); //stop button

Serial.begin(115200);

if ( u8g.getMode() == U8G_MODE_R3G3B2 ) {

u8g.setColorIndex(255); // white

}

(3)

43 u8g.setColorIndex(3); // max intensity

}

else if ( u8g.getMode() == U8G_MODE_BW ) {

u8g.setColorIndex(1); // pixel on

}

else if ( u8g.getMode() == U8G_MODE_HICOLOR ) {

u8g.setHiColorByRGB(255,255,255);

}

Serial.println("Starting...");

power_on();

delay(3000);

// starts the GPS and waits for signal

while ( start_GPS() == 0);

(4)

44 void draw1(void) // display start

{

// graphic commands to redraw the complete screen

should be placed here

u8g.setFont(u8g_font_gdr11);

u8g.drawStr( 4, 14, "Lat : ");

u8g.setFont(u8g_font_gdr11);

//u8g.setFont(u8g_font_osb21);

u8g.setPrintPos( 4, 36);

u8g.print(latitude);

u8g.setFont(u8g_font_gdr11);

u8g.drawStr( 4, 58, "Long :");

u8g.setFont(u8g_font_gdr11);

u8g.setPrintPos(4, 80);

(5)

45 }

void draw2(void) //display stop

{

u8g.setFont(u8g_font_gdr11);

u8g.drawStr( 4, 14, "Lat: "); //menampilkan data latitude

u8g.setFont(u8g_font_gdr11);

u8g.setPrintPos( 16, 14);

u8g.print(latitude); //nilai latitude

u8g.setFont(u8g_font_gdr11);

u8g.drawStr( 4, 20, "Long:");//menampilkan data longitude

u8g.setFont(u8g_font_gdr11);

u8g.setPrintPos( 16, 20);

u8g.print(longitude); //nilai longitude

(6)

46 u8g.drawStr( 4, 26, "Dist:");//menampilkan data jarak

u8g.setFont(u8g_font_gdr11);

u8g.setPrintPos( 16, 26);

u8g.print(jarak); //nilai distance

u8g.drawStr( 4, 32, "Velo:");

//menampilkan data kecepatan

u8g.setFont(u8g_font_gdr11);

u8g.setPrintPos( 16, 32);

u8g.print(velocity); //nilai velocity

}

//MAIN PROGRAM

---

void loop(){

//check if we have a fix position....with led 13

(7)

47

---

while( (sendATcommand("AT+CGPSSTATUS?", "2D Fix", 5000) ||

sendATcommand("AT+CGPSSTATUS?", "3D Fix", 5000)) == 0 );

digitalWrite(ledPin, HIGH); // turn the LED on (HIGH is the voltage level)

delay(100); // wait for a second

digitalWrite(ledPin, LOW); // turn the LED off by making the voltage LOW

delay(100); // wait for a second

digitalWrite(ledPin, HIGH); // turn the LED on (HIGH is the voltage level)

delay(100); // wait for a second

digitalWrite(ledPin, LOW); // turn the LED off by making the voltage LOW

delay(100);

(8)

48 //read state of button

---

buttonstate_start=digitalRead(button_start);

buttonstate_stop=digitalRead(button_stop);

---

//take data GPS first in start.

---

if(buttonstate_start=LOW){

// gets GPS data

get_GPS();

micros_old=micros();

old_latitude=atof(latitude); //conversion from char to float using fucntion atof

old_longitude=atof(longitude); //conversion from char to float using fucntion atof

u8g.firstPage();

(9)

49 draw1();

}while (u8g.nextPage());

//Serial.print(latitude);

//Serial.println(longitude);

get_GPS();

delay(100);

}

---

//take data GPS in ending

---

if(buttonstate_stop=LOW){

// gets GPS data

get_GPS();

micros_new=micros();

(10)

50 new_longitude=atof(longitude);//conversion from char to float using fucntion atof

distance(new_latitude,new_longitude,old_latitude,old_lo ngitude);//in meter

waktu=(micros_new-micros_old)/1000 ;//in milisecond

velocity=(jarak/waktu);//dalam satuan m/second

(11)

51 ---

//start module GPS

---

void power_on(){

uint8_t answer=0;

// checks if the module is started

answer = sendATcommand("AT", "OK", 2000);

if (answer == 0)

{

// power on pulse

digitalWrite(onModulePin,HIGH);

delay(3000);

digitalWrite(onModulePin,LOW);

(12)

52 while(answer == 0){

// Send AT every two seconds and wait for

the answer

answer = sendATcommand("AT", "OK", 2000);

}

}

}

---

//PART OF THE CODE TO FIND THE POSITION OF GPS

---

int8_t start_GPS(){

unsigned long previous;

(13)

53 // starts the GPS

sendATcommand("AT+CGPSPWR=1", "OK", 2000);

sendATcommand("AT+CGPSRST=0", "OK", 2000);

// waits for fix GPS

while(( (sendATcommand("AT+CGPSSTATUS?", "2D Fix", 5000) ||

sendATcommand("AT+CGPSSTATUS?", "3D Fix", 5000)) == 0 ) &&

((millis() - previous) < 90000));

if ((millis() - previous) < 90000)

{

return 1;

}

else

{

return 0;

(14)

54 }

---

//GETTING GPS DATA INCLUDE LATITUDE AND LONGITUDE

---

int8_t get_GPS(){

int8_t counter, answer;

long previous;

// First get the NMEA string

// Clean the input buffer

while( Serial.available() > 0) Serial.read();

// request Basic string

sendATcommand("AT+CGPSINF=0", "AT+CGPSINF=0\r\n\r\n", 2000);

(15)

55 answer = 0;

memset(frame, '\0', 100); // Initialize the string

previous = millis();

// this loop waits for the NMEA string

do{

if(Serial.available() != 0){

frame[counter] = Serial.read();

counter++;

// check if the desired answer is in the response of

the module

if (strstr(frame, "OK") != NULL)

{

answer = 1;

}

}

// Waits for the asnwer with time out

(16)

56 while((answer == 0) && ((millis() - previous) < 2000));

frame[counter-3] = '\0';

// Parses the string

strtok(frame, ",");

strcpy(longitude,strtok(NULL, ",")); // Gets longitude

strcpy(latitude,strtok(NULL, ",")); // Gets latitude

strcpy(altitude,strtok(NULL, ".")); // Gets altitude

strtok(NULL, ",");

strcpy(date,strtok(NULL, ".")); // Gets date

strtok(NULL, ",");

strtok(NULL, ",");

(17)

57 strcpy(speedOTG,strtok(NULL, ",")); // Gets speed over ground.

strcpy(course,strtok(NULL, "\r")); // Gets course

convert2Degrees(latitude);

convert2Degrees(longitude);

return answer;

}

---

/* convert2Degrees ( input ) - performs the conversion

from input

* parameters in DD°MM.mmm’ notation to DD.dddddd°

notation.

*

* Sign '+' is set for positive latitudes/longitudes

(North, East)

* Sign '-' is set for negative latitudes/longitudes

(18)

58 *

*/

---

int8_t convert2Degrees(char* input){

float deg;

float minutes;

boolean neg = false;

//auxiliar variable

char aux[10];

if (input[0] == '-')

{

neg = true;

(19)

59 }

else

{

strcpy(aux, strtok(input, "."));

}

// convert string to integer and add it to final

float variable

deg = atof(aux);

strcpy(aux, strtok(NULL, '\0'));

minutes=atof(aux);

minutes/=1000000;

if (deg < 100)

{

minutes += deg;

deg = 0;

(20)

60 else

{

minutes += int(deg) % 100;

deg = int(deg) / 100;

}

// add minutes to degrees

deg=deg+minutes/60;

if (neg == true)

{

deg*=-1.0;

}

neg = false;

(21)

61 neg = true;

deg*=-1;

}

float numeroFloat=deg;

int parteEntera[10];

int cifra;

long numero=(long)numeroFloat;

int size=0;

while(1){

size=size+1;

cifra=numero%10;

numero=numero/10;

parteEntera[size-1]=cifra;

if (numero==0){

break;

(22)

62 }

int indice=0;

if( neg ){

indice++;

input[0]='-';

}

for (int i=size-1; i >= 0; i--)

{

input[indice]=parteEntera[i]+'0';

indice++;

}

input[indice]='.';

indice++;

numeroFloat=(numeroFloat-(int)numeroFloat);

(23)

63 {

numeroFloat=numeroFloat*10;

cifra= (long)numeroFloat;

numeroFloat=numeroFloat-cifra;

input[indice]=char(cifra)+48;

indice++;

}

input[indice]='\0';

}

---

//FUNCTION FOR SEND ATCOMMAND

---

int8_t sendATcommand(char* ATcommand, char* expected_answer1, unsigned int timeout){

uint8_t x=0, answer=0;

(24)

64 unsigned long previous;

memset(response, '\0', 100); // Initialize the string

delay(100);

while( Serial.available() > 0) Serial.read(); // Clean the input buffer

Serial.println(ATcommand); // Send the AT command

x = 0;

previous = millis();

// this loop waits for the answer

(25)

65 if(Serial.available() != 0){

response[x] = Serial.read();

x++;

// check if the desired answer is in the response of

the module

if (strstr(response, expected_answer1) != NULL)

{

answer = 1;

}

}

// Waits for the asnwer with time out

}

while((answer == 0) && ((millis() - previous) < timeout));

return answer;

(26)

66

---

//FORMULA TO FIND DISTANCE BETWEEN TWO POINTS

---

void distance(float latitude_end,float longitude_end,float latitude_start,float longitude_start){

float a,c;

float latitude_rad_start,delta_lat;

float latitude_rad_end,delta_lon;

int R = 6371000;//radius bumi

latitude_rad_start=latitude_start*(0.0174532925); //konversi nilai latitude ke radian

latitude_rad_end=latitude_end*(0.0174532925);//konversi nilai latitude awal ke radian

(27)

67

delta_lon=(longitude_end-longitude_start)*(0.0174532925);//need to be convert to radian

a =

sin(delta_lat/2)*sin(delta_lat/2)+cos(latitude_start)*c os(latitude_end)*(sin(delta_lon/2)*sin(delta_lon/2));

c = 2*atan2(sqrt(a),sqrt(1-a));

jarak = R*c;

}

Referensi

Dokumen terkait

Tujuan penelitian ini adalah untuk melihat pengaruh Gaya Kepemimpinan dan Budaya Organisasi terhadap Kinerja Karyawan pada Perwakilan BPKP Provinsi Sulawesi Utara..

Hasil penelitian menunjukkan bahwa variabel-variabel yang mempengaruhi preferensi konsumen terhadap kopi susu instan adalah kualitas produk dengan nilai koefisien

Berdasarkan hasil dari penelitian dan pembahasan diatas, mengenai Peranan Sistem Informasi Akuntansi Persediaan Dalam Menunjang Pengelolaan Persediaan Yang Efektif,

Berdasarkan hasil pengolahan data dan pengujian hipotesis, serta pembahasan maka disimpulkan bahwa 1) tingkat kecerdasan linguistik siswa Kelas VIII SMP Negeri 8

Siswa melakukan tawuran pelajar dengan teman sekolahnya ataupun dengan siswa dari sekolah yang lain.. Contoh kasus pelanggaran HAM di masyarakat antara

Hasil pengukuran morfometrik bagian kepala tampak dorsal dan ventral, menunjukkan bahwa kepda lele afrilca memiliki lebar yang lebih besar daripada lele dumbo

Acara ini sangat menarik menurut peneliti , karena terdapat unsur persaingan yang ketat di setiap peserta ,sportifitas , profesionalitas , semangat yang tinggi dan ketekunan

Ada sistem kontrol dengan kontinuitas yang cukup baik terhadap tugas perawat, sehingga belum pernah terjadi malpractice, disamping juga karena pengaruh Sumpah, Kode Etik dan fungsi