Multi-Function Clock
Dependencies: Clock DHT22 DigitDisplay mbed my8x8RGB
Diff: main.cpp
- Revision:
- 0:1ef228e02562
- Child:
- 1:f9ce8c057b73
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Dec 07 11:24:49 2015 +0000 @@ -0,0 +1,432 @@ +#include "mbed.h" +#include "Clock.h" +#include "DHT22.h" +#include "my8x8RGB.h" + +Ticker UpdateScreen,TCK_player; +Timeout w8; +Timer timer1; +InterruptIn BTN_Up(PA_14),BTN_Down(PA_15),BTN_Shoot(PA_13); + +class bullet +{ +public: + int y,x; + uint8_t enable; + void display() { + + if(enable==1) { + rgb_point(y,6-x,0,0,100); + } + } + void RST() { + rgb_point(y,7-x,0,0,0); + y=0; + x=0; + enable=0; + } + +}; + +class enemy +{ +public: + int y,x; + uint8_t level,enable; + int t_delay; + void display() { + if(enable==1) { + if(level==2 && x>=0)rgb_point(y,x,100,100,0); + if(level==1 && x>=0)rgb_point(y,x,100,0,0); + + } + } + + void RST() { + rgb_point(y,x,0,0,0); + y=0; + x=0; + enable=0; + level=0; + } + +}; + +/**************OEY******************/ +//define game variable +#define enemy_size1 10 +#define enemy_size2 15 +#define enemy_size3 20 +#define bullet_speed 50 +#define btn_delay 0.02 +uint8_t player_location=1; // in Colum +bullet mybullet[10]; +enemy wave1[enemy_size1]; +enemy wave2[enemy_size2]; +enemy wave3[enemy_size3]; +enemy wave4[enemy_size2]; +enemy wave5[enemy_size3]; +uint8_t currentbullet=0; +uint8_t gameLevel=1; +int t_ms_easy[4]= {800,1000,1200,1400}; +int t_ms_normal[4]= {500,600,700,800}; +int t_ms_hard[4]= {500,400,400,500}; +int CN[2]= {2,1}; +/*************FUNCTION*****************/ +void createWall(); +void createWall2(uint8_t r,uint8_t g,uint8_t b); +void gameOver(); + +void PMD(); +void PMU(); +void playerMoveDown(); +void playerMoveUp(); +void SHT(); +void shooting(); +void bulletUpdate(); + +void genarate_enemy(enemy stage[],int enemy_size,int t_ms[]); +void genarate_enemy_rand(enemy stage[],int enemy_size,int t_ms[]); +void newSetting(); +void enemyUpdate(enemy temp[],int enemy_size); +void TomaTosetting(); +void TomaToloop(); + +/**************MOO****************/ +Clock Clk(I2C_SDA,I2C_SCL); // I2C CLOCK DS1307 +DigitDisplay Dis(PC_8, PC_6); // Display 7segment TM1636 +InterruptIn K1(PC_10); // Inc Min (Alarm) +InterruptIn K2(PA_11); // Inc Hours (Alarm) +InterruptIn K3(PB_12); // Set Alarm +InterruptIn KS(PB_2); // Change mode +DigitalOut Beep(PC_5); // Buzzer +int M=0,H=0,N=0,I=0; // Cache Alarm +int SetH = 0 , SetM = 0; // Cache Alarm +int mode=3; // Init Mode = 0 (Default) +int flag = 0; // Init Flag for Alarm +int temperature; //Init for Memmory Temp +int Ft=0,St=0; // Cache Temp +DHT22 dht(PB_1); // OneWire for Temp get +/**************MOO****************/ + +int alarmset(int sH,int sM) // Function Set Alarm +{ + int I,J,K; + Clk.getAlarm(&I,&J,&K); + if(sH == K && sM == J ) + return 1; + else + return 0; +} + +void sent() // Set time +{ + wait(0.3); + SetM = (N*10) + M ; + SetH = (I*10) + H ; + //alarmset(SetH,int SetM) + printf("%d:%d",SetH,SetM); +} + +void minU(){ + M++; + wait(0.3); + if(M>9 && N<5){ + M = 0; + N++; + } + if(M>9 && N==5) + { + M = 0; + N = 0; + } +} + +void hoursU(){ + H++; + wait(0.3); + if(H>9 && I<2){ + H = 0; + I++; + } + if(H>3 && I==2) + { + H = 0; + I = 0; + } +} + +void modep(){ + wait(0.5); + screen_off(); + mode++; + if(mode == 4) + { mode = 0 ;} + wait(0.5); + +} + +int main(){ + KS.rise(&modep); + K1.rise(&minU); + K2.rise(&hoursU); + K3.rise(&sent); + TomaTosetting(); + while(1){ + while(mode == 0){ + + Clk.displays(); + wait(1); + flag = alarmset(SetH,SetM); + while(flag == 1){ + flag = alarmset(SetH,SetM); + Clk.displays(); + Beep = 1; + wait(0.2); + Beep = 0; + wait(0.2); + Beep = 1; + wait(0.2); + Beep = 0; + wait(0.5); + alarmset(SetH,SetM); + } + } + + while(mode == 1){ + Dis.write(3,M); + Dis.write(2,N); + Dis.write(1,H); + Dis.write(0,I); + } + while(mode == 2){ + dht.sample(); + wait(0.5); + temperature = dht.getTemperature(); + temperature = temperature/10; + Dis.clear(); + Ft = temperature/10; + St = temperature%10; + Dis.write(3,12); + Dis.write(2,St); + Dis.write(1,Ft); + + //printf("%d \n",temperature); + } + + while(mode == 3){ + TomaToloop();} + } +} + +/************OEY FUNCTION*****************/ +void createWall() +{ + for(int i=0; i<8; i++) { + rgb_point(0,i,50,50,50); + rgb_point(7,i,50,50,50); + } + +} + +void createWall2(uint8_t r,uint8_t g,uint8_t b) +{ + for(int i=0; i<8; i++) { + rgb_point(0,i,r,g,b); + rgb_point(7,i,r,g,b); + } + +} + +void PMD() +{ + rgb_point(player_location,7,0,0,0); + player_location++; + if(player_location>=7) { + player_location=6; + } + rgb_point(player_location,7,0,50,0); +} +void playerMoveDown() +{ + + w8.attach(&PMD,btn_delay); +} + +void PMU() +{ + rgb_point(player_location,7,0,0,0); + player_location--; + if(player_location<=0) { + player_location=1; + } + rgb_point(player_location,7,0,50,0); + +} +void playerMoveUp() +{ + + w8.attach(&PMU,btn_delay); +} + +void SHT() +{ + mybullet[currentbullet].y=player_location; + mybullet[currentbullet].enable=1; + currentbullet++; + if(currentbullet>=10)currentbullet=0; +} + +void shooting() +{ + w8.attach(&SHT,btn_delay); +} + +void bulletUpdate() +{ + + for(int i=0; i<10; i++) { + if(mybullet[i].enable==1) { + mybullet[i].display(); + if(timer1.read_ms()%bullet_speed==0) { + rgb_point(mybullet[i].y,6-mybullet[i].x,0,0,0); + mybullet[i].x++; + if(mybullet[i].x>=7)mybullet[i].RST(); + } + } + + } +} + + +void genarate_enemy(enemy stage[],int enemy_size,int t_ms[]) +{ + for(int i=0; i<enemy_size; i++) { + stage[i].x=0; + stage[i].y=(rand()%6) +1; + for(int j=0; j< enemy_size && i!=j; j++) { + if(stage[i].y==stage[j].y && stage[i].x==stage[j].x)stage[i].x++; + + } + stage[i].level=1; + stage[i].enable=1; + stage[i].t_delay=t_ms[rand()%4 +1]; + if(stage[i].y==0 || stage[i].y==7) { + stage[i].enable=0; + stage[i].RST(); + } + + } +} + + + +void genarate_enemy_rand(enemy stage[],int enemy_size,int t_ms[]) +{ + for(int i=0; i<enemy_size; i++) { + stage[i].x=0; + stage[i].y=rand()%6 +1; + for(int j=0; j< enemy_size && i!=j; j++) { + if(stage[i].y==stage[j].y)stage[i].x++; + stage[i].enable=1; + } + stage[i].level=rand()%2 +1; + stage[i].enable=1; + stage[i].t_delay=t_ms[rand()%4 +1]; + if(stage[i].y==0 || stage[i].y==7) { + stage[i].enable=0; + stage[i].RST(); + } + + } +} + +void newSetting(){ + screen_off(); + createWall(); + rgb_point(player_location,7,0,50,0); + } + +void enemyUpdate(enemy temp[],int enemy_size) +{ + uint8_t status=0; + for(int i=0; i<enemy_size; i++) { + if(temp[i].enable==1) { + temp[i].display(); + if(timer1.read_ms()%temp[i].t_delay==0) { + rgb_point(temp[i].y,temp[i].x,0,0,0); + temp[i].x++; + if(temp[i].x>7) { //Game Over + newSetting(); + createWall2(255,10,255); + + temp[i].RST(); + // screen_color(100,10,10); + gameLevel=1; + genarate_enemy(wave1,enemy_size1,t_ms_easy); + } + } + for(int j =0; j<10; j++) { + if(temp[i].x==(6-mybullet[j].x) && temp[i].y==mybullet[j].y) { + mybullet[j].RST(); + if(temp[i].level==2)temp[i].level=1; + else + temp[i].RST(); + } + } + } else status++; + } + if(status>=enemy_size) { + wait_ms(500); + gameLevel++; + newSetting(); + if(gameLevel==2)genarate_enemy(wave2,enemy_size2,t_ms_normal); + if(gameLevel==3)genarate_enemy(wave3,enemy_size2,t_ms_hard); + if(gameLevel==4)genarate_enemy_rand(wave4,enemy_size1,t_ms_easy); + if(gameLevel==5)genarate_enemy_rand(wave5,enemy_size2,t_ms_normal); + if(gameLevel==6){ + genarate_enemy_rand(wave5,enemy_size3,t_ms_normal); + createWall2(0,30,255); + } + } + +} + +void TomaTosetting(){ + timer1.start(); + char wb[3]= {128,128,128}; + INITRGB(wb); + /***************Genarate Enemy*********************/ + genarate_enemy(wave1,enemy_size1,t_ms_easy); + + /***************Setting Button*******************/ + BTN_Down.rise(&playerMoveDown); + BTN_Down.mode(PullUp); + BTN_Up.rise(&playerMoveUp); + BTN_Up.mode(PullUp); + BTN_Shoot.rise(&shooting); + BTN_Shoot.mode(PullUp); + + /************************************/ +//gameSetting + newSetting(); + /***********************************/ + + } +void TomaToloop(){ + + displayRGB(); + bulletUpdate(); + displayRGB(); + //displayRGB(); + if(gameLevel==1)enemyUpdate(wave1,enemy_size1); + if(gameLevel==2)enemyUpdate(wave2,enemy_size2); + if(gameLevel==3)enemyUpdate(wave3,enemy_size3); + if(gameLevel==4)enemyUpdate(wave4,enemy_size1); + if(gameLevel==5)enemyUpdate(wave5,enemy_size2); + if(gameLevel==6)enemyUpdate(wave5,enemy_size3);//6 + displayRGB(); + + } + +