OSHW for SFM

Dependencies:   BufferedSoftSerial WS2812 beep mbed-rtos mbed

Committer:
hyeonchanglee
Date:
Tue Feb 07 23:34:01 2017 +0000
Revision:
0:f41c164416f0
test version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hyeonchanglee 0:f41c164416f0 1 #include "mbed.h"
hyeonchanglee 0:f41c164416f0 2 #include "rtos.h"
hyeonchanglee 0:f41c164416f0 3 #include "stdio.h"
hyeonchanglee 0:f41c164416f0 4 #include "stdlib.h"
hyeonchanglee 0:f41c164416f0 5 #include "beep.h"
hyeonchanglee 0:f41c164416f0 6 #include "WS2812.h"
hyeonchanglee 0:f41c164416f0 7 #include "BufferedSoftSerial.h"
hyeonchanglee 0:f41c164416f0 8 #include "pitches.h"
hyeonchanglee 0:f41c164416f0 9
hyeonchanglee 0:f41c164416f0 10 //PwmOut out(D9); //piezo buzzer
hyeonchanglee 0:f41c164416f0 11 DigitalIn btn_enroll(D6);
hyeonchanglee 0:f41c164416f0 12 DigitalIn btn_identify(D7);
hyeonchanglee 0:f41c164416f0 13 DigitalIn btn_delete(D8);
hyeonchanglee 0:f41c164416f0 14
hyeonchanglee 0:f41c164416f0 15 Serial pc(USBTX, USBRX); //debug port
hyeonchanglee 0:f41c164416f0 16 BufferedSoftSerial device(D2, D3);
hyeonchanglee 0:f41c164416f0 17 Beep beep(D9);
hyeonchanglee 0:f41c164416f0 18
hyeonchanglee 0:f41c164416f0 19 float melody[] = { NOTE_C7, NOTE_E7, NOTE_G7, NOTE_C8, NOTE_C8, NOTE_C8 };
hyeonchanglee 0:f41c164416f0 20 float noteDuration[] = { 8.0, 8.0, 8.0, 4.0, 4.0, 8.0 };
hyeonchanglee 0:f41c164416f0 21
hyeonchanglee 0:f41c164416f0 22
hyeonchanglee 0:f41c164416f0 23 void melodyStart();
hyeonchanglee 0:f41c164416f0 24 void melodySuccess();
hyeonchanglee 0:f41c164416f0 25 void melodyFail();
hyeonchanglee 0:f41c164416f0 26 WS2812 ws(D11, 1, 7,15,10,15);
hyeonchanglee 0:f41c164416f0 27 int colorbuf[4] = { 0x00000033, 0x0000FFFF, 0x0000FF00, 0x00001199}; //blue, orange, green, red
hyeonchanglee 0:f41c164416f0 28
hyeonchanglee 0:f41c164416f0 29 int main()
hyeonchanglee 0:f41c164416f0 30 {
hyeonchanglee 0:f41c164416f0 31
hyeonchanglee 0:f41c164416f0 32 melodyStart();
hyeonchanglee 0:f41c164416f0 33
hyeonchanglee 0:f41c164416f0 34 //pc.baud(115200);
hyeonchanglee 0:f41c164416f0 35 device.baud(19200);
hyeonchanglee 0:f41c164416f0 36 unsigned char IS[] = { 0x40, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x0A}; // Identify by Scan
hyeonchanglee 0:f41c164416f0 37 unsigned char ES[] = { 0x40, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0xBE, 0x0A}; // Enroll by Scan
hyeonchanglee 0:f41c164416f0 38 unsigned char DA[] = { 0x40, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x0A}; // Delete all
hyeonchanglee 0:f41c164416f0 39
hyeonchanglee 0:f41c164416f0 40
hyeonchanglee 0:f41c164416f0 41 ws.useII(WS2812::GLOBAL);
hyeonchanglee 0:f41c164416f0 42 ws.setII(0xAA);
hyeonchanglee 0:f41c164416f0 43
hyeonchanglee 0:f41c164416f0 44 melodyStart();
hyeonchanglee 0:f41c164416f0 45
hyeonchanglee 0:f41c164416f0 46 while(1) {
hyeonchanglee 0:f41c164416f0 47 pc.printf("%d %d %d\n\r", btn_enroll, btn_identify, btn_delete);
hyeonchanglee 0:f41c164416f0 48 if(btn_enroll) {
hyeonchanglee 0:f41c164416f0 49 //ws.write(&colorbuf[3]);
hyeonchanglee 0:f41c164416f0 50 device.write((unsigned char*)ES, sizeof(ES));
hyeonchanglee 0:f41c164416f0 51
hyeonchanglee 0:f41c164416f0 52 for(int i=0; i<2; i++) {
hyeonchanglee 0:f41c164416f0 53 ws.write(&colorbuf[0]);
hyeonchanglee 0:f41c164416f0 54 wait(0.2);
hyeonchanglee 0:f41c164416f0 55
hyeonchanglee 0:f41c164416f0 56 while(1) {
hyeonchanglee 0:f41c164416f0 57 if(device.readable() > 0)
hyeonchanglee 0:f41c164416f0 58 break;
hyeonchanglee 0:f41c164416f0 59 }
hyeonchanglee 0:f41c164416f0 60
hyeonchanglee 0:f41c164416f0 61
hyeonchanglee 0:f41c164416f0 62 unsigned char rxBuffer[256]= {0};
hyeonchanglee 0:f41c164416f0 63 int count = 0;
hyeonchanglee 0:f41c164416f0 64
hyeonchanglee 0:f41c164416f0 65 wait(0.2);
hyeonchanglee 0:f41c164416f0 66
hyeonchanglee 0:f41c164416f0 67 while(device.readable()>0) {
hyeonchanglee 0:f41c164416f0 68 rxBuffer[count] = (unsigned char)device.getc();
hyeonchanglee 0:f41c164416f0 69 count++;
hyeonchanglee 0:f41c164416f0 70 }
hyeonchanglee 0:f41c164416f0 71 pc.printf("recv : ");
hyeonchanglee 0:f41c164416f0 72 for(int i=0; i<13; i++)
hyeonchanglee 0:f41c164416f0 73 pc.printf("%d ", rxBuffer[i]);
hyeonchanglee 0:f41c164416f0 74 pc.printf(" count : %d \n\r", count);
hyeonchanglee 0:f41c164416f0 75
hyeonchanglee 0:f41c164416f0 76 if((unsigned char)rxBuffer[10] == 0x62) {
hyeonchanglee 0:f41c164416f0 77 while(1) {
hyeonchanglee 0:f41c164416f0 78 if(device.readable()>0)
hyeonchanglee 0:f41c164416f0 79 break;
hyeonchanglee 0:f41c164416f0 80 }
hyeonchanglee 0:f41c164416f0 81
hyeonchanglee 0:f41c164416f0 82 int count = 0;
hyeonchanglee 0:f41c164416f0 83
hyeonchanglee 0:f41c164416f0 84 wait(0.2);
hyeonchanglee 0:f41c164416f0 85
hyeonchanglee 0:f41c164416f0 86 while(device.readable()) {
hyeonchanglee 0:f41c164416f0 87 rxBuffer[count] = (unsigned char)device.getc();
hyeonchanglee 0:f41c164416f0 88 count++;
hyeonchanglee 0:f41c164416f0 89 }
hyeonchanglee 0:f41c164416f0 90
hyeonchanglee 0:f41c164416f0 91 unsigned int userID;
hyeonchanglee 0:f41c164416f0 92 userID = rxBuffer[5] << 24 | rxBuffer[4] << 16 | rxBuffer[3] << 8 | rxBuffer[2];
hyeonchanglee 0:f41c164416f0 93
hyeonchanglee 0:f41c164416f0 94 pc.printf("userID : %d\n\r", userID);
hyeonchanglee 0:f41c164416f0 95 if((unsigned char)rxBuffer[10] == 0x61) {
hyeonchanglee 0:f41c164416f0 96 melodySuccess();
hyeonchanglee 0:f41c164416f0 97 } else {
hyeonchanglee 0:f41c164416f0 98 melodyFail();
hyeonchanglee 0:f41c164416f0 99 break;
hyeonchanglee 0:f41c164416f0 100 }
hyeonchanglee 0:f41c164416f0 101 } else {
hyeonchanglee 0:f41c164416f0 102 melodyFail();
hyeonchanglee 0:f41c164416f0 103 break;
hyeonchanglee 0:f41c164416f0 104 }
hyeonchanglee 0:f41c164416f0 105 }
hyeonchanglee 0:f41c164416f0 106 }
hyeonchanglee 0:f41c164416f0 107 if(btn_identify) {
hyeonchanglee 0:f41c164416f0 108 //ws.write(&colorbuf[3]);
hyeonchanglee 0:f41c164416f0 109 device.write((unsigned char*)IS, sizeof(IS));
hyeonchanglee 0:f41c164416f0 110
hyeonchanglee 0:f41c164416f0 111
hyeonchanglee 0:f41c164416f0 112 wait(0.2);
hyeonchanglee 0:f41c164416f0 113
hyeonchanglee 0:f41c164416f0 114 while(1) {
hyeonchanglee 0:f41c164416f0 115 if(device.readable() > 0)
hyeonchanglee 0:f41c164416f0 116 break;
hyeonchanglee 0:f41c164416f0 117 }
hyeonchanglee 0:f41c164416f0 118
hyeonchanglee 0:f41c164416f0 119
hyeonchanglee 0:f41c164416f0 120 unsigned char rxBuffer[256]= {0};
hyeonchanglee 0:f41c164416f0 121 int count = 0;
hyeonchanglee 0:f41c164416f0 122
hyeonchanglee 0:f41c164416f0 123 wait(0.2);
hyeonchanglee 0:f41c164416f0 124
hyeonchanglee 0:f41c164416f0 125 while(device.readable()>0) {
hyeonchanglee 0:f41c164416f0 126 rxBuffer[count] = (unsigned char)device.getc();
hyeonchanglee 0:f41c164416f0 127 count++;
hyeonchanglee 0:f41c164416f0 128 }
hyeonchanglee 0:f41c164416f0 129 pc.printf("recv : ");
hyeonchanglee 0:f41c164416f0 130 for(int i=0; i<13; i++)
hyeonchanglee 0:f41c164416f0 131 pc.printf("%d ", rxBuffer[i]);
hyeonchanglee 0:f41c164416f0 132 pc.printf(" count : %d \n\r", count);
hyeonchanglee 0:f41c164416f0 133
hyeonchanglee 0:f41c164416f0 134 if((unsigned char)rxBuffer[10] == 0x62) {
hyeonchanglee 0:f41c164416f0 135 while(1) {
hyeonchanglee 0:f41c164416f0 136 if(device.readable()>0)
hyeonchanglee 0:f41c164416f0 137 break;
hyeonchanglee 0:f41c164416f0 138 }
hyeonchanglee 0:f41c164416f0 139
hyeonchanglee 0:f41c164416f0 140 int count = 0;
hyeonchanglee 0:f41c164416f0 141
hyeonchanglee 0:f41c164416f0 142 wait(0.2);
hyeonchanglee 0:f41c164416f0 143
hyeonchanglee 0:f41c164416f0 144 while(device.readable()) {
hyeonchanglee 0:f41c164416f0 145 rxBuffer[count] = (unsigned char)device.getc();
hyeonchanglee 0:f41c164416f0 146 count++;
hyeonchanglee 0:f41c164416f0 147 }
hyeonchanglee 0:f41c164416f0 148
hyeonchanglee 0:f41c164416f0 149 unsigned int userID;
hyeonchanglee 0:f41c164416f0 150 userID = rxBuffer[5] << 24 | rxBuffer[4] << 16 | rxBuffer[3] << 8 | rxBuffer[2];
hyeonchanglee 0:f41c164416f0 151
hyeonchanglee 0:f41c164416f0 152 pc.printf("userID : %d\n\r", userID);
hyeonchanglee 0:f41c164416f0 153 if((unsigned char)rxBuffer[10] == 0x61) {
hyeonchanglee 0:f41c164416f0 154 melodySuccess();
hyeonchanglee 0:f41c164416f0 155 } else {
hyeonchanglee 0:f41c164416f0 156 melodyFail();
hyeonchanglee 0:f41c164416f0 157
hyeonchanglee 0:f41c164416f0 158 }
hyeonchanglee 0:f41c164416f0 159 } else {
hyeonchanglee 0:f41c164416f0 160 melodyFail();
hyeonchanglee 0:f41c164416f0 161
hyeonchanglee 0:f41c164416f0 162 }
hyeonchanglee 0:f41c164416f0 163
hyeonchanglee 0:f41c164416f0 164 }
hyeonchanglee 0:f41c164416f0 165 if(btn_delete) {
hyeonchanglee 0:f41c164416f0 166 //ws.write(&colorbuf[3]);
hyeonchanglee 0:f41c164416f0 167 device.write((unsigned char*)DA, sizeof(DA));
hyeonchanglee 0:f41c164416f0 168
hyeonchanglee 0:f41c164416f0 169
hyeonchanglee 0:f41c164416f0 170 wait(0.2);
hyeonchanglee 0:f41c164416f0 171
hyeonchanglee 0:f41c164416f0 172 while(1) {
hyeonchanglee 0:f41c164416f0 173 if(device.readable() > 0)
hyeonchanglee 0:f41c164416f0 174 break;
hyeonchanglee 0:f41c164416f0 175 }
hyeonchanglee 0:f41c164416f0 176
hyeonchanglee 0:f41c164416f0 177
hyeonchanglee 0:f41c164416f0 178 unsigned char rxBuffer[256]= {0};
hyeonchanglee 0:f41c164416f0 179 int count = 0;
hyeonchanglee 0:f41c164416f0 180
hyeonchanglee 0:f41c164416f0 181 wait(0.2);
hyeonchanglee 0:f41c164416f0 182
hyeonchanglee 0:f41c164416f0 183 while(device.readable()>0) {
hyeonchanglee 0:f41c164416f0 184 rxBuffer[count] = (unsigned char)device.getc();
hyeonchanglee 0:f41c164416f0 185 count++;
hyeonchanglee 0:f41c164416f0 186 }
hyeonchanglee 0:f41c164416f0 187 pc.printf("recv : ");
hyeonchanglee 0:f41c164416f0 188 for(int i=0; i<13; i++)
hyeonchanglee 0:f41c164416f0 189 pc.printf("%d ", rxBuffer[i]);
hyeonchanglee 0:f41c164416f0 190 pc.printf(" count : %d \n\r", count);
hyeonchanglee 0:f41c164416f0 191
hyeonchanglee 0:f41c164416f0 192 if((unsigned char)rxBuffer[10] == 0x61) {
hyeonchanglee 0:f41c164416f0 193 melodySuccess();
hyeonchanglee 0:f41c164416f0 194 } else {
hyeonchanglee 0:f41c164416f0 195 melodyFail();
hyeonchanglee 0:f41c164416f0 196
hyeonchanglee 0:f41c164416f0 197 }
hyeonchanglee 0:f41c164416f0 198 }
hyeonchanglee 0:f41c164416f0 199
hyeonchanglee 0:f41c164416f0 200
hyeonchanglee 0:f41c164416f0 201
hyeonchanglee 0:f41c164416f0 202
hyeonchanglee 0:f41c164416f0 203 /*
hyeonchanglee 0:f41c164416f0 204 WS2812 ws(D11, 1, 7,15,10,15);
hyeonchanglee 0:f41c164416f0 205 beep.beep(4186.0, 1.0);
hyeonchanglee 0:f41c164416f0 206 wait(1.0);
hyeonchanglee 0:f41c164416f0 207 ws.write(&colorbuf[0]);
hyeonchanglee 0:f41c164416f0 208 wait(0.5);
hyeonchanglee 0:f41c164416f0 209 ws.write(&colorbuf[1]);
hyeonchanglee 0:f41c164416f0 210 wait(0.5);
hyeonchanglee 0:f41c164416f0 211 ws.write(&colorbuf[2]);
hyeonchanglee 0:f41c164416f0 212 wait(0.5);
hyeonchanglee 0:f41c164416f0 213 ws.write(&colorbuf[3]);
hyeonchanglee 0:f41c164416f0 214 wait(0.5);
hyeonchanglee 0:f41c164416f0 215 ws.write(&colorbuf[4]);
hyeonchanglee 0:f41c164416f0 216 wait(0.5);
hyeonchanglee 0:f41c164416f0 217 ws.write(&colorbuf[5]);
hyeonchanglee 0:f41c164416f0 218 wait(0.5);
hyeonchanglee 0:f41c164416f0 219 // if(sfm.writeable())
hyeonchanglee 0:f41c164416f0 220
hyeonchanglee 0:f41c164416f0 221
hyeonchanglee 0:f41c164416f0 222 device.write((unsigned char*)buff, 13);
hyeonchanglee 0:f41c164416f0 223
hyeonchanglee 0:f41c164416f0 224 wait(5);
hyeonchanglee 0:f41c164416f0 225 */
hyeonchanglee 0:f41c164416f0 226 //ws.write(&colorbuf[0]);
hyeonchanglee 0:f41c164416f0 227 //wait(0.1);
hyeonchanglee 0:f41c164416f0 228 }
hyeonchanglee 0:f41c164416f0 229
hyeonchanglee 0:f41c164416f0 230 }
hyeonchanglee 0:f41c164416f0 231
hyeonchanglee 0:f41c164416f0 232 void melodyStart()
hyeonchanglee 0:f41c164416f0 233 {
hyeonchanglee 0:f41c164416f0 234 beep.beep(melody[0], 1.0 / (float)noteDuration[0]);
hyeonchanglee 0:f41c164416f0 235 wait((1.0/(float)noteDuration[0])*1.30);
hyeonchanglee 0:f41c164416f0 236 beep.nobeep();
hyeonchanglee 0:f41c164416f0 237
hyeonchanglee 0:f41c164416f0 238 beep.beep(melody[1], 1.0 / (float)noteDuration[1]);
hyeonchanglee 0:f41c164416f0 239 wait((1.0/(float)noteDuration[0])*1.30);
hyeonchanglee 0:f41c164416f0 240 beep.nobeep();
hyeonchanglee 0:f41c164416f0 241
hyeonchanglee 0:f41c164416f0 242 beep.beep(melody[2], 1.0 / (float)noteDuration[2]);
hyeonchanglee 0:f41c164416f0 243 wait((1.0/(float)noteDuration[0])*1.30);
hyeonchanglee 0:f41c164416f0 244 beep.nobeep();
hyeonchanglee 0:f41c164416f0 245
hyeonchanglee 0:f41c164416f0 246 beep.beep(melody[3], 1.0 / (float)noteDuration[3]);
hyeonchanglee 0:f41c164416f0 247 wait((1.0/(float)noteDuration[0])*1.30);
hyeonchanglee 0:f41c164416f0 248 beep.nobeep();
hyeonchanglee 0:f41c164416f0 249 }
hyeonchanglee 0:f41c164416f0 250
hyeonchanglee 0:f41c164416f0 251 void melodySuccess()
hyeonchanglee 0:f41c164416f0 252 {
hyeonchanglee 0:f41c164416f0 253 ws.write(&colorbuf[2]);
hyeonchanglee 0:f41c164416f0 254
hyeonchanglee 0:f41c164416f0 255 beep.beep(melody[0], 1.0 / noteDuration[0]);
hyeonchanglee 0:f41c164416f0 256 wait((1.0/noteDuration[0])*1.30);
hyeonchanglee 0:f41c164416f0 257 beep.nobeep();
hyeonchanglee 0:f41c164416f0 258
hyeonchanglee 0:f41c164416f0 259 beep.beep(melody[1], 1.0 / noteDuration[1]);
hyeonchanglee 0:f41c164416f0 260 wait((1.0/noteDuration[0])*1.30);
hyeonchanglee 0:f41c164416f0 261 beep.nobeep();
hyeonchanglee 0:f41c164416f0 262
hyeonchanglee 0:f41c164416f0 263 beep.beep(melody[2], 1.0 / noteDuration[2]);
hyeonchanglee 0:f41c164416f0 264 wait((1.0/noteDuration[0])*1.30);
hyeonchanglee 0:f41c164416f0 265 beep.nobeep();
hyeonchanglee 0:f41c164416f0 266 ws.write(&colorbuf[0]);
hyeonchanglee 0:f41c164416f0 267 }
hyeonchanglee 0:f41c164416f0 268 void melodyFail()
hyeonchanglee 0:f41c164416f0 269 {
hyeonchanglee 0:f41c164416f0 270 ws.write(&colorbuf[3]);
hyeonchanglee 0:f41c164416f0 271 beep.beep(melody[4], 1.0 / noteDuration[4]);
hyeonchanglee 0:f41c164416f0 272 wait((1.0/noteDuration[0])*1.30);
hyeonchanglee 0:f41c164416f0 273 beep.nobeep();
hyeonchanglee 0:f41c164416f0 274
hyeonchanglee 0:f41c164416f0 275 beep.beep(melody[5], 1.0 / noteDuration[5]);
hyeonchanglee 0:f41c164416f0 276 wait((1.0/noteDuration[0])*1.30);
hyeonchanglee 0:f41c164416f0 277 beep.nobeep();
hyeonchanglee 0:f41c164416f0 278 ws.write(&colorbuf[0]);
hyeonchanglee 0:f41c164416f0 279 }