OSHW for SFM

Dependencies:   BufferedSoftSerial WS2812 beep mbed-rtos mbed

main.cpp

Committer:
hyeonchanglee
Date:
2017-02-07
Revision:
0:f41c164416f0

File content as of revision 0:f41c164416f0:

#include "mbed.h"
#include "rtos.h"
#include "stdio.h"
#include "stdlib.h"
#include "beep.h"
#include "WS2812.h"
#include "BufferedSoftSerial.h"
#include "pitches.h"

//PwmOut out(D9); //piezo buzzer
DigitalIn btn_enroll(D6);
DigitalIn btn_identify(D7);
DigitalIn btn_delete(D8);

Serial pc(USBTX, USBRX); //debug port
BufferedSoftSerial device(D2, D3);
Beep beep(D9);

float melody[] = {  NOTE_C7, NOTE_E7, NOTE_G7, NOTE_C8, NOTE_C8, NOTE_C8 };
float noteDuration[] = { 8.0, 8.0, 8.0, 4.0, 4.0, 8.0 };


void melodyStart();
void melodySuccess();
void melodyFail();
WS2812 ws(D11, 1, 7,15,10,15);
int colorbuf[4] = { 0x00000033, 0x0000FFFF, 0x0000FF00, 0x00001199}; //blue, orange, green, red

int main()
{
    
    melodyStart();

    //pc.baud(115200);
    device.baud(19200);
    unsigned char IS[] = { 0x40, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x51, 0x0A}; // Identify by Scan
    unsigned char ES[] = { 0x40, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79, 0xBE, 0x0A}; // Enroll by Scan
    unsigned char DA[] = { 0x40, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x0A}; // Delete all

    
    ws.useII(WS2812::GLOBAL);
    ws.setII(0xAA);

    melodyStart();

    while(1) {
        pc.printf("%d %d %d\n\r", btn_enroll, btn_identify, btn_delete);
        if(btn_enroll) {
            //ws.write(&colorbuf[3]);
            device.write((unsigned char*)ES, sizeof(ES));

            for(int i=0; i<2; i++) {
                ws.write(&colorbuf[0]);
                wait(0.2);

                while(1) {
                    if(device.readable() > 0)
                        break;
                }


                unsigned char rxBuffer[256]= {0};
                int count = 0;

                wait(0.2);

                while(device.readable()>0) {
                    rxBuffer[count] = (unsigned char)device.getc();
                    count++;
                }
                pc.printf("recv : ");
                for(int i=0; i<13; i++)
                    pc.printf("%d ", rxBuffer[i]);
                pc.printf("   count : %d \n\r", count);

                if((unsigned char)rxBuffer[10] == 0x62) {
                    while(1) {
                        if(device.readable()>0)
                            break;
                    }

                    int count = 0;

                    wait(0.2);

                    while(device.readable()) {
                        rxBuffer[count] = (unsigned char)device.getc();
                        count++;
                    }

                    unsigned int userID;
                    userID = rxBuffer[5] << 24 | rxBuffer[4] << 16 | rxBuffer[3] << 8 | rxBuffer[2];

                    pc.printf("userID : %d\n\r", userID);
                    if((unsigned char)rxBuffer[10] == 0x61) {
                        melodySuccess();
                    } else {
                        melodyFail();
                        break;
                    }
                } else {
                    melodyFail();
                    break;
                }
            }
        }
        if(btn_identify) {
            //ws.write(&colorbuf[3]);
            device.write((unsigned char*)IS, sizeof(IS));


            wait(0.2);

            while(1) {
                if(device.readable() > 0)
                    break;
            }


            unsigned char rxBuffer[256]= {0};
            int count = 0;

            wait(0.2);

            while(device.readable()>0) {
                rxBuffer[count] = (unsigned char)device.getc();
                count++;
            }
            pc.printf("recv : ");
            for(int i=0; i<13; i++)
                pc.printf("%d ", rxBuffer[i]);
            pc.printf("   count : %d \n\r", count);

            if((unsigned char)rxBuffer[10] == 0x62) {
                while(1) {
                    if(device.readable()>0)
                        break;
                }

                int count = 0;

                wait(0.2);

                while(device.readable()) {
                    rxBuffer[count] = (unsigned char)device.getc();
                    count++;
                }

                unsigned int userID;
                userID = rxBuffer[5] << 24 | rxBuffer[4] << 16 | rxBuffer[3] << 8 | rxBuffer[2];

                pc.printf("userID : %d\n\r", userID);
                if((unsigned char)rxBuffer[10] == 0x61) {
                    melodySuccess();
                } else {
                    melodyFail();

                }
            } else {
                melodyFail();

            }

        }
        if(btn_delete) {
            //ws.write(&colorbuf[3]);
            device.write((unsigned char*)DA, sizeof(DA));


            wait(0.2);

            while(1) {
                if(device.readable() > 0)
                    break;
            }


            unsigned char rxBuffer[256]= {0};
            int count = 0;

            wait(0.2);

            while(device.readable()>0) {
                rxBuffer[count] = (unsigned char)device.getc();
                count++;
            }
            pc.printf("recv : ");
            for(int i=0; i<13; i++)
                pc.printf("%d ", rxBuffer[i]);
            pc.printf("   count : %d \n\r", count);

            if((unsigned char)rxBuffer[10] == 0x61) {
                melodySuccess();
            } else {
                melodyFail();

            }
        }




        /*
        WS2812 ws(D11, 1, 7,15,10,15);
        beep.beep(4186.0, 1.0);
        wait(1.0);
        ws.write(&colorbuf[0]);
        wait(0.5);
        ws.write(&colorbuf[1]);
        wait(0.5);
        ws.write(&colorbuf[2]);
        wait(0.5);
        ws.write(&colorbuf[3]);
        wait(0.5);
        ws.write(&colorbuf[4]);
        wait(0.5);
        ws.write(&colorbuf[5]);
        wait(0.5);
        // if(sfm.writeable())


        device.write((unsigned char*)buff, 13);

        wait(5);
        */
        //ws.write(&colorbuf[0]);
        //wait(0.1);
    }

}

void melodyStart()
{
    beep.beep(melody[0], 1.0 / (float)noteDuration[0]);
    wait((1.0/(float)noteDuration[0])*1.30);
    beep.nobeep();

    beep.beep(melody[1], 1.0 / (float)noteDuration[1]);
    wait((1.0/(float)noteDuration[0])*1.30);
    beep.nobeep();

    beep.beep(melody[2], 1.0 / (float)noteDuration[2]);
    wait((1.0/(float)noteDuration[0])*1.30);
    beep.nobeep();

    beep.beep(melody[3], 1.0 / (float)noteDuration[3]);
    wait((1.0/(float)noteDuration[0])*1.30);
    beep.nobeep();
}

void melodySuccess()
{
    ws.write(&colorbuf[2]);
    
    beep.beep(melody[0], 1.0 / noteDuration[0]);
    wait((1.0/noteDuration[0])*1.30);
    beep.nobeep();

    beep.beep(melody[1], 1.0 / noteDuration[1]);
    wait((1.0/noteDuration[0])*1.30);
    beep.nobeep();

    beep.beep(melody[2], 1.0 / noteDuration[2]);
    wait((1.0/noteDuration[0])*1.30);
    beep.nobeep();
    ws.write(&colorbuf[0]);
}
void melodyFail()
{
    ws.write(&colorbuf[3]);
    beep.beep(melody[4], 1.0 / noteDuration[4]);
    wait((1.0/noteDuration[0])*1.30);
    beep.nobeep();

    beep.beep(melody[5], 1.0 / noteDuration[5]);
    wait((1.0/noteDuration[0])*1.30);
    beep.nobeep();
    ws.write(&colorbuf[0]);
}