Piezo Vibration Sensor demo

Dependencies:   PCA9622_LED8x8 mbed

Committer:
MACRUM
Date:
Sun Jul 26 15:46:51 2015 +0000
Revision:
0:2f98d8d6ef4b
Child:
1:bcf6ab734086
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MACRUM 0:2f98d8d6ef4b 1 /**
MACRUM 0:2f98d8d6ef4b 2 * MFT2015 demo : shake-shake-machine
MACRUM 0:2f98d8d6ef4b 3 *
MACRUM 0:2f98d8d6ef4b 4 * @author Toyomasa WATARAI
MACRUM 0:2f98d8d6ef4b 5 * @version 1.0
MACRUM 0:2f98d8d6ef4b 6 * @date 24-July-2015
MACRUM 0:2f98d8d6ef4b 7 *
MACRUM 0:2f98d8d6ef4b 8 *
MACRUM 0:2f98d8d6ef4b 9 */
MACRUM 0:2f98d8d6ef4b 10
MACRUM 0:2f98d8d6ef4b 11 #include "mbed.h"
MACRUM 0:2f98d8d6ef4b 12 #include "PCA9622_LED8x8.h"
MACRUM 0:2f98d8d6ef4b 13 #include "font3x5.h"
MACRUM 0:2f98d8d6ef4b 14 #include "tone_table.h"
MACRUM 0:2f98d8d6ef4b 15
MACRUM 0:2f98d8d6ef4b 16 PCA9622_LED8x8 matrix(D14, D15);
MACRUM 0:2f98d8d6ef4b 17 AnalogIn ain(A0);
MACRUM 0:2f98d8d6ef4b 18 PwmOut out(D4);
MACRUM 0:2f98d8d6ef4b 19 Serial pc(USBTX, USBRX);
MACRUM 0:2f98d8d6ef4b 20
MACRUM 0:2f98d8d6ef4b 21 #define DURATION_TIME (5 * 1000) // n * milisecond
MACRUM 0:2f98d8d6ef4b 22
MACRUM 0:2f98d8d6ef4b 23 void draw_number(int num);
MACRUM 0:2f98d8d6ef4b 24
MACRUM 0:2f98d8d6ef4b 25 void draw_number(int num)
MACRUM 0:2f98d8d6ef4b 26 {
MACRUM 0:2f98d8d6ef4b 27 float image[8][8];
MACRUM 0:2f98d8d6ef4b 28 num %= 100;
MACRUM 0:2f98d8d6ef4b 29
MACRUM 0:2f98d8d6ef4b 30 for (int x=0; x<8; x++)
MACRUM 0:2f98d8d6ef4b 31 for (int y=0; y<8; y++)
MACRUM 0:2f98d8d6ef4b 32 image[x][y] = 0.0f;
MACRUM 0:2f98d8d6ef4b 33
MACRUM 0:2f98d8d6ef4b 34 for (int i=0; i<5; i++) {
MACRUM 0:2f98d8d6ef4b 35 for (int j=0; j<3; j++) {
MACRUM 0:2f98d8d6ef4b 36 if (((font3x5[((num/10)*3) + j]) & (1<<(4-i))) != 0) {
MACRUM 0:2f98d8d6ef4b 37 image[i+1][j+1] = (float)0.5f;
MACRUM 0:2f98d8d6ef4b 38 } else {
MACRUM 0:2f98d8d6ef4b 39 image[i+1][j+1] = (float)0.0f;
MACRUM 0:2f98d8d6ef4b 40 }
MACRUM 0:2f98d8d6ef4b 41 }
MACRUM 0:2f98d8d6ef4b 42 }
MACRUM 0:2f98d8d6ef4b 43
MACRUM 0:2f98d8d6ef4b 44 for (int i=0; i<5; i++) {
MACRUM 0:2f98d8d6ef4b 45 for (int j=0; j<3; j++) {
MACRUM 0:2f98d8d6ef4b 46 if (((font3x5[((num%10)*3) + j]) & (1<<(4-i))) != 0) {
MACRUM 0:2f98d8d6ef4b 47 image[i+1][j+5] = (float)0.5f;
MACRUM 0:2f98d8d6ef4b 48 } else {
MACRUM 0:2f98d8d6ef4b 49 image[i+1][j+5] = (float)0.0f;
MACRUM 0:2f98d8d6ef4b 50 }
MACRUM 0:2f98d8d6ef4b 51 }
MACRUM 0:2f98d8d6ef4b 52 }
MACRUM 0:2f98d8d6ef4b 53
MACRUM 0:2f98d8d6ef4b 54 matrix.set_data( image );
MACRUM 0:2f98d8d6ef4b 55 }
MACRUM 0:2f98d8d6ef4b 56
MACRUM 0:2f98d8d6ef4b 57
MACRUM 0:2f98d8d6ef4b 58 void count_down(int cnt)
MACRUM 0:2f98d8d6ef4b 59 {
MACRUM 0:2f98d8d6ef4b 60 for(int i=cnt; i>0; i--) {
MACRUM 0:2f98d8d6ef4b 61 draw_number(i);
MACRUM 0:2f98d8d6ef4b 62 out.period_us(tone_table_us[1]);
MACRUM 0:2f98d8d6ef4b 63 out.write(0.5f);
MACRUM 0:2f98d8d6ef4b 64 wait(0.5);
MACRUM 0:2f98d8d6ef4b 65 out.period(0);
MACRUM 0:2f98d8d6ef4b 66 wait(0.5);
MACRUM 0:2f98d8d6ef4b 67 }
MACRUM 0:2f98d8d6ef4b 68 draw_number(0);
MACRUM 0:2f98d8d6ef4b 69 out.period_us(tone_table_us[13]);
MACRUM 0:2f98d8d6ef4b 70 out.write(0.5f);
MACRUM 0:2f98d8d6ef4b 71 }
MACRUM 0:2f98d8d6ef4b 72
MACRUM 0:2f98d8d6ef4b 73 int main()
MACRUM 0:2f98d8d6ef4b 74 {
MACRUM 0:2f98d8d6ef4b 75 int count = 0;
MACRUM 0:2f98d8d6ef4b 76 float f = 0;
MACRUM 0:2f98d8d6ef4b 77 float vv;
MACRUM 0:2f98d8d6ef4b 78 Timer timer;
MACRUM 0:2f98d8d6ef4b 79
MACRUM 0:2f98d8d6ef4b 80 timer.reset();
MACRUM 0:2f98d8d6ef4b 81 matrix.start();
MACRUM 0:2f98d8d6ef4b 82
MACRUM 0:2f98d8d6ef4b 83 count_down(3);
MACRUM 0:2f98d8d6ef4b 84
MACRUM 0:2f98d8d6ef4b 85 timer.start();
MACRUM 0:2f98d8d6ef4b 86 while(1) {
MACRUM 0:2f98d8d6ef4b 87 if ( timer.read_ms() > 1000) {
MACRUM 0:2f98d8d6ef4b 88 out.period(0);
MACRUM 0:2f98d8d6ef4b 89 }
MACRUM 0:2f98d8d6ef4b 90 vv = ain.read();
MACRUM 0:2f98d8d6ef4b 91
MACRUM 0:2f98d8d6ef4b 92 if ( abs(f - vv) >= 0.015f) {
MACRUM 0:2f98d8d6ef4b 93 count++;
MACRUM 0:2f98d8d6ef4b 94 pc.printf("*");
MACRUM 0:2f98d8d6ef4b 95 draw_number(count);
MACRUM 0:2f98d8d6ef4b 96 }
MACRUM 0:2f98d8d6ef4b 97 f = vv;
MACRUM 0:2f98d8d6ef4b 98 wait(0.1);
MACRUM 0:2f98d8d6ef4b 99 if ( timer.read_ms() > DURATION_TIME) {
MACRUM 0:2f98d8d6ef4b 100 pc.printf("count = %d\n", count);
MACRUM 0:2f98d8d6ef4b 101 draw_number(count);
MACRUM 0:2f98d8d6ef4b 102 break;
MACRUM 0:2f98d8d6ef4b 103 }
MACRUM 0:2f98d8d6ef4b 104 }
MACRUM 0:2f98d8d6ef4b 105
MACRUM 0:2f98d8d6ef4b 106 out.period_us(tone_table_us[13]);
MACRUM 0:2f98d8d6ef4b 107 out.write(0.5f);
MACRUM 0:2f98d8d6ef4b 108 wait(1);
MACRUM 0:2f98d8d6ef4b 109 out.period(0);
MACRUM 0:2f98d8d6ef4b 110
MACRUM 0:2f98d8d6ef4b 111 while(1) {
MACRUM 0:2f98d8d6ef4b 112 draw_number(count);
MACRUM 0:2f98d8d6ef4b 113 wait(1);
MACRUM 0:2f98d8d6ef4b 114
MACRUM 0:2f98d8d6ef4b 115 }
MACRUM 0:2f98d8d6ef4b 116 }