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
Diff: main.cpp
- Revision:
- 0:ac8a5576c57a
- Child:
- 1:c5bfd182c743
diff -r 000000000000 -r ac8a5576c57a main.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Fri Aug 23 16:09:04 2019 +0000
@@ -0,0 +1,225 @@
+ #include "mbed.h"
+#include <string>
+#include <math.h>
+//#include "SSD1308.h"
+
+#define AVG 5
+#define cal_num 10
+
+AnalogIn a1(PA_0);
+AnalogIn a2(PA_1);
+AnalogIn a3(PA_3);
+AnalogIn a4(PA_4);
+AnalogIn a5(PA_5);
+AnalogIn a6(PA_6);
+AnalogIn abat(PA_7);
+
+DigitalIn SW1(PA_11);
+DigitalIn SW2(PB_5);
+DigitalIn SW3(PB_4);
+DigitalIn JSW1(PA_12);
+DigitalIn JSW2(PB_0);
+DigitalIn JSW3(PA_8);
+DigitalIn TSW(PB_1);
+Serial hc(PA_9, PA_10);
+Serial pc(PA_2, PA_15);
+//Serial pc(SERIAL_TX, SERIAL_RX);
+I2C i2c(PB_7, PB_6);
+//SSD1308 oled = SSD1308(&i2c, SSD1308_SA0);
+
+char data[300];
+int i=0;
+char ndone=1;
+char avg_count=0;
+
+float LAT,LON,TIME;
+char NS,EW,status;
+float check;
+int latdeg,londeg;
+float latmin,lonmin;
+float lat_arr[AVG];
+float lon_arr[AVG];
+
+//short x1,x2,x3,y1,y2,y3;
+short TH,PI,RO,YA,TH_def;//,AUX,LAT,LON,COM
+float x1_ar,x2_ar,x3_ar,y1_ar,y2_ar,y3_ar;
+short mid_point=50;
+short x1_cor,x2_cor,x3_cor,y1_cor,y2_cor,y3_cor;
+short low_us=1350;
+short multiplier_us=3;
+int rcom=0;
+int arcom;
+
+void reads();
+void rounder();
+int get_deg(float);
+float get_min(float);
+
+float vbat;
+float bat_divider=0.703313;
+
+char oled_str[30];
+
+void avg_read();
+void calibration();
+void th_calc();
+
+int main(){
+ SW1.mode(PullDown);
+ SW2.mode(PullDown);
+ SW3.mode(PullDown);
+ JSW1.mode(PullDown);
+ JSW2.mode(PullUp);
+ JSW3.mode(PullUp);//default 1 uvjet ako 0
+ TSW.mode(PullDown);
+ calibration();
+ //oled.setDisplayFlip(false,false);
+ //oled.setContrastControl(0xFF);
+ while(1){
+ //oled.clearDisplay();
+ sprintf(oled_str, "%d", TH_def);
+ //oled.writeString(0, 0, oled_str);
+ if(TSW.read()){
+ //reads();
+ //avg_read();
+ //rounder();
+ //nazvat TH,
+ TH =(-1)*((((a1.read()*100)+x1_cor)*5)-250);
+ //pc.printf("%hd",TH);
+ th_calc();
+ RO =3000-(low_us+((a3.read()*100)+y1_cor)*multiplier_us);
+ YA =3000-(low_us+((a2.read()*100)+x2_cor)*multiplier_us);
+ PI =3000-(low_us+((a4.read()*100)+y2_cor)*multiplier_us);
+ arcom=a5.read()*100;
+ rcom=0;
+ if(SW2.read()==1){
+ rcom=2;
+ }
+ if(SW3.read()==1){
+ hc.printf("MSG,%hd,%hd,%hd,%hd,%hd,%d,%d,%d\n",1000,1000,1000,1000,2000,0,0,0);
+ }
+ else{
+ hc.printf("MSG,%hd,%hd,%hd,%hd,%hd,%d,%d,%d\n",TH_def,PI,RO,YA,1000,0,0,rcom);
+ }
+ //na drugom kraju cekaj MSG
+ //printf("%hd,%hd,%hd,%hd,%hd,%hd\n",x1,y1,x2,y2,sw1.read(),sw2.read());
+ //printf("%hd,%hd,%hd,%hd\n",sw1.read(),sw2.read(),sw3.read(),tog1.read());
+ //vbat=(abat.read()*3.3f)/bat_divider;
+
+ //printf("%0.2f\n",vbat);
+ wait_ms(10);// izmjerit potrebno vrijeme da se izvrsi sve to pa stavit na temelju toga
+
+ }
+ else{
+ //mjenjanje argumentata ekran itd itd
+ //send disarm
+ //hc_send()
+
+ hc.printf("MSG,%hd,%hd,%hd,%hd,%hd,%d,%d,%d\n",1000,1500,1500,1500,2000,0,0,0);
+ wait_ms(50);
+
+ }
+ }
+}
+/*
+
+void reads(){
+ while(avg_count<AVG){
+ while(gps.getc() != '$');
+ while(ndone){
+ data[i]=gps.getc();
+ pc.printf("%c",data[i]);
+ if(data[i]=='\r'){
+ data[i]='\0';
+ ndone=0;
+ }
+ i++;
+ }
+ //GPGLL,4540.45939,N,01539.27211,E,164202.00,A,A*64
+ if(sscanf(data,"GPGLL,%f,%c,%f,%c,%f,%c,%f",&LAT, &NS, &LON, &EW, &TIME, &status, &check) >= 1) {
+ pc.printf("%s\n",data);
+ lat_arr[avg_count]=LAT;
+ lon_arr[avg_count]=LON;
+ avg_count++;
+
+ time = time + 20000.00f;
+ hour = int(time) / 10000;
+ minute = (int(time) % 10000) / 100;
+ seconed = int(time) % 100;
+
+
+ }
+ memset(data, 0, i);
+ ndone=1;
+ i=0;
+ }
+}
+
+*/
+void rounder(){
+ latdeg=get_deg(LAT);
+ londeg=get_deg(LON);
+ latmin=get_min(LAT);
+ lonmin=get_min(LON);
+ pc.printf("%d %.3f, %d %.3f\n",latdeg,latmin,londeg,lonmin);
+}
+
+int get_deg(float fnum){
+ return floor(fnum/100.0f);
+}
+
+float get_min(float fnum){
+ unsigned int tempmini=(int(fnum*1000))%100000;
+ return tempmini/1000.0f;
+}
+
+void avg_read(){
+ LAT=0;
+ LON=0;
+ for(int k=0;k<AVG;k++){
+ LAT+=lat_arr[k];
+ LON+=lon_arr[k];
+ }
+ LAT=LAT/AVG;
+ LON=LON/AVG;
+}
+
+void calibration(){
+ x1_ar=0;
+ x2_ar=0;
+ x3_ar=0;
+ y1_ar=0;
+ y2_ar=0;
+ y3_ar=0;
+ for(int a=0;a<cal_num;a++){
+ x1_ar+=a1.read();
+ x2_ar+=a2.read();
+ x3_ar+=a5.read();
+ y1_ar+=a3.read();
+ y2_ar+=a4.read();
+ y3_ar+=a6.read();
+ }
+ x1_cor=mid_point-((x1_ar/cal_num)*100);
+ x2_cor=mid_point-((x2_ar/cal_num)*100);
+ x3_cor=mid_point-((x3_ar/cal_num)*100);
+ y1_cor=mid_point-((y1_ar/cal_num)*100);
+ y2_cor=mid_point-((y2_ar/cal_num)*100);
+ y3_cor=mid_point-((y3_ar/cal_num)*100);
+ pc.printf("%hd,%hd,%hd,%hd,%hd,%hd\n",x1_cor,y1_cor,x2_cor,y2_cor,x3_cor,y3_cor);
+}
+
+void th_calc(){
+ if(abs(TH)<10){
+ TH_def+=0;
+ }
+ else{
+ if(TH>0){
+ TH_def+=10;
+ }
+ else{
+ TH_def-=10;
+ }
+ }
+ if(TH_def<1000)TH_def=1000;
+ if(JSW1.read()==1)TH_def=1000;
+}
\ No newline at end of file