Two mini game with accelerometer 13M15330 Sangwon Yoo 13M38502 Hanyoung Kim
Dependencies: MMA7660 mbed-rtos mbed
Revision 0:68699c694bbf, committed 2014-02-14
- Comitter:
- archmagic
- Date:
- Fri Feb 14 01:26:40 2014 +0000
- Commit message:
- AOS
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MMA7660.lib Fri Feb 14 01:26:40 2014 +0000 @@ -0,0 +1,1 @@ +https://mbed.org/users/Sissors/code/MMA7660/#a8e20db7901e
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Feb 14 01:26:40 2014 +0000 @@ -0,0 +1,299 @@ +#include "mbed.h" +#include "MMA7660.h" +#include "rtos.h" + + +#define DIM 3 +#define N 8 +#define NLEDS 4 + +MMA7660 accel(p28, p27); +DigitalOut led[] = { LED1, LED2, LED3, LED4 }; + +DigitalIn button(p14); +DigitalIn button2(p14); +bool buttonValue = false; + +MMA7660 acc(p28, p27); +Serial pc(USBTX, USBRX); +PwmOut speaker(p26); +PinName led_pin[] = { LED1, LED2, LED3, LED4 }; +int led_period[] = { 5000, 10000, 15000, 20000 }; +int gps_x=0,gps_y=0; +int timer_end=0; + +float r[DIM], s[DIM], nv[DIM][N]; + + +void initialize_led(void const *led){ + *(DigitalOut *)led=1; +} +void initialize_led0(void const *led){ + *(DigitalOut *)led=0; +} + +void beamSound(void const *arg) { + + for (float f = 2000; f > 100; f -= 50) { + speaker.period(1.0 / f); + speaker = 0.5; + } + Thread::wait(50); + speaker = 0.0; +} + +void errorSound(void const *arg) { + + for (float f = 2000; f > 100; f -= 50) { + speaker.period(1.0 / f); + speaker = 0.7; + } + Thread::wait(500); + speaker = 0.0; +} + +void endSound(void const *arg) { + for (float f = 2000; f > 100; f -= 50) { + speaker.period(1.0 / f); + speaker = 0.5; + wait(0.01); + } + speaker = 0.0; +} + +void led_off(void const *led) { + *(DigitalOut *)led = 0; +} + +void led_job(void const *arg){ + for (int i = 0; i < NLEDS; i++) { + DigitalOut *led = new DigitalOut(led_pin[i]); + initialize_led(led); + } + + for (int i = 0; i < NLEDS; i++) { + DigitalOut *led = new DigitalOut(led_pin[i]); + RtosTimer *timer = + new RtosTimer(led_off, osTimerPeriodic, led); + timer->start(led_period[i]); + } + while(true); + +} +void led_job_3(void const *arg){ + for (int i = 0; i < NLEDS; i++) { + DigitalOut *led = new DigitalOut(led_pin[i]); + initialize_led0(led); + } + while(true); + +} +void sound_job(void const *arg){ + //Thread::wait(5000); + //beamSound((void *)1); + + while(true); + +} +void end_job(void const *arg){ + Thread::wait(21000); + + timer_end=1; + while(true) wait(1000); + +} + + +int main() { + int loop_count=0; + int game=0; + int rec_s=0; + + bool b0 = false, b1 = false; + bool b2 = false, b3 = false; + + int old_pos = 0; + accel.setActive(true); + accel.setSampleRate(16); + while(true) { + float y = accel.y(); + int pos = y < 0 ? 2 : 0; + if (pos != old_pos) { + led[old_pos] = 0; + led[old_pos+1] = 0; + led[pos] = 1; + led[pos+1] = 1; + old_pos = pos; + } + b0 = b1; + b1 = button; + if (!b0 && b1) { + game=pos+1; + break; + } + } + + if(game==1){ + Thread led_j(led_job); + Thread sound_j(sound_job); + //sound_job((void *)0); + Thread end_j(end_job); + + //end_job((void *)0); + pc.baud(38600); + int k = 0; + int x=0,y=0; + int rex=0, rey=0; + int point_count=0; + float v=0; + srand(1); + gps_x=rand()%226+15; + gps_y=rand()%226+15; + + while (timer_end==0) { + unsigned char sum = 0; + acc.readData(r); + pc.putc(0); + for (int i = 0; i < DIM; i++) { + s[i] -= nv[i][k]; + s[i] += r[i]; + nv[i][k] = r[i]; + v = s[i] / N; + unsigned char d = (char)((v+1) * 64); + + if(i==0){ + x=(x+(d-64)/2); + rex=(unsigned int)x%256; + pc.putc(rex); + //dx=(d-64)/10; + //dx=d; + } + if(i==1){ + y=(y+(d-64)/2); + rey=(unsigned int)y%256; + pc.putc(rey); + //dy=y; + } + if(i==2){ + pc.putc(10); + } + } + sum=x+y+10; + pc.putc(sum); + + if((gps_x)<rex&&rex<(gps_x+20)){ + if((gps_y-15)<rey&&rey<(gps_y+5)){ + gps_x=rand()%226+15; + gps_y=rand()%226+15; + + point_count++; + beamSound((void *)1); + } + } + + pc.putc(gps_x); + pc.putc(gps_y); + pc.putc(point_count); + rec_s=1; + pc.putc(rec_s); + + k = (k + 1) % N; + wait(0.05); + } + } + if(game==3){ + Thread led_j(led_job_3); + Thread sound_j(sound_job); + //sound_job((void *)0); + //Thread end_j(end_job); + + pc.baud(38600); + int k = 0; + int x=0,y=0; + int rex=0, rey=0; + int point_count=0; + float v=0; + srand(7); + gps_x=rand()%226+15; + gps_y=rand()%226+15; + + while (timer_end==0) { + unsigned char sum = 0; + acc.readData(r); + pc.putc(0); + for (int i = 0; i < DIM; i++) { + s[i] -= nv[i][k]; + s[i] += r[i]; + nv[i][k] = r[i]; + v = s[i] / N; + unsigned char d = (char)((v+1) * 64); + + if(i==0){ + x=(x+(d-64)/2); + rex=(unsigned int)x%256; + pc.putc(rex); + //dx=(d-64)/10; + //dx=d; + } + if(i==1){ + y=(y+(d-64)/2); + rey=(unsigned int)y%256; + pc.putc(rey); + //dy=y; + } + if(i==2){ + pc.putc(10); + } + } + sum=x+y+10; + pc.putc(sum); + + if((gps_x-rex)*(gps_x-rex)+(gps_y-rey)*(gps_y-rey)<4900){ + led[3]=1; + } + else led[3]=0; + if((gps_x-rex)*(gps_x-rex)+(gps_y-rey)*(gps_y-rey)<2500){ + led[2]=1; + } + else led[2]=0; + if((gps_x-rex)*(gps_x-rex)+(gps_y-rey)*(gps_y-rey)<900){ + led[1]=1; + } + else led[1]=0; + if((gps_x-rex)*(gps_x-rex)+(gps_y-rey)*(gps_y-rey)<400){ + led[0]=1; + } + else led[0]=0; + + if(button2) buttonValue = true; + else buttonValue = false; + + b3 = buttonValue; + + if (!b2 && b3) { + if(loop_count!=0){ + if((gps_x-rex)*(gps_x-rex)+(gps_y-rey)*(gps_y-rey)<400){ + timer_end=1; + } + //else{ + //beamSound((void *)1); + //} + } + } + loop_count=1; + + pc.putc(gps_x); + pc.putc(gps_y); + pc.putc(point_count); + rec_s=3; + pc.putc(rec_s); + + + k = (k + 1) % N; + wait(0.05); + } + } + endSound((void *)1); + endSound((void *)1); + endSound((void *)1); +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-rtos.lib Fri Feb 14 01:26:40 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed-rtos/#f88660a9bed1
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Fri Feb 14 01:26:40 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/a9913a65894f \ No newline at end of file