Toyomasa Watarai / Mbed 2 deprecated shake-shake-machine

Dependencies:   PCA9622_LED8x8 mbed

Committer:
MACRUM
Date:
Sun Aug 02 12:38:40 2015 +0000
Revision:
1:bcf6ab734086
Parent:
0:2f98d8d6ef4b
Add score notification blinking

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MACRUM 0:2f98d8d6ef4b 1 /**
MACRUM 1:bcf6ab734086 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 1:bcf6ab734086 23 void draw_number(int num, int reverse=0);
MACRUM 0:2f98d8d6ef4b 24
MACRUM 1:bcf6ab734086 25 void draw_number(int num, int reverse)
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 1:bcf6ab734086 31 for (int y=0; y<8; y++) {
MACRUM 1:bcf6ab734086 32 if (reverse)
MACRUM 1:bcf6ab734086 33 image[x][y] = 0.5f;
MACRUM 1:bcf6ab734086 34 else
MACRUM 1:bcf6ab734086 35 image[x][y] = 0.0f;
MACRUM 1:bcf6ab734086 36 }
MACRUM 0:2f98d8d6ef4b 37
MACRUM 0:2f98d8d6ef4b 38 for (int i=0; i<5; i++) {
MACRUM 0:2f98d8d6ef4b 39 for (int j=0; j<3; j++) {
MACRUM 0:2f98d8d6ef4b 40 if (((font3x5[((num/10)*3) + j]) & (1<<(4-i))) != 0) {
MACRUM 1:bcf6ab734086 41 if (reverse)
MACRUM 1:bcf6ab734086 42 image[i+1][j+1] = (float)0.0f;
MACRUM 1:bcf6ab734086 43 else
MACRUM 1:bcf6ab734086 44 image[i+1][j+1] = (float)0.5f;
MACRUM 0:2f98d8d6ef4b 45 } else {
MACRUM 1:bcf6ab734086 46 if (reverse)
MACRUM 1:bcf6ab734086 47 image[i+1][j+1] = (float)0.5f;
MACRUM 1:bcf6ab734086 48 else
MACRUM 1:bcf6ab734086 49 image[i+1][j+1] = (float)0.0f;
MACRUM 0:2f98d8d6ef4b 50 }
MACRUM 0:2f98d8d6ef4b 51 }
MACRUM 0:2f98d8d6ef4b 52 }
MACRUM 0:2f98d8d6ef4b 53
MACRUM 0:2f98d8d6ef4b 54 for (int i=0; i<5; i++) {
MACRUM 0:2f98d8d6ef4b 55 for (int j=0; j<3; j++) {
MACRUM 0:2f98d8d6ef4b 56 if (((font3x5[((num%10)*3) + j]) & (1<<(4-i))) != 0) {
MACRUM 1:bcf6ab734086 57 if (reverse)
MACRUM 1:bcf6ab734086 58 image[i+1][j+5] = (float)0.0f;
MACRUM 1:bcf6ab734086 59 else
MACRUM 1:bcf6ab734086 60 image[i+1][j+5] = (float)0.5f;
MACRUM 0:2f98d8d6ef4b 61 } else {
MACRUM 1:bcf6ab734086 62 if (reverse)
MACRUM 1:bcf6ab734086 63 image[i+1][j+5] = (float)0.5f;
MACRUM 1:bcf6ab734086 64 else
MACRUM 1:bcf6ab734086 65 image[i+1][j+5] = (float)0.0f;
MACRUM 0:2f98d8d6ef4b 66 }
MACRUM 0:2f98d8d6ef4b 67 }
MACRUM 0:2f98d8d6ef4b 68 }
MACRUM 0:2f98d8d6ef4b 69
MACRUM 0:2f98d8d6ef4b 70 matrix.set_data( image );
MACRUM 0:2f98d8d6ef4b 71 }
MACRUM 0:2f98d8d6ef4b 72
MACRUM 0:2f98d8d6ef4b 73
MACRUM 0:2f98d8d6ef4b 74 void count_down(int cnt)
MACRUM 0:2f98d8d6ef4b 75 {
MACRUM 0:2f98d8d6ef4b 76 for(int i=cnt; i>0; i--) {
MACRUM 0:2f98d8d6ef4b 77 draw_number(i);
MACRUM 0:2f98d8d6ef4b 78 out.period_us(tone_table_us[1]);
MACRUM 0:2f98d8d6ef4b 79 out.write(0.5f);
MACRUM 0:2f98d8d6ef4b 80 wait(0.5);
MACRUM 0:2f98d8d6ef4b 81 out.period(0);
MACRUM 0:2f98d8d6ef4b 82 wait(0.5);
MACRUM 0:2f98d8d6ef4b 83 }
MACRUM 0:2f98d8d6ef4b 84 draw_number(0);
MACRUM 0:2f98d8d6ef4b 85 out.period_us(tone_table_us[13]);
MACRUM 0:2f98d8d6ef4b 86 out.write(0.5f);
MACRUM 0:2f98d8d6ef4b 87 }
MACRUM 0:2f98d8d6ef4b 88
MACRUM 0:2f98d8d6ef4b 89 int main()
MACRUM 0:2f98d8d6ef4b 90 {
MACRUM 0:2f98d8d6ef4b 91 int count = 0;
MACRUM 0:2f98d8d6ef4b 92 float f = 0;
MACRUM 0:2f98d8d6ef4b 93 float vv;
MACRUM 0:2f98d8d6ef4b 94 Timer timer;
MACRUM 0:2f98d8d6ef4b 95
MACRUM 0:2f98d8d6ef4b 96 timer.reset();
MACRUM 0:2f98d8d6ef4b 97 matrix.start();
MACRUM 0:2f98d8d6ef4b 98
MACRUM 0:2f98d8d6ef4b 99 count_down(3);
MACRUM 0:2f98d8d6ef4b 100
MACRUM 0:2f98d8d6ef4b 101 timer.start();
MACRUM 0:2f98d8d6ef4b 102 while(1) {
MACRUM 0:2f98d8d6ef4b 103 if ( timer.read_ms() > 1000) {
MACRUM 0:2f98d8d6ef4b 104 out.period(0);
MACRUM 0:2f98d8d6ef4b 105 }
MACRUM 0:2f98d8d6ef4b 106 vv = ain.read();
MACRUM 0:2f98d8d6ef4b 107
MACRUM 0:2f98d8d6ef4b 108 if ( abs(f - vv) >= 0.015f) {
MACRUM 0:2f98d8d6ef4b 109 count++;
MACRUM 0:2f98d8d6ef4b 110 pc.printf("*");
MACRUM 0:2f98d8d6ef4b 111 draw_number(count);
MACRUM 0:2f98d8d6ef4b 112 }
MACRUM 0:2f98d8d6ef4b 113 f = vv;
MACRUM 0:2f98d8d6ef4b 114 wait(0.1);
MACRUM 0:2f98d8d6ef4b 115 if ( timer.read_ms() > DURATION_TIME) {
MACRUM 0:2f98d8d6ef4b 116 pc.printf("count = %d\n", count);
MACRUM 0:2f98d8d6ef4b 117 draw_number(count);
MACRUM 0:2f98d8d6ef4b 118 break;
MACRUM 0:2f98d8d6ef4b 119 }
MACRUM 0:2f98d8d6ef4b 120 }
MACRUM 0:2f98d8d6ef4b 121
MACRUM 0:2f98d8d6ef4b 122 out.period_us(tone_table_us[13]);
MACRUM 0:2f98d8d6ef4b 123 out.write(0.5f);
MACRUM 0:2f98d8d6ef4b 124 wait(1);
MACRUM 0:2f98d8d6ef4b 125 out.period(0);
MACRUM 1:bcf6ab734086 126
MACRUM 0:2f98d8d6ef4b 127 while(1) {
MACRUM 1:bcf6ab734086 128 draw_number(count, 0);
MACRUM 0:2f98d8d6ef4b 129 wait(1);
MACRUM 1:bcf6ab734086 130 draw_number(count, 1);
MACRUM 1:bcf6ab734086 131 wait(1);
MACRUM 1:bcf6ab734086 132
MACRUM 0:2f98d8d6ef4b 133 }
MACRUM 0:2f98d8d6ef4b 134 }