DAvid Fauzi / Mbed 2 deprecated RxNucleo

Dependencies:   mbed

Committer:
davidf1000
Date:
Fri Sep 20 17:18:16 2019 +0000
Revision:
1:0b3ef7a962cb
Parent:
0:e3fec6da521a
Child:
2:3db66088534c
FIX Clean version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
davidf1000 0:e3fec6da521a 1 #include <mbed.h>
davidf1000 0:e3fec6da521a 2 #include <math.h>
davidf1000 0:e3fec6da521a 3
davidf1000 0:e3fec6da521a 4 Serial pc(SERIAL_TX, SERIAL_RX,230400);
davidf1000 0:e3fec6da521a 5 Serial mega(PC_10, PC_11);
davidf1000 1:0b3ef7a962cb 6 Ticker uart;
davidf1000 0:e3fec6da521a 7 const uint8_t num_limit = 64;
davidf1000 0:e3fec6da521a 8 char receivedChars[num_limit];
davidf1000 0:e3fec6da521a 9 char dataClean[num_limit];
davidf1000 1:0b3ef7a962cb 10 float dataOut[81];
davidf1000 0:e3fec6da521a 11 float floatTemp;
davidf1000 0:e3fec6da521a 12 float out;
davidf1000 0:e3fec6da521a 13 bool cond;
davidf1000 1:0b3ef7a962cb 14 bool newData = false;
davidf1000 1:0b3ef7a962cb 15 int Y;
davidf1000 1:0b3ef7a962cb 16
davidf1000 0:e3fec6da521a 17 void Sentmega(uint8_t DataSent)
davidf1000 0:e3fec6da521a 18 {
davidf1000 0:e3fec6da521a 19 if (mega.writeable() > 0)
davidf1000 0:e3fec6da521a 20 {
davidf1000 0:e3fec6da521a 21 mega.putc(DataSent);
davidf1000 0:e3fec6da521a 22 pc.printf("sent %d to ardu \n",DataSent);
davidf1000 0:e3fec6da521a 23 }
davidf1000 0:e3fec6da521a 24 }
davidf1000 0:e3fec6da521a 25 char getChar()
davidf1000 0:e3fec6da521a 26
davidf1000 0:e3fec6da521a 27 {
davidf1000 0:e3fec6da521a 28 uint8_t dataGet;
davidf1000 0:e3fec6da521a 29 char convert;
davidf1000 0:e3fec6da521a 30 dataGet = mega.getc();
davidf1000 0:e3fec6da521a 31 convert = dataGet;
davidf1000 0:e3fec6da521a 32 return convert;
davidf1000 0:e3fec6da521a 33 }
davidf1000 0:e3fec6da521a 34
davidf1000 0:e3fec6da521a 35 void recvWithStartEndMarkers()
davidf1000 0:e3fec6da521a 36 {
davidf1000 0:e3fec6da521a 37 static bool recvInProgress = false;
davidf1000 0:e3fec6da521a 38 static int ndx = 0;
davidf1000 0:e3fec6da521a 39 char startMarker = '<';
davidf1000 0:e3fec6da521a 40 char endMarker = '>';
davidf1000 0:e3fec6da521a 41 char rc;
davidf1000 0:e3fec6da521a 42 //pc.printf("%d ", mega.readable());
davidf1000 0:e3fec6da521a 43 while (mega.readable() > 0 && newData == false)
davidf1000 0:e3fec6da521a 44 {
davidf1000 0:e3fec6da521a 45 //pc.printf("mega available ");
davidf1000 0:e3fec6da521a 46 rc = getChar();
davidf1000 0:e3fec6da521a 47
davidf1000 0:e3fec6da521a 48 if (recvInProgress == true)
davidf1000 0:e3fec6da521a 49 {
davidf1000 0:e3fec6da521a 50 if (rc != endMarker)
davidf1000 0:e3fec6da521a 51 {
davidf1000 0:e3fec6da521a 52 receivedChars[ndx] = rc;
davidf1000 0:e3fec6da521a 53 ndx++;
davidf1000 0:e3fec6da521a 54 if (ndx >= num_limit)
davidf1000 0:e3fec6da521a 55 {
davidf1000 0:e3fec6da521a 56 ndx = num_limit - 1;
davidf1000 0:e3fec6da521a 57 }
davidf1000 0:e3fec6da521a 58 }
davidf1000 0:e3fec6da521a 59 else
davidf1000 0:e3fec6da521a 60 {
davidf1000 0:e3fec6da521a 61 receivedChars[ndx] = '\0'; // terminate the string
davidf1000 0:e3fec6da521a 62 recvInProgress = false;
davidf1000 0:e3fec6da521a 63 ndx = 0;
davidf1000 0:e3fec6da521a 64 newData = true;
davidf1000 0:e3fec6da521a 65 }
davidf1000 0:e3fec6da521a 66 }
davidf1000 0:e3fec6da521a 67
davidf1000 0:e3fec6da521a 68 else if (rc == startMarker)
davidf1000 0:e3fec6da521a 69 {
davidf1000 0:e3fec6da521a 70 recvInProgress = true;
davidf1000 0:e3fec6da521a 71 }
davidf1000 0:e3fec6da521a 72 }
davidf1000 0:e3fec6da521a 73 }
davidf1000 0:e3fec6da521a 74
davidf1000 0:e3fec6da521a 75 int ChartoInteger(char Charinput)
davidf1000 0:e3fec6da521a 76 {
davidf1000 0:e3fec6da521a 77 static int Inttemp;
davidf1000 0:e3fec6da521a 78 Inttemp = Charinput;
davidf1000 0:e3fec6da521a 79 return Inttemp;
davidf1000 0:e3fec6da521a 80 }
davidf1000 0:e3fec6da521a 81 int ConverttoInt(char Charinput)
davidf1000 0:e3fec6da521a 82 {
davidf1000 0:e3fec6da521a 83 static int Output;
davidf1000 0:e3fec6da521a 84 Output = ChartoInteger(Charinput) - 48;
davidf1000 0:e3fec6da521a 85 return Output;
davidf1000 0:e3fec6da521a 86 }
davidf1000 0:e3fec6da521a 87 void cleanData()
davidf1000 0:e3fec6da521a 88 {
davidf1000 0:e3fec6da521a 89 int i = 0;
davidf1000 0:e3fec6da521a 90 int j = 0;
davidf1000 0:e3fec6da521a 91 while (i < strlen(receivedChars))
davidf1000 0:e3fec6da521a 92 {
davidf1000 0:e3fec6da521a 93 if (receivedChars[i] == '.')
davidf1000 0:e3fec6da521a 94 {
davidf1000 0:e3fec6da521a 95 i++;
davidf1000 0:e3fec6da521a 96 }
davidf1000 0:e3fec6da521a 97 dataClean[j] = receivedChars[i];
davidf1000 0:e3fec6da521a 98 i++;
davidf1000 0:e3fec6da521a 99 j++;
davidf1000 0:e3fec6da521a 100 }
davidf1000 0:e3fec6da521a 101 dataClean[j] = '\0';
davidf1000 0:e3fec6da521a 102 }
davidf1000 0:e3fec6da521a 103 int cekKoma()
davidf1000 0:e3fec6da521a 104 {
davidf1000 0:e3fec6da521a 105 int k = 0;
davidf1000 0:e3fec6da521a 106 while ((receivedChars[k] != '.') and (k < strlen(receivedChars)))
davidf1000 0:e3fec6da521a 107 {
davidf1000 0:e3fec6da521a 108 k++;
davidf1000 0:e3fec6da521a 109 }
davidf1000 0:e3fec6da521a 110 if (k < strlen(receivedChars))
davidf1000 0:e3fec6da521a 111 {
davidf1000 0:e3fec6da521a 112 return k;
davidf1000 0:e3fec6da521a 113 }
davidf1000 0:e3fec6da521a 114 else
davidf1000 0:e3fec6da521a 115 {
davidf1000 0:e3fec6da521a 116 return 0;
davidf1000 0:e3fec6da521a 117 }
davidf1000 0:e3fec6da521a 118 }
davidf1000 0:e3fec6da521a 119 void convertdataFix()
davidf1000 0:e3fec6da521a 120 {
davidf1000 0:e3fec6da521a 121 // pc.printf("cekkoma : %d \n", cekKoma());
davidf1000 0:e3fec6da521a 122 int Stringlength;
davidf1000 0:e3fec6da521a 123 int size;
davidf1000 0:e3fec6da521a 124 Stringlength = strlen(dataClean);
davidf1000 0:e3fec6da521a 125 size = cekKoma();
davidf1000 0:e3fec6da521a 126 floatTemp = 0;
davidf1000 0:e3fec6da521a 127 if (size > 0)
davidf1000 0:e3fec6da521a 128 {
davidf1000 0:e3fec6da521a 129 for (int k = 0; k < Stringlength; k++)
davidf1000 0:e3fec6da521a 130 {
davidf1000 0:e3fec6da521a 131 //pc.printf(" besar pangkat : %d \n", cekKoma() - k - 1);
davidf1000 0:e3fec6da521a 132 //pc.printf("nilai : %f \n",((float)pow((float)10, (float)(cekKoma() - k - 1)) * (float)ConverttoInt(dataClean[k])));
davidf1000 0:e3fec6da521a 133 floatTemp = floatTemp + ((float)pow((float)10, (float)(cekKoma() - k - 1)) * (float)ConverttoInt(dataClean[k]));
davidf1000 0:e3fec6da521a 134 //pc.printf("floatTemp sekarang : %f \n", floatTemp);
davidf1000 0:e3fec6da521a 135 }
davidf1000 0:e3fec6da521a 136 }
davidf1000 0:e3fec6da521a 137 else
davidf1000 0:e3fec6da521a 138 {
davidf1000 0:e3fec6da521a 139 for (int i = 0; i < Stringlength; i++)
davidf1000 0:e3fec6da521a 140 {
davidf1000 0:e3fec6da521a 141 //pc.printf("%d besar pangkat : %d \n",i, cekKoma() - i - 1);
davidf1000 0:e3fec6da521a 142 //pc.printf("nilai : %f \n",((float)pow((float)10, (float)(Stringlength - i - 1)) * (float)ConverttoInt(dataClean[i])));
davidf1000 0:e3fec6da521a 143 floatTemp = floatTemp + ((float)pow((float)10, (float)(Stringlength - i - 1)) * (float)ConverttoInt(dataClean[i]));
davidf1000 0:e3fec6da521a 144 //pc.printf("floatTemp sekarang : %f \n", floatTemp);
davidf1000 0:e3fec6da521a 145 }
davidf1000 0:e3fec6da521a 146 }
davidf1000 0:e3fec6da521a 147 }
davidf1000 0:e3fec6da521a 148
davidf1000 0:e3fec6da521a 149 float showNewData()
davidf1000 0:e3fec6da521a 150 {
davidf1000 0:e3fec6da521a 151 //pc.printf("Were in loop ");
davidf1000 0:e3fec6da521a 152 //recvWithStartEndMarkers();
davidf1000 0:e3fec6da521a 153 while (newData==false)
davidf1000 0:e3fec6da521a 154 {
davidf1000 0:e3fec6da521a 155 //pc.printf(".");
davidf1000 0:e3fec6da521a 156 recvWithStartEndMarkers();
davidf1000 0:e3fec6da521a 157 }
davidf1000 0:e3fec6da521a 158 if (newData == true)
davidf1000 0:e3fec6da521a 159 {
davidf1000 0:e3fec6da521a 160 //pc.printf("DATA Received :");
davidf1000 0:e3fec6da521a 161 //pc.printf("%s \n",receivedChars);
davidf1000 0:e3fec6da521a 162 cleanData();
davidf1000 0:e3fec6da521a 163 //pc.printf("cleandata : %s \n", dataClean);
davidf1000 0:e3fec6da521a 164 convertdataFix();
davidf1000 0:e3fec6da521a 165 out=floatTemp;
davidf1000 0:e3fec6da521a 166 //pc.printf("Output: %.4f \n", out);
davidf1000 0:e3fec6da521a 167 //upSensor();
davidf1000 0:e3fec6da521a 168 newData = false;
davidf1000 0:e3fec6da521a 169 cond=true;
davidf1000 0:e3fec6da521a 170 return out;
davidf1000 0:e3fec6da521a 171 }
davidf1000 0:e3fec6da521a 172 else
davidf1000 0:e3fec6da521a 173 {
davidf1000 0:e3fec6da521a 174 return 99999;
davidf1000 0:e3fec6da521a 175 }
davidf1000 0:e3fec6da521a 176 }
davidf1000 0:e3fec6da521a 177 void upSensor()
davidf1000 0:e3fec6da521a 178 {
davidf1000 0:e3fec6da521a 179 float X;
davidf1000 0:e3fec6da521a 180
davidf1000 0:e3fec6da521a 181 //bool cond;
davidf1000 0:e3fec6da521a 182 //pc.printf("this is upSensor");
davidf1000 0:e3fec6da521a 183 //INISIASI
davidf1000 0:e3fec6da521a 184 cond=false;
davidf1000 0:e3fec6da521a 185 Sentmega(99);
davidf1000 0:e3fec6da521a 186 wait_us(10);
davidf1000 0:e3fec6da521a 187 //break;
davidf1000 0:e3fec6da521a 188 /*X=showNewData();
davidf1000 0:e3fec6da521a 189 pc.printf("%.2f", X);
davidf1000 0:e3fec6da521a 190 while (X!=98)
davidf1000 0:e3fec6da521a 191 {
davidf1000 0:e3fec6da521a 192 X=showNewData();
davidf1000 0:e3fec6da521a 193 }*/
davidf1000 0:e3fec6da521a 194 pc.printf("YEA");
davidf1000 0:e3fec6da521a 195 //UDAH AKTIF 2 PIHAK
davidf1000 0:e3fec6da521a 196 for (int i=0;i<81;i++)
davidf1000 0:e3fec6da521a 197 {
davidf1000 0:e3fec6da521a 198 cond=false;
davidf1000 0:e3fec6da521a 199 while(cond==false) // Coba terus sampe
davidf1000 0:e3fec6da521a 200 {
davidf1000 0:e3fec6da521a 201 //pc.printf("still in cond while \n");
davidf1000 0:e3fec6da521a 202 //wait_us(1000);
davidf1000 0:e3fec6da521a 203 X=showNewData();
davidf1000 0:e3fec6da521a 204 //pc.printf("loop %d : %.2f \n%",i+1,X);
davidf1000 0:e3fec6da521a 205 dataOut[i]=X;
davidf1000 0:e3fec6da521a 206 }
davidf1000 0:e3fec6da521a 207 }
davidf1000 0:e3fec6da521a 208
davidf1000 1:0b3ef7a962cb 209 wait(0.1);
davidf1000 1:0b3ef7a962cb 210 for (int k=0;k<81;k++)
davidf1000 1:0b3ef7a962cb 211 {
davidf1000 1:0b3ef7a962cb 212 Y=k+1;
davidf1000 1:0b3ef7a962cb 213 pc.printf("Data ke %d : %.3f \n",Y,dataOut[k]);
davidf1000 1:0b3ef7a962cb 214 }
davidf1000 0:e3fec6da521a 215 }
davidf1000 0:e3fec6da521a 216
davidf1000 0:e3fec6da521a 217
davidf1000 0:e3fec6da521a 218
davidf1000 0:e3fec6da521a 219
davidf1000 0:e3fec6da521a 220 int main()
davidf1000 0:e3fec6da521a 221 {
davidf1000 0:e3fec6da521a 222 pc.printf("Serial receiver V2");
davidf1000 1:0b3ef7a962cb 223 uart.attach(&upSensor,1.0);
davidf1000 0:e3fec6da521a 224 wait(0.5);
davidf1000 0:e3fec6da521a 225 mega.baud(115200);
davidf1000 0:e3fec6da521a 226 while (1)
davidf1000 0:e3fec6da521a 227 {
davidf1000 1:0b3ef7a962cb 228
davidf1000 0:e3fec6da521a 229 // showNewData();
davidf1000 1:0b3ef7a962cb 230 //upSensor();
davidf1000 1:0b3ef7a962cb 231
davidf1000 1:0b3ef7a962cb 232 wait(0.001);
davidf1000 0:e3fec6da521a 233 //dataOut[0]=floatTemp;
davidf1000 1:0b3ef7a962cb 234 pc.printf("MAIN");
davidf1000 0:e3fec6da521a 235 //wait(0.5);
davidf1000 0:e3fec6da521a 236 }
davidf1000 0:e3fec6da521a 237 }