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.
main.cpp@2:3db66088534c, 2020-01-13 (annotated)
- Committer:
- davidf1000
- Date:
- Mon Jan 13 15:15:50 2020 +0000
- Revision:
- 2:3db66088534c
- Parent:
- 1:0b3ef7a962cb
Rx Nucleo
Who changed what in which revision?
| User | Revision | Line number | New 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 | 2:3db66088534c | 5 | Serial mega(PA_9,PA_10); |
| 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 | 2:3db66088534c | 223 | uart.attach(&upSensor,4.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 | } |