Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed SSD1308_128x64_I2C
main.cpp@0:ac8a5576c57a, 2019-08-23 (annotated)
- Committer:
- DudeHD
- Date:
- Fri Aug 23 16:09:04 2019 +0000
- Revision:
- 0:ac8a5576c57a
- Child:
- 1:4c27d179c6c2
hhmkj
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
DudeHD | 0:ac8a5576c57a | 1 | #include "mbed.h" |
DudeHD | 0:ac8a5576c57a | 2 | #include <string> |
DudeHD | 0:ac8a5576c57a | 3 | #include <math.h> |
DudeHD | 0:ac8a5576c57a | 4 | //#include "SSD1308.h" |
DudeHD | 0:ac8a5576c57a | 5 | |
DudeHD | 0:ac8a5576c57a | 6 | #define AVG 5 |
DudeHD | 0:ac8a5576c57a | 7 | #define cal_num 10 |
DudeHD | 0:ac8a5576c57a | 8 | |
DudeHD | 0:ac8a5576c57a | 9 | AnalogIn a1(PA_0); |
DudeHD | 0:ac8a5576c57a | 10 | AnalogIn a2(PA_1); |
DudeHD | 0:ac8a5576c57a | 11 | AnalogIn a3(PA_3); |
DudeHD | 0:ac8a5576c57a | 12 | AnalogIn a4(PA_4); |
DudeHD | 0:ac8a5576c57a | 13 | AnalogIn a5(PA_5); |
DudeHD | 0:ac8a5576c57a | 14 | AnalogIn a6(PA_6); |
DudeHD | 0:ac8a5576c57a | 15 | AnalogIn abat(PA_7); |
DudeHD | 0:ac8a5576c57a | 16 | |
DudeHD | 0:ac8a5576c57a | 17 | DigitalIn SW1(PA_11); |
DudeHD | 0:ac8a5576c57a | 18 | DigitalIn SW2(PB_5); |
DudeHD | 0:ac8a5576c57a | 19 | DigitalIn SW3(PB_4); |
DudeHD | 0:ac8a5576c57a | 20 | DigitalIn JSW1(PA_12); |
DudeHD | 0:ac8a5576c57a | 21 | DigitalIn JSW2(PB_0); |
DudeHD | 0:ac8a5576c57a | 22 | DigitalIn JSW3(PA_8); |
DudeHD | 0:ac8a5576c57a | 23 | DigitalIn TSW(PB_1); |
DudeHD | 0:ac8a5576c57a | 24 | Serial hc(PA_9, PA_10); |
DudeHD | 0:ac8a5576c57a | 25 | Serial pc(PA_2, PA_15); |
DudeHD | 0:ac8a5576c57a | 26 | //Serial pc(SERIAL_TX, SERIAL_RX); |
DudeHD | 0:ac8a5576c57a | 27 | I2C i2c(PB_7, PB_6); |
DudeHD | 0:ac8a5576c57a | 28 | //SSD1308 oled = SSD1308(&i2c, SSD1308_SA0); |
DudeHD | 0:ac8a5576c57a | 29 | |
DudeHD | 0:ac8a5576c57a | 30 | char data[300]; |
DudeHD | 0:ac8a5576c57a | 31 | int i=0; |
DudeHD | 0:ac8a5576c57a | 32 | char ndone=1; |
DudeHD | 0:ac8a5576c57a | 33 | char avg_count=0; |
DudeHD | 0:ac8a5576c57a | 34 | |
DudeHD | 0:ac8a5576c57a | 35 | float LAT,LON,TIME; |
DudeHD | 0:ac8a5576c57a | 36 | char NS,EW,status; |
DudeHD | 0:ac8a5576c57a | 37 | float check; |
DudeHD | 0:ac8a5576c57a | 38 | int latdeg,londeg; |
DudeHD | 0:ac8a5576c57a | 39 | float latmin,lonmin; |
DudeHD | 0:ac8a5576c57a | 40 | float lat_arr[AVG]; |
DudeHD | 0:ac8a5576c57a | 41 | float lon_arr[AVG]; |
DudeHD | 0:ac8a5576c57a | 42 | |
DudeHD | 0:ac8a5576c57a | 43 | //short x1,x2,x3,y1,y2,y3; |
DudeHD | 0:ac8a5576c57a | 44 | short TH,PI,RO,YA,TH_def;//,AUX,LAT,LON,COM |
DudeHD | 0:ac8a5576c57a | 45 | float x1_ar,x2_ar,x3_ar,y1_ar,y2_ar,y3_ar; |
DudeHD | 0:ac8a5576c57a | 46 | short mid_point=50; |
DudeHD | 0:ac8a5576c57a | 47 | short x1_cor,x2_cor,x3_cor,y1_cor,y2_cor,y3_cor; |
DudeHD | 0:ac8a5576c57a | 48 | short low_us=1350; |
DudeHD | 0:ac8a5576c57a | 49 | short multiplier_us=3; |
DudeHD | 0:ac8a5576c57a | 50 | int rcom=0; |
DudeHD | 0:ac8a5576c57a | 51 | int arcom; |
DudeHD | 0:ac8a5576c57a | 52 | |
DudeHD | 0:ac8a5576c57a | 53 | void reads(); |
DudeHD | 0:ac8a5576c57a | 54 | void rounder(); |
DudeHD | 0:ac8a5576c57a | 55 | int get_deg(float); |
DudeHD | 0:ac8a5576c57a | 56 | float get_min(float); |
DudeHD | 0:ac8a5576c57a | 57 | |
DudeHD | 0:ac8a5576c57a | 58 | float vbat; |
DudeHD | 0:ac8a5576c57a | 59 | float bat_divider=0.703313; |
DudeHD | 0:ac8a5576c57a | 60 | |
DudeHD | 0:ac8a5576c57a | 61 | char oled_str[30]; |
DudeHD | 0:ac8a5576c57a | 62 | |
DudeHD | 0:ac8a5576c57a | 63 | void avg_read(); |
DudeHD | 0:ac8a5576c57a | 64 | void calibration(); |
DudeHD | 0:ac8a5576c57a | 65 | void th_calc(); |
DudeHD | 0:ac8a5576c57a | 66 | |
DudeHD | 0:ac8a5576c57a | 67 | int main(){ |
DudeHD | 0:ac8a5576c57a | 68 | SW1.mode(PullDown); |
DudeHD | 0:ac8a5576c57a | 69 | SW2.mode(PullDown); |
DudeHD | 0:ac8a5576c57a | 70 | SW3.mode(PullDown); |
DudeHD | 0:ac8a5576c57a | 71 | JSW1.mode(PullDown); |
DudeHD | 0:ac8a5576c57a | 72 | JSW2.mode(PullUp); |
DudeHD | 0:ac8a5576c57a | 73 | JSW3.mode(PullUp);//default 1 uvjet ako 0 |
DudeHD | 0:ac8a5576c57a | 74 | TSW.mode(PullDown); |
DudeHD | 0:ac8a5576c57a | 75 | calibration(); |
DudeHD | 0:ac8a5576c57a | 76 | //oled.setDisplayFlip(false,false); |
DudeHD | 0:ac8a5576c57a | 77 | //oled.setContrastControl(0xFF); |
DudeHD | 0:ac8a5576c57a | 78 | while(1){ |
DudeHD | 0:ac8a5576c57a | 79 | //oled.clearDisplay(); |
DudeHD | 0:ac8a5576c57a | 80 | sprintf(oled_str, "%d", TH_def); |
DudeHD | 0:ac8a5576c57a | 81 | //oled.writeString(0, 0, oled_str); |
DudeHD | 0:ac8a5576c57a | 82 | if(TSW.read()){ |
DudeHD | 0:ac8a5576c57a | 83 | //reads(); |
DudeHD | 0:ac8a5576c57a | 84 | //avg_read(); |
DudeHD | 0:ac8a5576c57a | 85 | //rounder(); |
DudeHD | 0:ac8a5576c57a | 86 | //nazvat TH, |
DudeHD | 0:ac8a5576c57a | 87 | TH =(-1)*((((a1.read()*100)+x1_cor)*5)-250); |
DudeHD | 0:ac8a5576c57a | 88 | //pc.printf("%hd",TH); |
DudeHD | 0:ac8a5576c57a | 89 | th_calc(); |
DudeHD | 0:ac8a5576c57a | 90 | RO =3000-(low_us+((a3.read()*100)+y1_cor)*multiplier_us); |
DudeHD | 0:ac8a5576c57a | 91 | YA =3000-(low_us+((a2.read()*100)+x2_cor)*multiplier_us); |
DudeHD | 0:ac8a5576c57a | 92 | PI =3000-(low_us+((a4.read()*100)+y2_cor)*multiplier_us); |
DudeHD | 0:ac8a5576c57a | 93 | arcom=a5.read()*100; |
DudeHD | 0:ac8a5576c57a | 94 | rcom=0; |
DudeHD | 0:ac8a5576c57a | 95 | if(SW2.read()==1){ |
DudeHD | 0:ac8a5576c57a | 96 | rcom=2; |
DudeHD | 0:ac8a5576c57a | 97 | } |
DudeHD | 0:ac8a5576c57a | 98 | if(SW3.read()==1){ |
DudeHD | 0:ac8a5576c57a | 99 | hc.printf("MSG,%hd,%hd,%hd,%hd,%hd,%d,%d,%d\n",1000,1000,1000,1000,2000,0,0,0); |
DudeHD | 0:ac8a5576c57a | 100 | } |
DudeHD | 0:ac8a5576c57a | 101 | else{ |
DudeHD | 0:ac8a5576c57a | 102 | hc.printf("MSG,%hd,%hd,%hd,%hd,%hd,%d,%d,%d\n",TH_def,PI,RO,YA,1000,0,0,rcom); |
DudeHD | 0:ac8a5576c57a | 103 | } |
DudeHD | 0:ac8a5576c57a | 104 | //na drugom kraju cekaj MSG |
DudeHD | 0:ac8a5576c57a | 105 | //printf("%hd,%hd,%hd,%hd,%hd,%hd\n",x1,y1,x2,y2,sw1.read(),sw2.read()); |
DudeHD | 0:ac8a5576c57a | 106 | //printf("%hd,%hd,%hd,%hd\n",sw1.read(),sw2.read(),sw3.read(),tog1.read()); |
DudeHD | 0:ac8a5576c57a | 107 | //vbat=(abat.read()*3.3f)/bat_divider; |
DudeHD | 0:ac8a5576c57a | 108 | |
DudeHD | 0:ac8a5576c57a | 109 | //printf("%0.2f\n",vbat); |
DudeHD | 0:ac8a5576c57a | 110 | wait_ms(10);// izmjerit potrebno vrijeme da se izvrsi sve to pa stavit na temelju toga |
DudeHD | 0:ac8a5576c57a | 111 | |
DudeHD | 0:ac8a5576c57a | 112 | } |
DudeHD | 0:ac8a5576c57a | 113 | else{ |
DudeHD | 0:ac8a5576c57a | 114 | //mjenjanje argumentata ekran itd itd |
DudeHD | 0:ac8a5576c57a | 115 | //send disarm |
DudeHD | 0:ac8a5576c57a | 116 | //hc_send() |
DudeHD | 0:ac8a5576c57a | 117 | |
DudeHD | 0:ac8a5576c57a | 118 | hc.printf("MSG,%hd,%hd,%hd,%hd,%hd,%d,%d,%d\n",1000,1500,1500,1500,2000,0,0,0); |
DudeHD | 0:ac8a5576c57a | 119 | wait_ms(50); |
DudeHD | 0:ac8a5576c57a | 120 | |
DudeHD | 0:ac8a5576c57a | 121 | } |
DudeHD | 0:ac8a5576c57a | 122 | } |
DudeHD | 0:ac8a5576c57a | 123 | } |
DudeHD | 0:ac8a5576c57a | 124 | /* |
DudeHD | 0:ac8a5576c57a | 125 | |
DudeHD | 0:ac8a5576c57a | 126 | void reads(){ |
DudeHD | 0:ac8a5576c57a | 127 | while(avg_count<AVG){ |
DudeHD | 0:ac8a5576c57a | 128 | while(gps.getc() != '$'); |
DudeHD | 0:ac8a5576c57a | 129 | while(ndone){ |
DudeHD | 0:ac8a5576c57a | 130 | data[i]=gps.getc(); |
DudeHD | 0:ac8a5576c57a | 131 | pc.printf("%c",data[i]); |
DudeHD | 0:ac8a5576c57a | 132 | if(data[i]=='\r'){ |
DudeHD | 0:ac8a5576c57a | 133 | data[i]='\0'; |
DudeHD | 0:ac8a5576c57a | 134 | ndone=0; |
DudeHD | 0:ac8a5576c57a | 135 | } |
DudeHD | 0:ac8a5576c57a | 136 | i++; |
DudeHD | 0:ac8a5576c57a | 137 | } |
DudeHD | 0:ac8a5576c57a | 138 | //GPGLL,4540.45939,N,01539.27211,E,164202.00,A,A*64 |
DudeHD | 0:ac8a5576c57a | 139 | if(sscanf(data,"GPGLL,%f,%c,%f,%c,%f,%c,%f",&LAT, &NS, &LON, &EW, &TIME, &status, &check) >= 1) { |
DudeHD | 0:ac8a5576c57a | 140 | pc.printf("%s\n",data); |
DudeHD | 0:ac8a5576c57a | 141 | lat_arr[avg_count]=LAT; |
DudeHD | 0:ac8a5576c57a | 142 | lon_arr[avg_count]=LON; |
DudeHD | 0:ac8a5576c57a | 143 | avg_count++; |
DudeHD | 0:ac8a5576c57a | 144 | |
DudeHD | 0:ac8a5576c57a | 145 | time = time + 20000.00f; |
DudeHD | 0:ac8a5576c57a | 146 | hour = int(time) / 10000; |
DudeHD | 0:ac8a5576c57a | 147 | minute = (int(time) % 10000) / 100; |
DudeHD | 0:ac8a5576c57a | 148 | seconed = int(time) % 100; |
DudeHD | 0:ac8a5576c57a | 149 | |
DudeHD | 0:ac8a5576c57a | 150 | |
DudeHD | 0:ac8a5576c57a | 151 | } |
DudeHD | 0:ac8a5576c57a | 152 | memset(data, 0, i); |
DudeHD | 0:ac8a5576c57a | 153 | ndone=1; |
DudeHD | 0:ac8a5576c57a | 154 | i=0; |
DudeHD | 0:ac8a5576c57a | 155 | } |
DudeHD | 0:ac8a5576c57a | 156 | } |
DudeHD | 0:ac8a5576c57a | 157 | |
DudeHD | 0:ac8a5576c57a | 158 | */ |
DudeHD | 0:ac8a5576c57a | 159 | void rounder(){ |
DudeHD | 0:ac8a5576c57a | 160 | latdeg=get_deg(LAT); |
DudeHD | 0:ac8a5576c57a | 161 | londeg=get_deg(LON); |
DudeHD | 0:ac8a5576c57a | 162 | latmin=get_min(LAT); |
DudeHD | 0:ac8a5576c57a | 163 | lonmin=get_min(LON); |
DudeHD | 0:ac8a5576c57a | 164 | pc.printf("%d %.3f, %d %.3f\n",latdeg,latmin,londeg,lonmin); |
DudeHD | 0:ac8a5576c57a | 165 | } |
DudeHD | 0:ac8a5576c57a | 166 | |
DudeHD | 0:ac8a5576c57a | 167 | int get_deg(float fnum){ |
DudeHD | 0:ac8a5576c57a | 168 | return floor(fnum/100.0f); |
DudeHD | 0:ac8a5576c57a | 169 | } |
DudeHD | 0:ac8a5576c57a | 170 | |
DudeHD | 0:ac8a5576c57a | 171 | float get_min(float fnum){ |
DudeHD | 0:ac8a5576c57a | 172 | unsigned int tempmini=(int(fnum*1000))%100000; |
DudeHD | 0:ac8a5576c57a | 173 | return tempmini/1000.0f; |
DudeHD | 0:ac8a5576c57a | 174 | } |
DudeHD | 0:ac8a5576c57a | 175 | |
DudeHD | 0:ac8a5576c57a | 176 | void avg_read(){ |
DudeHD | 0:ac8a5576c57a | 177 | LAT=0; |
DudeHD | 0:ac8a5576c57a | 178 | LON=0; |
DudeHD | 0:ac8a5576c57a | 179 | for(int k=0;k<AVG;k++){ |
DudeHD | 0:ac8a5576c57a | 180 | LAT+=lat_arr[k]; |
DudeHD | 0:ac8a5576c57a | 181 | LON+=lon_arr[k]; |
DudeHD | 0:ac8a5576c57a | 182 | } |
DudeHD | 0:ac8a5576c57a | 183 | LAT=LAT/AVG; |
DudeHD | 0:ac8a5576c57a | 184 | LON=LON/AVG; |
DudeHD | 0:ac8a5576c57a | 185 | } |
DudeHD | 0:ac8a5576c57a | 186 | |
DudeHD | 0:ac8a5576c57a | 187 | void calibration(){ |
DudeHD | 0:ac8a5576c57a | 188 | x1_ar=0; |
DudeHD | 0:ac8a5576c57a | 189 | x2_ar=0; |
DudeHD | 0:ac8a5576c57a | 190 | x3_ar=0; |
DudeHD | 0:ac8a5576c57a | 191 | y1_ar=0; |
DudeHD | 0:ac8a5576c57a | 192 | y2_ar=0; |
DudeHD | 0:ac8a5576c57a | 193 | y3_ar=0; |
DudeHD | 0:ac8a5576c57a | 194 | for(int a=0;a<cal_num;a++){ |
DudeHD | 0:ac8a5576c57a | 195 | x1_ar+=a1.read(); |
DudeHD | 0:ac8a5576c57a | 196 | x2_ar+=a2.read(); |
DudeHD | 0:ac8a5576c57a | 197 | x3_ar+=a5.read(); |
DudeHD | 0:ac8a5576c57a | 198 | y1_ar+=a3.read(); |
DudeHD | 0:ac8a5576c57a | 199 | y2_ar+=a4.read(); |
DudeHD | 0:ac8a5576c57a | 200 | y3_ar+=a6.read(); |
DudeHD | 0:ac8a5576c57a | 201 | } |
DudeHD | 0:ac8a5576c57a | 202 | x1_cor=mid_point-((x1_ar/cal_num)*100); |
DudeHD | 0:ac8a5576c57a | 203 | x2_cor=mid_point-((x2_ar/cal_num)*100); |
DudeHD | 0:ac8a5576c57a | 204 | x3_cor=mid_point-((x3_ar/cal_num)*100); |
DudeHD | 0:ac8a5576c57a | 205 | y1_cor=mid_point-((y1_ar/cal_num)*100); |
DudeHD | 0:ac8a5576c57a | 206 | y2_cor=mid_point-((y2_ar/cal_num)*100); |
DudeHD | 0:ac8a5576c57a | 207 | y3_cor=mid_point-((y3_ar/cal_num)*100); |
DudeHD | 0:ac8a5576c57a | 208 | pc.printf("%hd,%hd,%hd,%hd,%hd,%hd\n",x1_cor,y1_cor,x2_cor,y2_cor,x3_cor,y3_cor); |
DudeHD | 0:ac8a5576c57a | 209 | } |
DudeHD | 0:ac8a5576c57a | 210 | |
DudeHD | 0:ac8a5576c57a | 211 | void th_calc(){ |
DudeHD | 0:ac8a5576c57a | 212 | if(abs(TH)<10){ |
DudeHD | 0:ac8a5576c57a | 213 | TH_def+=0; |
DudeHD | 0:ac8a5576c57a | 214 | } |
DudeHD | 0:ac8a5576c57a | 215 | else{ |
DudeHD | 0:ac8a5576c57a | 216 | if(TH>0){ |
DudeHD | 0:ac8a5576c57a | 217 | TH_def+=10; |
DudeHD | 0:ac8a5576c57a | 218 | } |
DudeHD | 0:ac8a5576c57a | 219 | else{ |
DudeHD | 0:ac8a5576c57a | 220 | TH_def-=10; |
DudeHD | 0:ac8a5576c57a | 221 | } |
DudeHD | 0:ac8a5576c57a | 222 | } |
DudeHD | 0:ac8a5576c57a | 223 | if(TH_def<1000)TH_def=1000; |
DudeHD | 0:ac8a5576c57a | 224 | if(JSW1.read()==1)TH_def=1000; |
DudeHD | 0:ac8a5576c57a | 225 | } |