Piezo Vibration Sensor demo

Dependencies:   PCA9622_LED8x8 mbed

main.cpp

Committer:
MACRUM
Date:
2015-07-26
Revision:
0:2f98d8d6ef4b
Child:
1:bcf6ab734086

File content as of revision 0:2f98d8d6ef4b:

/**
 *  MFT2015 demo : shake-shake-machine 
 *
 *  @author  Toyomasa WATARAI
 *  @version 1.0
 *  @date    24-July-2015
 *
 *
 */

#include "mbed.h"
#include "PCA9622_LED8x8.h"
#include "font3x5.h"
#include "tone_table.h"

PCA9622_LED8x8  matrix(D14, D15);
AnalogIn ain(A0);
PwmOut out(D4);
Serial pc(USBTX, USBRX);

#define DURATION_TIME (5 * 1000) // n * milisecond

void draw_number(int num);

void draw_number(int num)
{
    float   image[8][8];
    num %= 100;

    for (int x=0; x<8; x++)
        for (int y=0; y<8; y++)
            image[x][y] = 0.0f;

    for (int i=0; i<5; i++) {
        for (int j=0; j<3; j++) {
            if (((font3x5[((num/10)*3) + j]) & (1<<(4-i))) != 0) {
                image[i+1][j+1] = (float)0.5f;
            } else {
                image[i+1][j+1] = (float)0.0f;
            }
        }
    }

    for (int i=0; i<5; i++) {
        for (int j=0; j<3; j++) {
            if (((font3x5[((num%10)*3) + j]) & (1<<(4-i))) != 0) {
                image[i+1][j+5] = (float)0.5f;
            } else {
                image[i+1][j+5] = (float)0.0f;
            }
        }
    }

    matrix.set_data( image );
}


void count_down(int cnt)
{
    for(int i=cnt; i>0; i--) {
        draw_number(i);
        out.period_us(tone_table_us[1]);
        out.write(0.5f);
        wait(0.5);
        out.period(0);
        wait(0.5);
    }
    draw_number(0);
    out.period_us(tone_table_us[13]);
    out.write(0.5f);
}

int main()
{
    int count = 0;
    float f = 0;
    float vv;
    Timer timer;

    timer.reset();
    matrix.start();

    count_down(3);

    timer.start();
    while(1) {
        if ( timer.read_ms() > 1000) {
            out.period(0);
        }
        vv = ain.read();

        if ( abs(f - vv) >= 0.015f) {
            count++;
            pc.printf("*");
            draw_number(count);
        }
        f = vv;
        wait(0.1);
        if ( timer.read_ms() > DURATION_TIME) {
            pc.printf("count = %d\n", count);
            draw_number(count);
            break;
        }
    }

    out.period_us(tone_table_us[13]);
    out.write(0.5f);
    wait(1);
    out.period(0);
    
    while(1) {
        draw_number(count);
        wait(1);
        
    }
}