AA

Dependencies:   DHT_ gps_settings_venus_ mbed

Fork of coen490_controller by Ka Yu Ho

Committer:
urietony
Date:
Tue Mar 21 21:16:57 2017 +0000
Revision:
1:21ee654912d1
Parent:
0:845bbc545b56
Child:
2:65cffee0c0f7
3-21

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