
wowow
Dependencies: C12832 ESP-call FXOS8700Q
communication.h@1:e34e9d7420a0, 2022-06-13 (annotated)
- Committer:
- 201710861
- Date:
- Mon Jun 13 13:43:28 2022 +0000
- Revision:
- 1:e34e9d7420a0
- Parent:
- 0:851ebdb20ae7
The program used during demo; This is the program used on the board with Esp attached
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
201710861 | 0:851ebdb20ae7 | 1 | #include "mbed.h" |
201710861 | 0:851ebdb20ae7 | 2 | int test; |
201710861 | 0:851ebdb20ae7 | 3 | using namespace std; |
201710861 | 0:851ebdb20ae7 | 4 | Thread thread1; |
201710861 | 0:851ebdb20ae7 | 5 | Thread thread2; |
201710861 | 0:851ebdb20ae7 | 6 | Thread thread3; |
201710861 | 0:851ebdb20ae7 | 7 | Mutex mutex; |
201710861 | 0:851ebdb20ae7 | 8 | #define ligthmultiple 7 |
201710861 | 0:851ebdb20ae7 | 9 | int interval = 0; |
201710861 | 0:851ebdb20ae7 | 10 | bool ack=false; |
201710861 | 0:851ebdb20ae7 | 11 | struct ByteData{ |
201710861 | 0:851ebdb20ae7 | 12 | uint8_t* data; |
201710861 | 0:851ebdb20ae7 | 13 | int length; |
201710861 | 0:851ebdb20ae7 | 14 | ByteData(uint8_t* Data,int Length):data(Data),length(Length){}; |
201710861 | 0:851ebdb20ae7 | 15 | ByteData(){}; |
201710861 | 0:851ebdb20ae7 | 16 | }; |
201710861 | 0:851ebdb20ae7 | 17 | struct Datatype{ |
201710861 | 0:851ebdb20ae7 | 18 | char* typename4; |
201710861 | 0:851ebdb20ae7 | 19 | char* type2name4; |
201710861 | 0:851ebdb20ae7 | 20 | Datatype(char* type1,char* type2):typename4(type1),type2name4(type2){}; |
201710861 | 0:851ebdb20ae7 | 21 | Datatype(){}; |
201710861 | 0:851ebdb20ae7 | 22 | }; |
201710861 | 0:851ebdb20ae7 | 23 | struct Datastorage{ |
201710861 | 0:851ebdb20ae7 | 24 | uint8_t* data = new uint8_t[3]; |
201710861 | 0:851ebdb20ae7 | 25 | bool check; |
201710861 | 0:851ebdb20ae7 | 26 | Datastorage(uint8_t* Data,bool Check):data(Data),check(Check){}; |
201710861 | 0:851ebdb20ae7 | 27 | Datastorage(){}; |
201710861 | 0:851ebdb20ae7 | 28 | }; |
201710861 | 0:851ebdb20ae7 | 29 | ByteData DatatoByte(void* data, int length, int typesize, char* typename4, const char* type2name4) { |
201710861 | 0:851ebdb20ae7 | 30 | int a = 0; |
201710861 | 0:851ebdb20ae7 | 31 | int Extensionlength2 = sizeof(type2name4); // img pdf |
201710861 | 0:851ebdb20ae7 | 32 | uint8_t* byte = new uint8_t[length*typesize + 1 + 8 + 2]; |
201710861 | 0:851ebdb20ae7 | 33 | switch (typesize) { |
201710861 | 0:851ebdb20ae7 | 34 | case 1: |
201710861 | 0:851ebdb20ae7 | 35 | for (; a < length; a++) { |
201710861 | 0:851ebdb20ae7 | 36 | byte[a] = *((uint8_t*)data + sizeof(uint8_t) * a); |
201710861 | 0:851ebdb20ae7 | 37 | } |
201710861 | 0:851ebdb20ae7 | 38 | case 2: |
201710861 | 0:851ebdb20ae7 | 39 | for (; a < length; a++) { |
201710861 | 0:851ebdb20ae7 | 40 | byte[a] = *((uint16_t*)data + sizeof(uint8_t) * a); |
201710861 | 0:851ebdb20ae7 | 41 | byte[a + 1] = *((uint16_t*)data + sizeof(uint8_t) * a) >> 4; |
201710861 | 0:851ebdb20ae7 | 42 | a++; |
201710861 | 0:851ebdb20ae7 | 43 | } |
201710861 | 0:851ebdb20ae7 | 44 | case 4: |
201710861 | 0:851ebdb20ae7 | 45 | for (; a < length; a++) { |
201710861 | 0:851ebdb20ae7 | 46 | byte[a] = *((uint32_t*)data + sizeof(uint8_t) * a); |
201710861 | 0:851ebdb20ae7 | 47 | byte[a + 1] = *((uint32_t*)data + sizeof(uint8_t) * a) >> 4; |
201710861 | 0:851ebdb20ae7 | 48 | byte[a + 2] = *((uint32_t*)data + sizeof(uint8_t) * a) >> 8; |
201710861 | 0:851ebdb20ae7 | 49 | byte[a + 3] = *((uint32_t*)data + sizeof(uint8_t) * a) >> 12; |
201710861 | 0:851ebdb20ae7 | 50 | a += 3; |
201710861 | 0:851ebdb20ae7 | 51 | } |
201710861 | 0:851ebdb20ae7 | 52 | case 8: |
201710861 | 0:851ebdb20ae7 | 53 | for (; a < length; a++) { |
201710861 | 0:851ebdb20ae7 | 54 | byte[a] = *((uint64_t*)data + sizeof(uint8_t) * a); |
201710861 | 0:851ebdb20ae7 | 55 | byte[a + 1] = *((uint64_t*)data + sizeof(uint8_t) * a) >> 4; |
201710861 | 0:851ebdb20ae7 | 56 | byte[a + 2] = *((uint64_t*)data + sizeof(uint8_t) * a) >> 8; |
201710861 | 0:851ebdb20ae7 | 57 | byte[a + 3] = *((uint64_t*)data + sizeof(uint8_t) * a) >> 12; |
201710861 | 0:851ebdb20ae7 | 58 | byte[a + 4] = *((uint64_t*)data + sizeof(uint8_t) * a) >> 16; |
201710861 | 0:851ebdb20ae7 | 59 | byte[a + 5] = *((uint64_t*)data + sizeof(uint8_t) * a) >> 20; |
201710861 | 0:851ebdb20ae7 | 60 | byte[a + 6] = *((uint64_t*)data + sizeof(uint8_t) * a) >> 24; |
201710861 | 0:851ebdb20ae7 | 61 | byte[a + 7] = *((uint64_t*)data + sizeof(uint8_t) * a) >> 32; |
201710861 | 0:851ebdb20ae7 | 62 | a += 7; |
201710861 | 0:851ebdb20ae7 | 63 | } |
201710861 | 0:851ebdb20ae7 | 64 | } |
201710861 | 0:851ebdb20ae7 | 65 | byte[a++] = uint8_t('.'); |
201710861 | 0:851ebdb20ae7 | 66 | printf("%0x", uint8_t('.')); |
201710861 | 0:851ebdb20ae7 | 67 | for (int i = 0; a < length + 5; a++, i++) { |
201710861 | 0:851ebdb20ae7 | 68 | byte[a] = uint8_t((typename4[i])); |
201710861 | 0:851ebdb20ae7 | 69 | } |
201710861 | 0:851ebdb20ae7 | 70 | for (int i = 0; a < length + 9; a++, i++) { |
201710861 | 0:851ebdb20ae7 | 71 | byte[a] = uint8_t((type2name4[i])); |
201710861 | 0:851ebdb20ae7 | 72 | } |
201710861 | 0:851ebdb20ae7 | 73 | byte[a++] = uint8_t('.'); |
201710861 | 0:851ebdb20ae7 | 74 | byte[a++] = uint8_t('.'); |
201710861 | 0:851ebdb20ae7 | 75 | for (int i = 0; i < a; i++) { |
201710861 | 0:851ebdb20ae7 | 76 | printf("%02x = %c\n", byte[i],char(byte[i])); |
201710861 | 0:851ebdb20ae7 | 77 | } |
201710861 | 0:851ebdb20ae7 | 78 | return ByteData(byte, a); |
201710861 | 0:851ebdb20ae7 | 79 | } |
201710861 | 0:851ebdb20ae7 | 80 | Datatype ExtractionDatatype(uint8_t* reciveData,int datalength){ |
201710861 | 0:851ebdb20ae7 | 81 | char *type1 = (char*)malloc(sizeof(char)*4); |
201710861 | 0:851ebdb20ae7 | 82 | char *type2 = (char*)malloc(sizeof(char)*4); |
201710861 | 0:851ebdb20ae7 | 83 | for(int i = datalength - 8,j=0; i < datalength-4;i++,j++){ |
201710861 | 0:851ebdb20ae7 | 84 | type1[j] = reciveData[i]; |
201710861 | 0:851ebdb20ae7 | 85 | } |
201710861 | 0:851ebdb20ae7 | 86 | for(int i = datalength - 4,j=0; i < datalength;i++,j++){ |
201710861 | 0:851ebdb20ae7 | 87 | type2[j] = reciveData[i]; |
201710861 | 0:851ebdb20ae7 | 88 | } |
201710861 | 0:851ebdb20ae7 | 89 | return Datatype(type1,type2); |
201710861 | 0:851ebdb20ae7 | 90 | } |
201710861 | 0:851ebdb20ae7 | 91 | void Sending(uint8_t Data1, uint8_t Data2, uint8_t Data3,DigitalOut D) { |
201710861 | 0:851ebdb20ae7 | 92 | bool* send = new bool[32]; |
201710861 | 0:851ebdb20ae7 | 93 | uint8_t checksum = Data1 + Data2 + Data3; |
201710861 | 0:851ebdb20ae7 | 94 | printf("%c,%c ,%c\n",(char)Data1,(char)Data2,(char)Data3); |
201710861 | 0:851ebdb20ae7 | 95 | uint8_t Data[4] = { Data1, Data2, Data3, checksum}; |
201710861 | 0:851ebdb20ae7 | 96 | printf("%s",Data); |
201710861 | 0:851ebdb20ae7 | 97 | for (int i = 0,j=0; i < 4; i++) { |
201710861 | 0:851ebdb20ae7 | 98 | send[j++] = (Data[i] & 1)/1; |
201710861 | 0:851ebdb20ae7 | 99 | send[j++] = (Data[i] & 2)/2; |
201710861 | 0:851ebdb20ae7 | 100 | send[j++] = (Data[i] & 4)/4; |
201710861 | 0:851ebdb20ae7 | 101 | send[j++] = (Data[i] & 8)/8; |
201710861 | 0:851ebdb20ae7 | 102 | send[j++] = (Data[i] & 16)/16; |
201710861 | 0:851ebdb20ae7 | 103 | send[j++] = (Data[i] & 32)/32; |
201710861 | 0:851ebdb20ae7 | 104 | send[j++] = (Data[i] & 64)/64; |
201710861 | 0:851ebdb20ae7 | 105 | send[j++] = (Data[i] & 128)/128; |
201710861 | 0:851ebdb20ae7 | 106 | /*send[j++] = (Data[i] & 128)/128; |
201710861 | 0:851ebdb20ae7 | 107 | send[j++] = (Data[i] & 64)/64; |
201710861 | 0:851ebdb20ae7 | 108 | send[j++] = (Data[i] & 32)/32; |
201710861 | 0:851ebdb20ae7 | 109 | send[j++] = (Data[i] & 16)/16; |
201710861 | 0:851ebdb20ae7 | 110 | send[j++] = (Data[i] & 8)/8; |
201710861 | 0:851ebdb20ae7 | 111 | send[j++] = (Data[i] & 4)/4; |
201710861 | 0:851ebdb20ae7 | 112 | send[j++] = (Data[i] & 2)/2; |
201710861 | 0:851ebdb20ae7 | 113 | send[j++] = (Data[i] & 1)/1;*/ |
201710861 | 0:851ebdb20ae7 | 114 | } |
201710861 | 0:851ebdb20ae7 | 115 | printf("now really sendingready\r\n"); |
201710861 | 0:851ebdb20ae7 | 116 | D = 1; |
201710861 | 0:851ebdb20ae7 | 117 | thread_sleep_for(interval*10); |
201710861 | 0:851ebdb20ae7 | 118 | printf("now really sending\r\n"); |
201710861 | 0:851ebdb20ae7 | 119 | D = 0; |
201710861 | 0:851ebdb20ae7 | 120 | thread_sleep_for(interval); |
201710861 | 0:851ebdb20ae7 | 121 | for(int j = 31;j >=0;j--){ |
201710861 | 0:851ebdb20ae7 | 122 | D = send[j]; |
201710861 | 0:851ebdb20ae7 | 123 | thread_sleep_for(interval); |
201710861 | 0:851ebdb20ae7 | 124 | } |
201710861 | 0:851ebdb20ae7 | 125 | D = 0; |
201710861 | 0:851ebdb20ae7 | 126 | for(int j = 31;j >=0;j--){ |
201710861 | 0:851ebdb20ae7 | 127 | printf("%d",send[j]); |
201710861 | 0:851ebdb20ae7 | 128 | } |
201710861 | 0:851ebdb20ae7 | 129 | } |
201710861 | 0:851ebdb20ae7 | 130 | void onoff(DigitalOut* D){ |
201710861 | 0:851ebdb20ae7 | 131 | while(true){ |
201710861 | 0:851ebdb20ae7 | 132 | thread_sleep_for(interval); |
201710861 | 0:851ebdb20ae7 | 133 | *D = 1; |
201710861 | 0:851ebdb20ae7 | 134 | thread_sleep_for(interval); |
201710861 | 0:851ebdb20ae7 | 135 | *D = 0; |
201710861 | 0:851ebdb20ae7 | 136 | } |
201710861 | 0:851ebdb20ae7 | 137 | } |
201710861 | 0:851ebdb20ae7 | 138 | void Recvack(AnalogIn* A){ |
201710861 | 0:851ebdb20ae7 | 139 | float val[8]; |
201710861 | 0:851ebdb20ae7 | 140 | bool test = true; |
201710861 | 0:851ebdb20ae7 | 141 | uint8_t result = 0; |
201710861 | 0:851ebdb20ae7 | 142 | while(true){ |
201710861 | 0:851ebdb20ae7 | 143 | printf("start recvack\n\r"); |
201710861 | 0:851ebdb20ae7 | 144 | val[0] = A->read() * ligthmultiple; |
201710861 | 0:851ebdb20ae7 | 145 | printf("wow\n\r"); |
201710861 | 0:851ebdb20ae7 | 146 | for(int i = 0;i<8;i++){ |
201710861 | 0:851ebdb20ae7 | 147 | val[i] = A->read() * ligthmultiple; |
201710861 | 0:851ebdb20ae7 | 148 | thread_sleep_for(interval); |
201710861 | 0:851ebdb20ae7 | 149 | } |
201710861 | 0:851ebdb20ae7 | 150 | for(int i = 0;i<8;i+=2){ |
201710861 | 0:851ebdb20ae7 | 151 | test &= (val[i] > 0.5 )? true : false; |
201710861 | 0:851ebdb20ae7 | 152 | printf("%d",(bool)val[i]); |
201710861 | 0:851ebdb20ae7 | 153 | } |
201710861 | 0:851ebdb20ae7 | 154 | if(test) |
201710861 | 0:851ebdb20ae7 | 155 | printf("wow3\n\r"); |
201710861 | 0:851ebdb20ae7 | 156 | return; |
201710861 | 0:851ebdb20ae7 | 157 | /*val[0] = (val[0] > 0.5 )? true : false;*/ |
201710861 | 0:851ebdb20ae7 | 158 | thread_sleep_for(interval*2); |
201710861 | 0:851ebdb20ae7 | 159 | /*if(true == val[0]){ |
201710861 | 0:851ebdb20ae7 | 160 | printf("=============="); |
201710861 | 0:851ebdb20ae7 | 161 | for(int i = 0;i<8;i++){ |
201710861 | 0:851ebdb20ae7 | 162 | val[i] = A->read() * ligthmultiple; |
201710861 | 0:851ebdb20ae7 | 163 | val[i] = (val[i] > 0.5 )? true : false; |
201710861 | 0:851ebdb20ae7 | 164 | thread_sleep_for(interval); |
201710861 | 0:851ebdb20ae7 | 165 | } |
201710861 | 0:851ebdb20ae7 | 166 | result |= (int)val[0]; |
201710861 | 0:851ebdb20ae7 | 167 | result |= (int)val[1]*2; |
201710861 | 0:851ebdb20ae7 | 168 | result |= (int)val[2]*4; |
201710861 | 0:851ebdb20ae7 | 169 | result |= (int)val[3]*8; |
201710861 | 0:851ebdb20ae7 | 170 | result |= (int)val[4]*16; |
201710861 | 0:851ebdb20ae7 | 171 | result |= (int)val[5]*32; |
201710861 | 0:851ebdb20ae7 | 172 | result |= (int)val[6]*64; |
201710861 | 0:851ebdb20ae7 | 173 | result |= (int)val[7]*128; |
201710861 | 0:851ebdb20ae7 | 174 | if(result == 0x55){ |
201710861 | 0:851ebdb20ae7 | 175 | printf("scuuscusc"); |
201710861 | 0:851ebdb20ae7 | 176 | ack = true; |
201710861 | 0:851ebdb20ae7 | 177 | printf("start recvack"); |
201710861 | 0:851ebdb20ae7 | 178 | } |
201710861 | 0:851ebdb20ae7 | 179 | }*/ |
201710861 | 0:851ebdb20ae7 | 180 | } |
201710861 | 0:851ebdb20ae7 | 181 | } |
201710861 | 0:851ebdb20ae7 | 182 | bool Synchronizesender(DigitalOut D,AnalogIn A){ |
201710861 | 0:851ebdb20ae7 | 183 | thread1.start(callback(onoff, &D)); |
201710861 | 0:851ebdb20ae7 | 184 | thread2.start(callback(Recvack, &A)); |
201710861 | 0:851ebdb20ae7 | 185 | printf("nb"); |
201710861 | 0:851ebdb20ae7 | 186 | thread2.join(); |
201710861 | 0:851ebdb20ae7 | 187 | D = 0; |
201710861 | 0:851ebdb20ae7 | 188 | printf("hie"); |
201710861 | 0:851ebdb20ae7 | 189 | thread1.terminate(); |
201710861 | 0:851ebdb20ae7 | 190 | D = 0; |
201710861 | 0:851ebdb20ae7 | 191 | return true; |
201710861 | 0:851ebdb20ae7 | 192 | /*if(ack == true){ |
201710861 | 0:851ebdb20ae7 | 193 | ack = false; |
201710861 | 0:851ebdb20ae7 | 194 | return true; |
201710861 | 0:851ebdb20ae7 | 195 | }else{ |
201710861 | 0:851ebdb20ae7 | 196 | return false; |
201710861 | 0:851ebdb20ae7 | 197 | } */ |
201710861 | 0:851ebdb20ae7 | 198 | } |
201710861 | 0:851ebdb20ae7 | 199 | void Findclock(AnalogIn *A){ |
201710861 | 0:851ebdb20ae7 | 200 | float val; |
201710861 | 0:851ebdb20ae7 | 201 | bool start; |
201710861 | 0:851ebdb20ae7 | 202 | bool result; |
201710861 | 0:851ebdb20ae7 | 203 | int Cycle; |
201710861 | 0:851ebdb20ae7 | 204 | int intervaltime; |
201710861 | 0:851ebdb20ae7 | 205 | Timer t; |
201710861 | 0:851ebdb20ae7 | 206 | t.reset(); |
201710861 | 0:851ebdb20ae7 | 207 | printf("now find interval\n\r"); |
201710861 | 0:851ebdb20ae7 | 208 | while(true){ |
201710861 | 0:851ebdb20ae7 | 209 | val = A->read() * ligthmultiple; |
201710861 | 0:851ebdb20ae7 | 210 | if(val < 0.5){ |
201710861 | 0:851ebdb20ae7 | 211 | break; |
201710861 | 0:851ebdb20ae7 | 212 | } |
201710861 | 0:851ebdb20ae7 | 213 | } |
201710861 | 0:851ebdb20ae7 | 214 | while(true){ |
201710861 | 0:851ebdb20ae7 | 215 | val = A->read() * ligthmultiple; |
201710861 | 0:851ebdb20ae7 | 216 | if(val > 0.5){ |
201710861 | 0:851ebdb20ae7 | 217 | t.start(); |
201710861 | 0:851ebdb20ae7 | 218 | break; |
201710861 | 0:851ebdb20ae7 | 219 | } |
201710861 | 0:851ebdb20ae7 | 220 | } |
201710861 | 0:851ebdb20ae7 | 221 | while(true){ |
201710861 | 0:851ebdb20ae7 | 222 | val = A->read() * ligthmultiple; |
201710861 | 0:851ebdb20ae7 | 223 | if(val < 0.5){ |
201710861 | 0:851ebdb20ae7 | 224 | t.stop(); |
201710861 | 0:851ebdb20ae7 | 225 | interval = t.read_ms(); |
201710861 | 0:851ebdb20ae7 | 226 | break; |
201710861 | 0:851ebdb20ae7 | 227 | } |
201710861 | 0:851ebdb20ae7 | 228 | } |
201710861 | 0:851ebdb20ae7 | 229 | t.reset(); |
201710861 | 0:851ebdb20ae7 | 230 | while(true){ |
201710861 | 0:851ebdb20ae7 | 231 | val = A->read() * ligthmultiple; |
201710861 | 0:851ebdb20ae7 | 232 | if(val < 0.5){ |
201710861 | 0:851ebdb20ae7 | 233 | break; |
201710861 | 0:851ebdb20ae7 | 234 | } |
201710861 | 0:851ebdb20ae7 | 235 | } |
201710861 | 0:851ebdb20ae7 | 236 | while(true){ |
201710861 | 0:851ebdb20ae7 | 237 | val = A->read() * ligthmultiple; |
201710861 | 0:851ebdb20ae7 | 238 | if(val > 0.5){ |
201710861 | 0:851ebdb20ae7 | 239 | t.start(); |
201710861 | 0:851ebdb20ae7 | 240 | break; |
201710861 | 0:851ebdb20ae7 | 241 | } |
201710861 | 0:851ebdb20ae7 | 242 | } |
201710861 | 0:851ebdb20ae7 | 243 | while(true){ |
201710861 | 0:851ebdb20ae7 | 244 | val = A->read() * ligthmultiple; |
201710861 | 0:851ebdb20ae7 | 245 | if(val < 0.5){ |
201710861 | 0:851ebdb20ae7 | 246 | t.stop(); |
201710861 | 0:851ebdb20ae7 | 247 | intervaltime = t.read_ms(); |
201710861 | 0:851ebdb20ae7 | 248 | break; |
201710861 | 0:851ebdb20ae7 | 249 | } |
201710861 | 0:851ebdb20ae7 | 250 | } |
201710861 | 0:851ebdb20ae7 | 251 | printf("interval time = %d,%d\n\r",intervaltime,interval); |
201710861 | 0:851ebdb20ae7 | 252 | printf("now find interval suc\n\r"); |
201710861 | 0:851ebdb20ae7 | 253 | if(intervaltime==interval){ |
201710861 | 0:851ebdb20ae7 | 254 | interval = interval - (interval %10); |
201710861 | 0:851ebdb20ae7 | 255 | printf("return"); |
201710861 | 0:851ebdb20ae7 | 256 | } |
201710861 | 0:851ebdb20ae7 | 257 | else{ |
201710861 | 0:851ebdb20ae7 | 258 | printf("fail"); |
201710861 | 0:851ebdb20ae7 | 259 | } |
201710861 | 0:851ebdb20ae7 | 260 | } |
201710861 | 0:851ebdb20ae7 | 261 | void Findlight(AnalogIn* A){ |
201710861 | 0:851ebdb20ae7 | 262 | float val; |
201710861 | 0:851ebdb20ae7 | 263 | float val2; |
201710861 | 0:851ebdb20ae7 | 264 | while(true){ |
201710861 | 0:851ebdb20ae7 | 265 | val = A->read() * ligthmultiple; |
201710861 | 0:851ebdb20ae7 | 266 | printf("%2.2f\r\n",val); |
201710861 | 0:851ebdb20ae7 | 267 | if(val > 0.5){ |
201710861 | 0:851ebdb20ae7 | 268 | break; |
201710861 | 0:851ebdb20ae7 | 269 | } |
201710861 | 0:851ebdb20ae7 | 270 | thread_sleep_for(100); |
201710861 | 0:851ebdb20ae7 | 271 | } |
201710861 | 0:851ebdb20ae7 | 272 | /*ack=true*/ // 이거 오류나는데 왜지 ? |
201710861 | 0:851ebdb20ae7 | 273 | return; |
201710861 | 0:851ebdb20ae7 | 274 | } |
201710861 | 0:851ebdb20ae7 | 275 | void SendAck(DigitalOut *D){ |
201710861 | 0:851ebdb20ae7 | 276 | printf("start sendack"); |
201710861 | 0:851ebdb20ae7 | 277 | *D = 0; |
201710861 | 0:851ebdb20ae7 | 278 | for(int i = 0;i < 20; i++ ){ |
201710861 | 0:851ebdb20ae7 | 279 | *D = !(*D); |
201710861 | 0:851ebdb20ae7 | 280 | thread_sleep_for(interval); |
201710861 | 0:851ebdb20ae7 | 281 | } |
201710861 | 0:851ebdb20ae7 | 282 | } |
201710861 | 0:851ebdb20ae7 | 283 | bool Synchronizereciver(DigitalOut D,AnalogIn A){ |
201710861 | 0:851ebdb20ae7 | 284 | float val[8]; |
201710861 | 0:851ebdb20ae7 | 285 | Findlight(&A); |
201710861 | 0:851ebdb20ae7 | 286 | printf("find!!"); |
201710861 | 0:851ebdb20ae7 | 287 | printf("now find interval"); |
201710861 | 0:851ebdb20ae7 | 288 | thread3.start(callback(Findclock, &A)); |
201710861 | 0:851ebdb20ae7 | 289 | /*Findclock(A); //왜 안되징*/ |
201710861 | 0:851ebdb20ae7 | 290 | thread3.join(); |
201710861 | 0:851ebdb20ae7 | 291 | printf("error?");//여기가 왜 sendack부터 보내버리고 안에있는걸 출력할까 |
201710861 | 0:851ebdb20ae7 | 292 | /*SendAck(D);*/ |
201710861 | 0:851ebdb20ae7 | 293 | printf("now send ack\n\r"); |
201710861 | 0:851ebdb20ae7 | 294 | thread3.start(callback(SendAck, &D)); |
201710861 | 0:851ebdb20ae7 | 295 | thread3.join(); |
201710861 | 0:851ebdb20ae7 | 296 | printf("send ack suc\n\r"); |
201710861 | 0:851ebdb20ae7 | 297 | ack = false; |
201710861 | 0:851ebdb20ae7 | 298 | return true; |
201710861 | 0:851ebdb20ae7 | 299 | } |
201710861 | 0:851ebdb20ae7 | 300 | Datastorage Recieving(AnalogIn sensor) { |
201710861 | 0:851ebdb20ae7 | 301 | float val[32]; |
201710861 | 0:851ebdb20ae7 | 302 | uint8_t* Data = new uint8_t[4]; |
201710861 | 0:851ebdb20ae7 | 303 | printf("ready\r\n"); |
201710861 | 0:851ebdb20ae7 | 304 | printf("now really ready\r\n"); |
201710861 | 0:851ebdb20ae7 | 305 | while(true){ |
201710861 | 0:851ebdb20ae7 | 306 | if((sensor.read() * ligthmultiple)> 0.5){ |
201710861 | 0:851ebdb20ae7 | 307 | break; |
201710861 | 0:851ebdb20ae7 | 308 | } |
201710861 | 0:851ebdb20ae7 | 309 | } |
201710861 | 0:851ebdb20ae7 | 310 | while(true){ |
201710861 | 0:851ebdb20ae7 | 311 | if((sensor.read() * ligthmultiple)< 0.5){ |
201710861 | 0:851ebdb20ae7 | 312 | thread_sleep_for(interval*1.5); |
201710861 | 0:851ebdb20ae7 | 313 | break; |
201710861 | 0:851ebdb20ae7 | 314 | } |
201710861 | 0:851ebdb20ae7 | 315 | } |
201710861 | 0:851ebdb20ae7 | 316 | for(int i = 0;i < 32;i++){ |
201710861 | 0:851ebdb20ae7 | 317 | val[i] = sensor.read() * ligthmultiple; |
201710861 | 0:851ebdb20ae7 | 318 | thread_sleep_for(interval); |
201710861 | 0:851ebdb20ae7 | 319 | } |
201710861 | 0:851ebdb20ae7 | 320 | for(int i = 0;i < 32;i++){ |
201710861 | 0:851ebdb20ae7 | 321 | val[i] = (val[i] > 0.5 )? true : false; |
201710861 | 0:851ebdb20ae7 | 322 | } |
201710861 | 0:851ebdb20ae7 | 323 | printf("now receive = "); |
201710861 | 0:851ebdb20ae7 | 324 | for(int i = 0;i < 32 ;i++){ |
201710861 | 0:851ebdb20ae7 | 325 | printf("%d",(int)val[i]); |
201710861 | 0:851ebdb20ae7 | 326 | } |
201710861 | 0:851ebdb20ae7 | 327 | int j = 4; |
201710861 | 0:851ebdb20ae7 | 328 | for (; j >= 0; j--) { |
201710861 | 0:851ebdb20ae7 | 329 | Data[j] = 0; |
201710861 | 0:851ebdb20ae7 | 330 | Data[j] |= (int)val[j * 8 + 7]; |
201710861 | 0:851ebdb20ae7 | 331 | Data[j] |= (int)val[j * 8 + 6] * 2; |
201710861 | 0:851ebdb20ae7 | 332 | Data[j] |= (int)val[j * 8 + 5] * 4; |
201710861 | 0:851ebdb20ae7 | 333 | Data[j] |= (int)val[j * 8 + 4] * 8; |
201710861 | 0:851ebdb20ae7 | 334 | Data[j] |= (int)val[j * 8 + 3] * 16; |
201710861 | 0:851ebdb20ae7 | 335 | Data[j] |= (int)val[j * 8 + 2] * 32; |
201710861 | 0:851ebdb20ae7 | 336 | Data[j] |= (int)val[j * 8 + 1] * 64; |
201710861 | 0:851ebdb20ae7 | 337 | Data[j] |= (int)val[j * 8] * 128; |
201710861 | 0:851ebdb20ae7 | 338 | } |
201710861 | 0:851ebdb20ae7 | 339 | printf("%c%c%c",(char)Data[3],(char)Data[2],(char)Data[1]); |
201710861 | 0:851ebdb20ae7 | 340 | printf("=%0x%0x%0x",Data[3],Data[2],Data[1]); |
201710861 | 0:851ebdb20ae7 | 341 | if (Data[0] == (Data[1] + Data[2] + Data[3])) { |
201710861 | 0:851ebdb20ae7 | 342 | //SendSucData(); |
201710861 | 0:851ebdb20ae7 | 343 | Datastorage returnvalue; |
201710861 | 0:851ebdb20ae7 | 344 | returnvalue.data[0] = Data[3]; |
201710861 | 0:851ebdb20ae7 | 345 | returnvalue.data[1] = Data[2]; |
201710861 | 0:851ebdb20ae7 | 346 | returnvalue.data[2] = Data[1]; |
201710861 | 0:851ebdb20ae7 | 347 | returnvalue.check = true; |
201710861 | 0:851ebdb20ae7 | 348 | return returnvalue; |
201710861 | 0:851ebdb20ae7 | 349 | } |
201710861 | 0:851ebdb20ae7 | 350 | else { |
201710861 | 0:851ebdb20ae7 | 351 | return Datastorage(Data,false); |
201710861 | 0:851ebdb20ae7 | 352 | //SendFailData(); |
201710861 | 0:851ebdb20ae7 | 353 | } |
201710861 | 0:851ebdb20ae7 | 354 | //32bit |
201710861 | 0:851ebdb20ae7 | 355 | } |
201710861 | 0:851ebdb20ae7 | 356 | void send(DigitalOut D,AnalogIn sensor){ |
201710861 | 0:851ebdb20ae7 | 357 | interval = 100; //이거 임시 |
201710861 | 0:851ebdb20ae7 | 358 | char* inputvalue = new char[50]; |
201710861 | 0:851ebdb20ae7 | 359 | char* name = new char[4]; |
201710861 | 0:851ebdb20ae7 | 360 | name = (char*)"char"; |
201710861 | 0:851ebdb20ae7 | 361 | printf("hellow input here\n\r"); |
201710861 | 0:851ebdb20ae7 | 362 | scanf("%s", inputvalue); |
201710861 | 0:851ebdb20ae7 | 363 | printf("input interval speed\n\r"); |
201710861 | 0:851ebdb20ae7 | 364 | scanf("%d", &interval); |
201710861 | 0:851ebdb20ae7 | 365 | printf("success\n"); |
201710861 | 0:851ebdb20ae7 | 366 | ByteData send = DatatoByte(inputvalue, strlen(inputvalue),sizeof(inputvalue[0]),name,"null"); |
201710861 | 0:851ebdb20ae7 | 367 | if(!Synchronizesender(D,sensor)){ |
201710861 | 0:851ebdb20ae7 | 368 | printf("fail sending"); |
201710861 | 0:851ebdb20ae7 | 369 | } |
201710861 | 0:851ebdb20ae7 | 370 | else{ |
201710861 | 0:851ebdb20ae7 | 371 | int nulldata = send.length%3; |
201710861 | 0:851ebdb20ae7 | 372 | printf("now sending\n"); |
201710861 | 0:851ebdb20ae7 | 373 | thread_sleep_for(interval*5); |
201710861 | 0:851ebdb20ae7 | 374 | //scanf("%d",&test); |
201710861 | 0:851ebdb20ae7 | 375 | printf("........\n"); |
201710861 | 0:851ebdb20ae7 | 376 | for(int j = 0; j < send.length;j++){ |
201710861 | 0:851ebdb20ae7 | 377 | printf("{%d}{%c=%0x}", j,send.data[j],send.data[j]); |
201710861 | 0:851ebdb20ae7 | 378 | } |
201710861 | 0:851ebdb20ae7 | 379 | printf("........\n"); |
201710861 | 0:851ebdb20ae7 | 380 | printf("sendlength =%d,cycle = %d",send.length,send.length/3); |
201710861 | 0:851ebdb20ae7 | 381 | printf("........\n"); |
201710861 | 0:851ebdb20ae7 | 382 | int i = 0; |
201710861 | 0:851ebdb20ae7 | 383 | for(; i < send.length-nulldata;){ |
201710861 | 0:851ebdb20ae7 | 384 | printf("==%c,%c,%c-cycle = %d-==",send.data[i],send.data[i+1],send.data[i+2],i); |
201710861 | 0:851ebdb20ae7 | 385 | Sending(send.data[i],send.data[i+1],send.data[i+2],D); |
201710861 | 0:851ebdb20ae7 | 386 | D = 0; |
201710861 | 0:851ebdb20ae7 | 387 | Recvack(&sensor); |
201710861 | 0:851ebdb20ae7 | 388 | D = 0; |
201710861 | 0:851ebdb20ae7 | 389 | if(ack == false){ |
201710861 | 0:851ebdb20ae7 | 390 | thread_sleep_for(interval*30); |
201710861 | 0:851ebdb20ae7 | 391 | i+=3; |
201710861 | 0:851ebdb20ae7 | 392 | continue; |
201710861 | 0:851ebdb20ae7 | 393 | } |
201710861 | 0:851ebdb20ae7 | 394 | ack = false; |
201710861 | 0:851ebdb20ae7 | 395 | i+=3; |
201710861 | 0:851ebdb20ae7 | 396 | } |
201710861 | 0:851ebdb20ae7 | 397 | for(int j=0;j<1;){ |
201710861 | 0:851ebdb20ae7 | 398 | switch(nulldata){ |
201710861 | 0:851ebdb20ae7 | 399 | case 0: |
201710861 | 0:851ebdb20ae7 | 400 | Sending(0x00,0x00,0x00,D); |
201710861 | 0:851ebdb20ae7 | 401 | //Sendcheckbit |
201710861 | 0:851ebdb20ae7 | 402 | break; |
201710861 | 0:851ebdb20ae7 | 403 | case 1: |
201710861 | 0:851ebdb20ae7 | 404 | i++; |
201710861 | 0:851ebdb20ae7 | 405 | Sending(send.data[i],0x00,0x00,D); |
201710861 | 0:851ebdb20ae7 | 406 | //Sendcheckbit |
201710861 | 0:851ebdb20ae7 | 407 | break; |
201710861 | 0:851ebdb20ae7 | 408 | case 2: |
201710861 | 0:851ebdb20ae7 | 409 | i++; |
201710861 | 0:851ebdb20ae7 | 410 | Sending(send.data[i],send.data[i+1],0x00,D); |
201710861 | 0:851ebdb20ae7 | 411 | //Sendcheckbit |
201710861 | 0:851ebdb20ae7 | 412 | break; |
201710861 | 0:851ebdb20ae7 | 413 | } |
201710861 | 0:851ebdb20ae7 | 414 | D = 0; |
201710861 | 0:851ebdb20ae7 | 415 | Recvack(&sensor); |
201710861 | 0:851ebdb20ae7 | 416 | D = 0; |
201710861 | 0:851ebdb20ae7 | 417 | if(ack == false){ |
201710861 | 0:851ebdb20ae7 | 418 | continue; |
201710861 | 0:851ebdb20ae7 | 419 | } |
201710861 | 0:851ebdb20ae7 | 420 | ack = false; |
201710861 | 0:851ebdb20ae7 | 421 | } |
201710861 | 0:851ebdb20ae7 | 422 | printf("send suc\n"); |
201710861 | 0:851ebdb20ae7 | 423 | } |
201710861 | 0:851ebdb20ae7 | 424 | } |
201710861 | 0:851ebdb20ae7 | 425 | void recv(DigitalOut D,AnalogIn sensor){ |
201710861 | 0:851ebdb20ae7 | 426 | uint8_t* reciveData = (uint8_t*)malloc(sizeof(uint8_t)*256); |
201710861 | 0:851ebdb20ae7 | 427 | Datastorage reciveData3; |
201710861 | 0:851ebdb20ae7 | 428 | int length; |
201710861 | 0:851ebdb20ae7 | 429 | printf("start\n"); |
201710861 | 0:851ebdb20ae7 | 430 | if(Synchronizereciver(D,sensor)){ |
201710861 | 0:851ebdb20ae7 | 431 | int i = 0; |
201710861 | 0:851ebdb20ae7 | 432 | printf("1now receiveing1\n"); |
201710861 | 0:851ebdb20ae7 | 433 | thread_sleep_for(interval*7); |
201710861 | 0:851ebdb20ae7 | 434 | while(true){ |
201710861 | 0:851ebdb20ae7 | 435 | printf("start recieve"); |
201710861 | 0:851ebdb20ae7 | 436 | reciveData3 = Recieving(sensor); |
201710861 | 0:851ebdb20ae7 | 437 | if(!(reciveData3.check)){ |
201710861 | 0:851ebdb20ae7 | 438 | printf("continue"); |
201710861 | 0:851ebdb20ae7 | 439 | SendAck(&D); |
201710861 | 0:851ebdb20ae7 | 440 | continue;//연산으로 시간차이때문에 대기시간도 필요한데 |
201710861 | 0:851ebdb20ae7 | 441 | } |
201710861 | 0:851ebdb20ae7 | 442 | else{ |
201710861 | 0:851ebdb20ae7 | 443 | SendAck(&D);//sendfail |
201710861 | 0:851ebdb20ae7 | 444 | } |
201710861 | 0:851ebdb20ae7 | 445 | if(reciveData3.data[0] == 0x00) |
201710861 | 0:851ebdb20ae7 | 446 | length = i; |
201710861 | 0:851ebdb20ae7 | 447 | break; |
201710861 | 0:851ebdb20ae7 | 448 | if(reciveData3.data[1] == 0x00){ |
201710861 | 0:851ebdb20ae7 | 449 | reciveData[i++] = reciveData3.data[0]; |
201710861 | 0:851ebdb20ae7 | 450 | length = i; |
201710861 | 0:851ebdb20ae7 | 451 | break; |
201710861 | 0:851ebdb20ae7 | 452 | } |
201710861 | 0:851ebdb20ae7 | 453 | if(reciveData3.data[2] == 0x00){ |
201710861 | 0:851ebdb20ae7 | 454 | reciveData[i++] = reciveData3.data[0]; |
201710861 | 0:851ebdb20ae7 | 455 | reciveData[i++] = reciveData3.data[1]; |
201710861 | 0:851ebdb20ae7 | 456 | length = i; |
201710861 | 0:851ebdb20ae7 | 457 | break; |
201710861 | 0:851ebdb20ae7 | 458 | } |
201710861 | 0:851ebdb20ae7 | 459 | reciveData[i++] = reciveData3.data[0]; |
201710861 | 0:851ebdb20ae7 | 460 | reciveData[i++] = reciveData3.data[1]; |
201710861 | 0:851ebdb20ae7 | 461 | reciveData[i++] = reciveData3.data[2]; |
201710861 | 0:851ebdb20ae7 | 462 | } |
201710861 | 0:851ebdb20ae7 | 463 | Datatype type = ExtractionDatatype(reciveData,length); |
201710861 | 0:851ebdb20ae7 | 464 | printf("suc here\n"); |
201710861 | 0:851ebdb20ae7 | 465 | for(int i = 0;i < length-8;i++){ |
201710861 | 0:851ebdb20ae7 | 466 | printf("%c",reciveData[i]); |
201710861 | 0:851ebdb20ae7 | 467 | } |
201710861 | 0:851ebdb20ae7 | 468 | printf("suc here\n"); |
201710861 | 0:851ebdb20ae7 | 469 | scanf("%d",&test); |
201710861 | 0:851ebdb20ae7 | 470 | }else{ |
201710861 | 0:851ebdb20ae7 | 471 | printf("fail\n"); |
201710861 | 0:851ebdb20ae7 | 472 | } |
201710861 | 0:851ebdb20ae7 | 473 | } |