AA

Dependencies:   DHT_ gps_settings_venus_ mbed

Fork of coen490_controller by Ka Yu Ho

Committer:
urietony
Date:
Tue Mar 21 21:51:32 2017 +0000
Revision:
2:65cffee0c0f7
Parent:
1:21ee654912d1
ASDF

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kayu 0:845bbc545b56 1 #include "mbed.h"
kayu 0:845bbc545b56 2 #include "DHT/DHT.h"
urietony 1:21ee654912d1 3 #include "gps_stg_venus.h"
kayu 0:845bbc545b56 4 #include <string>
kayu 0:845bbc545b56 5
kayu 0:845bbc545b56 6 using namespace std;
kayu 0:845bbc545b56 7
urietony 1:21ee654912d1 8 DHT sensor(PC_0,DHT22);
kayu 0:845bbc545b56 9 Serial pc(SERIAL_TX,SERIAL_RX);
urietony 1:21ee654912d1 10 Serial gps(PA_0,PA_1);
urietony 1:21ee654912d1 11 Serial xbee(PC_10,PC_11);
urietony 1:21ee654912d1 12 Serial motor(PA_0,PA_1);
urietony 2:65cffee0c0f7 13 GPSVenus venus(gps);
urietony 1:21ee654912d1 14 AnalogIn gassensor(PC_1);
urietony 1:21ee654912d1 15 char data_gps[256],ns,ew,sampah[256];
urietony 1:21ee654912d1 16 int g=0, cek_gps,lock,satelit;
urietony 1:21ee654912d1 17 float waktu,latx,longx, laty, longy,dilution, altitude;
urietony 1:21ee654912d1 18 double lat_target,long_target;
urietony 1:21ee654912d1 19 double degrees, minutes, seconds;
urietony 1:21ee654912d1 20 int lattitude[3], longitude[3];
urietony 1:21ee654912d1 21 float speed;
urietony 1:21ee654912d1 22 void initialize_gps()
urietony 1:21ee654912d1 23 {
urietony 1:21ee654912d1 24 venus.setBaud_9600();
urietony 1:21ee654912d1 25 wait(0.5);
urietony 1:21ee654912d1 26 gps.baud(9600);
urietony 1:21ee654912d1 27 venus.setUpdateRate(10);
urietony 1:21ee654912d1 28 wait(0.5);
urietony 1:21ee654912d1 29 venus.setNmeaMessages(true, false, false, false, false, true);
urietony 1:21ee654912d1 30 }
urietony 1:21ee654912d1 31
urietony 1:21ee654912d1 32 void gps_interrupt()
urietony 1:21ee654912d1 33 {
urietony 1:21ee654912d1 34 // char temp = gps.getc();
urietony 1:21ee654912d1 35 // if(g==0)
urietony 1:21ee654912d1 36 // { led1=0;
urietony 1:21ee654912d1 37 // data_gps[g]=temp;
urietony 1:21ee654912d1 38 // if(data_gps[g]=='$')
urietony 1:21ee654912d1 39 // {g=1;data_gps[0]='$';}
urietony 1:21ee654912d1 40 // }
urietony 1:21ee654912d1 41 // else if (g==42){g=0;}
urietony 1:21ee654912d1 42 // else
urietony 1:21ee654912d1 43 // {
urietony 1:21ee654912d1 44 // data_gps[g]=temp;g++;led1=1;
urietony 1:21ee654912d1 45 // if(data_gps[g-1]=='\r')g=0;
urietony 1:21ee654912d1 46 // }
urietony 1:21ee654912d1 47 char temp=gps.getc();
urietony 1:21ee654912d1 48 if (temp=='$') {g=0;}
urietony 1:21ee654912d1 49 data_gps[g]=temp;
urietony 1:21ee654912d1 50 g++;
urietony 1:21ee654912d1 51
urietony 1:21ee654912d1 52
urietony 1:21ee654912d1 53 }
urietony 1:21ee654912d1 54
urietony 1:21ee654912d1 55 float trunc(float v) // pembulatan nilai
urietony 1:21ee654912d1 56 {
urietony 1:21ee654912d1 57 if(v < 0.0) {
urietony 1:21ee654912d1 58 v*= -1.0;
urietony 1:21ee654912d1 59 v = floor(v);
urietony 1:21ee654912d1 60 v*=-1.0;
urietony 1:21ee654912d1 61 } else {
urietony 1:21ee654912d1 62 v = floor(v);
urietony 1:21ee654912d1 63 }
urietony 1:21ee654912d1 64 return v;
urietony 1:21ee654912d1 65 }
kayu 0:845bbc545b56 66
urietony 1:21ee654912d1 67 void get_gps()
urietony 1:21ee654912d1 68 {
urietony 1:21ee654912d1 69 //if(data_gps[0]=='G'&&data_gps[1]=='P'&&data_gps[2]=='G'&&data_gps[3]=='G'&&data_gps[4]=='A'&&data_gps[5]==','){
urietony 1:21ee654912d1 70 //$GPGGA,050749.299,0745.9647,S,11022.3071,E,0,00,,189.5,M,4.3,M,,0000*5E
urietony 1:21ee654912d1 71 sscanf(data_gps,"$GPGGA,%f,%f,%c,%f,%c,%d,%2d,%f,%f",&waktu, &latx,&ns, &longx, &ew, &lock, &satelit, &dilution, &altitude);
urietony 1:21ee654912d1 72
urietony 1:21ee654912d1 73 degrees = (latx / 100.0f);
urietony 1:21ee654912d1 74 lattitude[0]=degrees;
urietony 1:21ee654912d1 75 degrees= degrees-lattitude[0];
urietony 1:21ee654912d1 76 minutes=(degrees*1000);
urietony 1:21ee654912d1 77 lattitude[1]=minutes;
urietony 1:21ee654912d1 78 minutes=minutes-lattitude[1];
urietony 1:21ee654912d1 79 seconds =(minutes*1000);
urietony 1:21ee654912d1 80 lattitude[2]= seconds;
urietony 1:21ee654912d1 81
urietony 1:21ee654912d1 82 degrees = (longx / 100.0f);
urietony 1:21ee654912d1 83 longitude[0]=degrees;
urietony 1:21ee654912d1 84 degrees= degrees-longitude[0];
urietony 1:21ee654912d1 85 minutes=(degrees*1000);
urietony 1:21ee654912d1 86 longitude[1]=minutes;
urietony 1:21ee654912d1 87 minutes=minutes-longitude[1];
urietony 1:21ee654912d1 88 seconds =(minutes*1000);
urietony 1:21ee654912d1 89 longitude[2]= seconds;
urietony 1:21ee654912d1 90 sscanf(data_gps,"$GPVTG,%*f,%*c,%*f,%*c,%*f,%*c,%f",&speed);
urietony 1:21ee654912d1 91
urietony 1:21ee654912d1 92 }
urietony 1:21ee654912d1 93
urietony 1:21ee654912d1 94 void gps_ats()
urietony 1:21ee654912d1 95 {
urietony 1:21ee654912d1 96 //fl waktu;
urietony 1:21ee654912d1 97 if(cek_gps==1){
urietony 1:21ee654912d1 98 sscanf(data_gps, "$GPGGA,%f,%f,%c,%f,%c",&waktu, &laty, &ns, &longy, &ew) ;
urietony 1:21ee654912d1 99
urietony 1:21ee654912d1 100 if(ns == 'S') { laty *= -1.0; }
urietony 1:21ee654912d1 101 if(ew == 'W') { longy *= -1.0; }
urietony 1:21ee654912d1 102 degrees = trunc(laty / 100.0f);
urietony 1:21ee654912d1 103 minutes = laty - (degrees * 100.0f);
urietony 1:21ee654912d1 104 lat_target = degrees + minutes / 60.0f;
urietony 1:21ee654912d1 105 degrees = trunc(longy / 100.0f);
urietony 1:21ee654912d1 106 minutes = longy- (degrees * 100.0f);
urietony 1:21ee654912d1 107 long_target = degrees + minutes / 60.0f;
urietony 1:21ee654912d1 108 }
urietony 1:21ee654912d1 109 }
urietony 1:21ee654912d1 110
urietony 1:21ee654912d1 111 void bin_dec_conv(unsigned int data)// anything to binary
urietony 1:21ee654912d1 112 {
urietony 1:21ee654912d1 113 pc.printf("%d%d%d",(data/100),(data%100/10),(data%10));
urietony 1:21ee654912d1 114 }
urietony 1:21ee654912d1 115
urietony 1:21ee654912d1 116 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)
urietony 1:21ee654912d1 117 {
urietony 1:21ee654912d1 118
urietony 1:21ee654912d1 119 pc.putc(0x0D);
urietony 1:21ee654912d1 120 bin_dec_conv(106);
urietony 1:21ee654912d1 121 pc.putc(0x20);
urietony 1:21ee654912d1 122
urietony 1:21ee654912d1 123 bin_dec_conv(data_1_x);
urietony 1:21ee654912d1 124 pc.putc(0x20);
urietony 1:21ee654912d1 125
urietony 1:21ee654912d1 126 bin_dec_conv(data_2_x);
urietony 1:21ee654912d1 127 pc.putc(0x20);
urietony 1:21ee654912d1 128
urietony 1:21ee654912d1 129 bin_dec_conv(data_2_y);
urietony 1:21ee654912d1 130 pc.putc(0x20);
urietony 1:21ee654912d1 131
urietony 1:21ee654912d1 132 bin_dec_conv(data_3_x);
urietony 1:21ee654912d1 133 pc.putc(0x20);
urietony 1:21ee654912d1 134
urietony 1:21ee654912d1 135 bin_dec_conv(data_3_y);
urietony 1:21ee654912d1 136 pc.putc(0x20);
urietony 1:21ee654912d1 137
urietony 1:21ee654912d1 138 bin_dec_conv(data_3_z);
urietony 1:21ee654912d1 139
urietony 1:21ee654912d1 140 }
kayu 0:845bbc545b56 141 void getTemperatueHumidity(){
kayu 0:845bbc545b56 142 int err;
kayu 0:845bbc545b56 143 pc.printf("\r\nStarting to gather temperature and humidity......\n");
kayu 0:845bbc545b56 144 pc.printf("\r\n******************\r\n");
kayu 0:845bbc545b56 145 wait(1); // wait 1 second for device stable status
kayu 0:845bbc545b56 146 while (1) {
kayu 0:845bbc545b56 147
kayu 0:845bbc545b56 148 err = sensor.readData();
urietony 1:21ee654912d1 149 if (err == 0||err==6) {
kayu 0:845bbc545b56 150 pc.printf("Temperature is %4.2f C \r\n",sensor.ReadTemperature(CELCIUS));
kayu 0:845bbc545b56 151 pc.printf("Temperature is %4.2f F \r\n",sensor.ReadTemperature(FARENHEIT));
kayu 0:845bbc545b56 152 pc.printf("Temperature is %4.2f K \r\n",sensor.ReadTemperature(KELVIN));
kayu 0:845bbc545b56 153 pc.printf("Humidity is %4.2f \r\n",sensor.ReadHumidity());
kayu 0:845bbc545b56 154
kayu 0:845bbc545b56 155 xbee.printf("Temperature is %4.2f C \r\n",sensor.ReadTemperature(CELCIUS));
kayu 0:845bbc545b56 156 xbee.printf("Temperature is %4.2f F \r\n",sensor.ReadTemperature(FARENHEIT));
kayu 0:845bbc545b56 157 xbee.printf("Temperature is %4.2f K \r\n",sensor.ReadTemperature(KELVIN));
kayu 0:845bbc545b56 158 xbee.printf("Humidity is %4.2f \r\n",sensor.ReadHumidity());
urietony 1:21ee654912d1 159 float gasvalue=gassensor.read();
urietony 1:21ee654912d1 160 wait(1);
urietony 1:21ee654912d1 161 xbee.printf("gas sensor reading is %f\n", gasvalue);
kayu 0:845bbc545b56 162
kayu 0:845bbc545b56 163 return;
kayu 0:845bbc545b56 164 } else {
kayu 0:845bbc545b56 165 pc.printf("\r\nErr %i \n",err);
kayu 0:845bbc545b56 166 xbee.printf("\r\nErr %i \n",err);
urietony 1:21ee654912d1 167
kayu 0:845bbc545b56 168 }
kayu 0:845bbc545b56 169 wait(5);
kayu 0:845bbc545b56 170 }
kayu 0:845bbc545b56 171 }
kayu 0:845bbc545b56 172
kayu 0:845bbc545b56 173 void printInit(){
urietony 1:21ee654912d1 174 xbee.printf("\nAwaiting User Command....\n");
urietony 1:21ee654912d1 175 pc.printf("\nAwaiting User Command....\n");
kayu 0:845bbc545b56 176 }
urietony 1:21ee654912d1 177 void rovercommand(){
urietony 1:21ee654912d1 178 char input;
urietony 1:21ee654912d1 179 input= xbee.getc();
urietony 1:21ee654912d1 180 motor.baud(9600);
urietony 1:21ee654912d1 181 xbee.printf("command is %c\n",input);
urietony 1:21ee654912d1 182 if ( input == 'F'){
urietony 1:21ee654912d1 183 motor.putc(64);
urietony 1:21ee654912d1 184 wait(1);
urietony 1:21ee654912d1 185 motor.putc(127);
urietony 1:21ee654912d1 186 input=NULL;
urietony 1:21ee654912d1 187 return;
urietony 1:21ee654912d1 188 }
urietony 1:21ee654912d1 189 if ( input == 'B'){
urietony 1:21ee654912d1 190 motor.putc(64);
urietony 1:21ee654912d1 191 wait(1);
urietony 1:21ee654912d1 192 motor.putc(1);
urietony 1:21ee654912d1 193 input=NULL;
urietony 1:21ee654912d1 194 return;
urietony 1:21ee654912d1 195 }
urietony 1:21ee654912d1 196 if ( input == 'S'){
urietony 1:21ee654912d1 197 motor.putc(64);
urietony 1:21ee654912d1 198 wait(1);
urietony 1:21ee654912d1 199 input=NULL;
urietony 1:21ee654912d1 200 return;
urietony 1:21ee654912d1 201 }
urietony 1:21ee654912d1 202 if ( input == 'X'){
urietony 1:21ee654912d1 203 motor.putc(64);
urietony 1:21ee654912d1 204 input=NULL;
urietony 1:21ee654912d1 205 return;
urietony 1:21ee654912d1 206 }
urietony 1:21ee654912d1 207
urietony 1:21ee654912d1 208 }
urietony 1:21ee654912d1 209
urietony 1:21ee654912d1 210 void rovercontrol(){
urietony 1:21ee654912d1 211 wait(1);
urietony 1:21ee654912d1 212
urietony 1:21ee654912d1 213 while(true){
urietony 1:21ee654912d1 214 char input;
urietony 1:21ee654912d1 215 input= xbee.getc();
urietony 1:21ee654912d1 216 motor.baud(9600);
urietony 1:21ee654912d1 217
urietony 1:21ee654912d1 218 if ( input == 'F'){
urietony 1:21ee654912d1 219 motor.putc(64);
urietony 1:21ee654912d1 220 wait(1);
urietony 1:21ee654912d1 221 motor.putc(127);
urietony 1:21ee654912d1 222 input=NULL;
urietony 1:21ee654912d1 223
urietony 1:21ee654912d1 224 }
urietony 1:21ee654912d1 225 if ( input == 'B'){
urietony 1:21ee654912d1 226 motor.putc(64);
urietony 1:21ee654912d1 227 wait(1);
urietony 1:21ee654912d1 228 motor.putc(1);
urietony 1:21ee654912d1 229 input=NULL;
urietony 1:21ee654912d1 230
urietony 1:21ee654912d1 231 }
urietony 1:21ee654912d1 232 if ( input == 'S'){
urietony 1:21ee654912d1 233 motor.putc(64);
urietony 1:21ee654912d1 234 wait(1);
urietony 1:21ee654912d1 235 input=NULL;
urietony 1:21ee654912d1 236
urietony 1:21ee654912d1 237 }
urietony 1:21ee654912d1 238 if ( input == 'X'){
urietony 1:21ee654912d1 239 motor.putc(64);
urietony 1:21ee654912d1 240 input=NULL;
urietony 1:21ee654912d1 241 return;
urietony 1:21ee654912d1 242 }
urietony 1:21ee654912d1 243
urietony 1:21ee654912d1 244 }
urietony 1:21ee654912d1 245 }
kayu 0:845bbc545b56 246
kayu 0:845bbc545b56 247 int main() {
kayu 0:845bbc545b56 248
kayu 0:845bbc545b56 249 char a;
kayu 0:845bbc545b56 250 printInit();
urietony 1:21ee654912d1 251 gps.baud(9600);
urietony 1:21ee654912d1 252 gps.attach(&gps_interrupt);
urietony 1:21ee654912d1 253 initialize_gps();
kayu 0:845bbc545b56 254 while(1){
kayu 0:845bbc545b56 255 a = xbee.getc();
kayu 0:845bbc545b56 256 if(a == 'T'){
kayu 0:845bbc545b56 257 getTemperatueHumidity();
kayu 0:845bbc545b56 258 a = NULL;
kayu 0:845bbc545b56 259 printInit();
kayu 0:845bbc545b56 260 }
kayu 0:845bbc545b56 261
kayu 0:845bbc545b56 262 if( a == 'G'){
kayu 0:845bbc545b56 263 //GPS function
urietony 1:21ee654912d1 264 get_gps();
urietony 2:65cffee0c0f7 265 xbee.printf("Your Current location is %f %c,%f %c.",latx,ns, longx,ew);
kayu 0:845bbc545b56 266 a = NULL;
kayu 0:845bbc545b56 267 printInit();
kayu 0:845bbc545b56 268 }
urietony 1:21ee654912d1 269 if( a == 'R'){
urietony 1:21ee654912d1 270 xbee.printf("\nEntering Rover Controlling mode...");
urietony 1:21ee654912d1 271 xbee.printf("\nWork in progress, exiting :)\n");
urietony 1:21ee654912d1 272 rovercontrol();
urietony 1:21ee654912d1 273
urietony 1:21ee654912d1 274 a = NULL;
urietony 1:21ee654912d1 275 printInit();
urietony 1:21ee654912d1 276 }
urietony 1:21ee654912d1 277
kayu 0:845bbc545b56 278 }
kayu 0:845bbc545b56 279 }