Digital_project 57340500039 57340500070

Dependencies:   mbed

Fork of Digital_project by Teerapong Apiraungpituk

Committer:
57340500039
Date:
Wed Dec 09 10:55:01 2015 +0000
Revision:
2:6b2526c99e5c
Parent:
1:a4c852d25ead
Digital project A06

Who changed what in which revision?

UserRevisionLine numberNew contents of line
57340500039 0:4585326daab4 1 #include "mbed.h"
57340500039 0:4585326daab4 2 #include "LCD4884.h"
57340500039 0:4585326daab4 3 #include <string.h>
57340500039 2:6b2526c99e5c 4 #include <time.h>
57340500039 2:6b2526c99e5c 5 #include <stdlib.h>
57340500039 2:6b2526c99e5c 6 #define maxLvl 3
57340500039 2:6b2526c99e5c 7 #define high 24
57340500039 2:6b2526c99e5c 8 #define width 24
57340500039 2:6b2526c99e5c 9
57340500039 2:6b2526c99e5c 10 Ticker t;
57340500039 2:6b2526c99e5c 11 Timer me;
57340500039 0:4585326daab4 12
57340500039 0:4585326daab4 13 DigitalOut myled(LED1);
57340500039 2:6b2526c99e5c 14 DigitalOut buzz(PC_3);
57340500039 2:6b2526c99e5c 15 AnalogIn LDR(A5);
57340500039 2:6b2526c99e5c 16 Serial pc(PA_15, PB_7);
57340500039 2:6b2526c99e5c 17
57340500039 2:6b2526c99e5c 18 /*
57340500039 2:6b2526c99e5c 19 modeA = watch time
57340500039 2:6b2526c99e5c 20 modeB = before alarm
57340500039 2:6b2526c99e5c 21 modeC = set alarm
57340500039 2:6b2526c99e5c 22 modeD = play games
57340500039 2:6b2526c99e5c 23 modeE = watch Data
57340500039 2:6b2526c99e5c 24 modeF = bluetooth
57340500039 2:6b2526c99e5c 25 */
57340500039 2:6b2526c99e5c 26
57340500039 2:6b2526c99e5c 27 LCD4884 joy;
57340500039 2:6b2526c99e5c 28 int sec=0;
57340500039 2:6b2526c99e5c 29 int hourTime = 0;
57340500039 2:6b2526c99e5c 30 int minTime = 0;
57340500039 2:6b2526c99e5c 31 int hourAlarm = 1;
57340500039 2:6b2526c99e5c 32 int minAlarm = 0;
57340500039 2:6b2526c99e5c 33 int isAlarm = 0;
57340500039 2:6b2526c99e5c 34 int timeNow = 0;
57340500039 2:6b2526c99e5c 35 int level = 0;
57340500039 2:6b2526c99e5c 36
57340500039 2:6b2526c99e5c 37 int wakeUp[3]={0,0,0};
57340500039 2:6b2526c99e5c 38 //0 late, 1 not late, 2 set
57340500039 2:6b2526c99e5c 39 int addTime(int min);
57340500039 2:6b2526c99e5c 40 void plusTime();
57340500039 2:6b2526c99e5c 41 int ring(int a);
57340500039 2:6b2526c99e5c 42 int alarmNow();
57340500039 2:6b2526c99e5c 43 int menu(int n,char *input[]);
57340500039 2:6b2526c99e5c 44 void print(int n,unsigned char X, unsigned char Y);
57340500039 2:6b2526c99e5c 45 void win();
57340500039 2:6b2526c99e5c 46 void lose();
57340500039 2:6b2526c99e5c 47 int snake_game();
57340500039 2:6b2526c99e5c 48 int crossRoad_game();
57340500039 2:6b2526c99e5c 49 int modeA();
57340500039 2:6b2526c99e5c 50 int modeB();
57340500039 2:6b2526c99e5c 51 int modeC();
57340500039 2:6b2526c99e5c 52 int modeD();
57340500039 2:6b2526c99e5c 53 int modeE();
57340500039 2:6b2526c99e5c 54 int modeF();
57340500039 0:4585326daab4 55
57340500039 0:4585326daab4 56 int main() {
57340500039 2:6b2526c99e5c 57 t.attach(&plusTime, 1.0);
57340500039 2:6b2526c99e5c 58
57340500039 2:6b2526c99e5c 59 int mode = 0,temp;
57340500039 2:6b2526c99e5c 60 char *str[6] = {"watch time","before alarm","set alarm","play games","watch Data","bluetooth"};
57340500039 2:6b2526c99e5c 61 joy.LCD_init();
57340500039 2:6b2526c99e5c 62 /*
57340500039 2:6b2526c99e5c 63 while(1){
57340500039 2:6b2526c99e5c 64 joy.LCD_write_string(0x00,0x00,"aaaaaa",'0');
57340500039 2:6b2526c99e5c 65 //joy.LCD_clear();
57340500039 2:6b2526c99e5c 66 }*/
57340500039 2:6b2526c99e5c 67
57340500039 2:6b2526c99e5c 68 while(1) {
57340500039 0:4585326daab4 69
57340500039 2:6b2526c99e5c 70 temp = menu(6,str);
57340500039 2:6b2526c99e5c 71 switch(temp){
57340500039 2:6b2526c99e5c 72 case 0: modeA();break;
57340500039 2:6b2526c99e5c 73 case 1: modeB();break;
57340500039 2:6b2526c99e5c 74 case 2: modeC();break;
57340500039 2:6b2526c99e5c 75 case 3: modeD();break;
57340500039 2:6b2526c99e5c 76 case 4: modeE();break;
57340500039 2:6b2526c99e5c 77 case 5: modeF();break;
57340500039 2:6b2526c99e5c 78 }
57340500039 2:6b2526c99e5c 79 wait_ms(100);
57340500039 2:6b2526c99e5c 80 }
57340500039 2:6b2526c99e5c 81 //return 0;
57340500039 2:6b2526c99e5c 82 }
57340500039 2:6b2526c99e5c 83
57340500039 2:6b2526c99e5c 84 //time
57340500039 2:6b2526c99e5c 85 int addTime(int min){
57340500039 2:6b2526c99e5c 86 minTime += min;
57340500039 2:6b2526c99e5c 87 hourTime += minTime/60;
57340500039 2:6b2526c99e5c 88 hourTime%=24;
57340500039 2:6b2526c99e5c 89 minTime%=60;
57340500039 2:6b2526c99e5c 90 return 0;
57340500039 2:6b2526c99e5c 91 }
57340500039 2:6b2526c99e5c 92 void plusTime(){
57340500039 2:6b2526c99e5c 93 sec++;
57340500039 2:6b2526c99e5c 94 if(sec==60){
57340500039 2:6b2526c99e5c 95 sec = 0;
57340500039 2:6b2526c99e5c 96 addTime(1);
57340500039 2:6b2526c99e5c 97 }
57340500039 2:6b2526c99e5c 98 if(hourTime==hourAlarm&&minTime==minAlarm){
57340500039 2:6b2526c99e5c 99 alarmNow();
57340500039 2:6b2526c99e5c 100 }
57340500039 2:6b2526c99e5c 101 }
57340500039 2:6b2526c99e5c 102
57340500039 2:6b2526c99e5c 103 //alarm
57340500039 2:6b2526c99e5c 104 int isLight(){
57340500039 2:6b2526c99e5c 105 float a;
57340500039 2:6b2526c99e5c 106 a = LDR.read();
57340500039 2:6b2526c99e5c 107 if(a<=0.5) return 1; //สว่าง
57340500039 2:6b2526c99e5c 108 return 0;
57340500039 2:6b2526c99e5c 109 }
57340500039 2:6b2526c99e5c 110 int ring(int a){
57340500039 2:6b2526c99e5c 111 if(a==1) buzz = 1;
57340500039 2:6b2526c99e5c 112 else buzz = 0;
57340500039 2:6b2526c99e5c 113 }
57340500039 2:6b2526c99e5c 114 int alarmNow(){ //เพิ่มเชคว่า เลท/ไม่เลท
57340500039 2:6b2526c99e5c 115 me.start();
57340500039 2:6b2526c99e5c 116 int random,light=0,re=0;
57340500039 2:6b2526c99e5c 117 srand(time(NULL));
57340500039 2:6b2526c99e5c 118 random = rand()%2;
57340500039 2:6b2526c99e5c 119 ring(1);
57340500039 2:6b2526c99e5c 120 if(random==1){
57340500039 2:6b2526c99e5c 121 while(!snake_game());
57340500039 2:6b2526c99e5c 122 }else{
57340500039 2:6b2526c99e5c 123 while(!crossRoad_game());
57340500039 2:6b2526c99e5c 124 }
57340500039 2:6b2526c99e5c 125 while(!light){
57340500039 2:6b2526c99e5c 126 light =isLight();
57340500039 2:6b2526c99e5c 127 }
57340500039 2:6b2526c99e5c 128 ring(0);
57340500039 2:6b2526c99e5c 129 isAlarm = 0;
57340500039 2:6b2526c99e5c 130 me.stop();
57340500039 2:6b2526c99e5c 131 if(me.read()>180) wakeUp[0]++;
57340500039 2:6b2526c99e5c 132 else wakeUp[1]++;
57340500039 2:6b2526c99e5c 133 }
57340500039 2:6b2526c99e5c 134
57340500039 2:6b2526c99e5c 135 //modeA = watch time
57340500039 2:6b2526c99e5c 136 int modeA(){
57340500039 2:6b2526c99e5c 137 char temp[6],c;
57340500039 2:6b2526c99e5c 138 while(1){
57340500039 2:6b2526c99e5c 139 temp[0] = '0'+hourTime/10;
57340500039 2:6b2526c99e5c 140 temp[1] = hourTime%10+'0';
57340500039 2:6b2526c99e5c 141 temp[2] = '.';
57340500039 2:6b2526c99e5c 142 temp[3] = '0'+minTime/10;
57340500039 2:6b2526c99e5c 143 temp[4] = minTime%10+'0';
57340500039 2:6b2526c99e5c 144 temp[5] = '\0';
57340500039 2:6b2526c99e5c 145
57340500039 2:6b2526c99e5c 146 joy.LCD_clear();
57340500039 2:6b2526c99e5c 147 joy.LCD_write_string_big(10,2,temp,0);
57340500039 2:6b2526c99e5c 148
57340500039 2:6b2526c99e5c 149 c=joy.LCD_joystick();
57340500039 2:6b2526c99e5c 150 if(c=='l') return -1;
57340500039 2:6b2526c99e5c 151 wait_ms(100);
57340500039 2:6b2526c99e5c 152 }
57340500039 2:6b2526c99e5c 153 }
57340500039 2:6b2526c99e5c 154
57340500039 2:6b2526c99e5c 155 //modeB = before alarm
57340500039 2:6b2526c99e5c 156 int modeB(){
57340500039 2:6b2526c99e5c 157 char c,temp[7];
57340500039 2:6b2526c99e5c 158 int a=0,b=0,show;
57340500039 2:6b2526c99e5c 159
57340500039 2:6b2526c99e5c 160 while(1){
57340500039 2:6b2526c99e5c 161 joy.LCD_clear();
57340500039 2:6b2526c99e5c 162 if(isAlarm){
57340500039 2:6b2526c99e5c 163 a = hourTime*60 + minTime;
57340500039 2:6b2526c99e5c 164 b = hourAlarm*60 + minAlarm;
57340500039 2:6b2526c99e5c 165 if(a>b){
57340500039 2:6b2526c99e5c 166 show = 24*60 - a + b;
57340500039 2:6b2526c99e5c 167 }else if(a<b){
57340500039 2:6b2526c99e5c 168 show = b-a;
57340500039 2:6b2526c99e5c 169 }
57340500039 2:6b2526c99e5c 170 temp[0] = (show/60)/10 + '0';
57340500039 2:6b2526c99e5c 171 temp[1] = (show/60)%10 + '0';
57340500039 2:6b2526c99e5c 172 temp[2] = '.';
57340500039 2:6b2526c99e5c 173 temp[3] = (show%60)/10 + '0';
57340500039 2:6b2526c99e5c 174 temp[4] = (show%60)%10 + '0';
57340500039 2:6b2526c99e5c 175 temp[5] = '\0';
57340500039 2:6b2526c99e5c 176 joy.LCD_write_string_big(10,2,temp,0);
57340500039 2:6b2526c99e5c 177 }else joy.LCD_write_string_big(10,2,"--.--",0);
57340500039 2:6b2526c99e5c 178
57340500039 2:6b2526c99e5c 179 c=joy.LCD_joystick();
57340500039 2:6b2526c99e5c 180 if(c=='l') return -1;
57340500039 2:6b2526c99e5c 181 wait_ms(100);
57340500039 2:6b2526c99e5c 182
57340500039 2:6b2526c99e5c 183 }
57340500039 2:6b2526c99e5c 184 }
57340500039 2:6b2526c99e5c 185
57340500039 2:6b2526c99e5c 186 //modeC = set alarm
57340500039 2:6b2526c99e5c 187 int modeC(){
57340500039 2:6b2526c99e5c 188 int mode=0;
57340500039 2:6b2526c99e5c 189 int x[2]={0,0};
57340500039 2:6b2526c99e5c 190 char c,temp[6];
57340500039 2:6b2526c99e5c 191
57340500039 2:6b2526c99e5c 192 while(1){
57340500039 2:6b2526c99e5c 193 joy.LCD_clear();
57340500039 2:6b2526c99e5c 194
57340500039 2:6b2526c99e5c 195 if(mode==0){
57340500039 2:6b2526c99e5c 196 temp[0] = '0'+x[0]/10;
57340500039 2:6b2526c99e5c 197 temp[1] = x[0]%10+'0';
57340500039 2:6b2526c99e5c 198 temp[2] = '\0';
57340500039 2:6b2526c99e5c 199 joy.LCD_write_string_big(7,2,temp,1);
57340500039 2:6b2526c99e5c 200 temp[0] = '0'+x[1]/10;
57340500039 2:6b2526c99e5c 201 temp[1] = x[1]%10+'0';
57340500039 2:6b2526c99e5c 202 temp[2] = '\0';
57340500039 2:6b2526c99e5c 203 joy.LCD_write_string_big(40,2,".",0);
57340500039 2:6b2526c99e5c 204 joy.LCD_write_string_big(47,2,temp,0);
57340500039 2:6b2526c99e5c 205 }else if(mode==1){
57340500039 2:6b2526c99e5c 206 temp[0] = '0'+x[0]/10;
57340500039 2:6b2526c99e5c 207 temp[1] = x[0]%10+'0';
57340500039 2:6b2526c99e5c 208 temp[2] = '\0';
57340500039 2:6b2526c99e5c 209 joy.LCD_write_string_big(7,2,temp,0);
57340500039 2:6b2526c99e5c 210 temp[0] = '0'+x[1]/10;
57340500039 2:6b2526c99e5c 211 temp[1] = x[1]%10+'0';
57340500039 2:6b2526c99e5c 212 temp[2] = '\0';
57340500039 2:6b2526c99e5c 213 joy.LCD_write_string_big(40,2,".",0);
57340500039 2:6b2526c99e5c 214 joy.LCD_write_string_big(47,2,temp,1);
57340500039 2:6b2526c99e5c 215 }
57340500039 2:6b2526c99e5c 216
57340500039 2:6b2526c99e5c 217 c=joy.LCD_joystick();
57340500039 2:6b2526c99e5c 218 switch (c){
57340500039 2:6b2526c99e5c 219 case 'l':
57340500039 2:6b2526c99e5c 220 if(mode==1) mode=0;
57340500039 2:6b2526c99e5c 221 else{
57340500039 2:6b2526c99e5c 222 joy.LCD_clear();
57340500039 2:6b2526c99e5c 223 joy.LCD_write_string(0,1,"back to menu?",0);
57340500039 2:6b2526c99e5c 224 joy.LCD_write_string(0,2,"(Y) move Right",0);
57340500039 2:6b2526c99e5c 225 joy.LCD_write_string(0,3,"(N) move Left",0);
57340500039 2:6b2526c99e5c 226 while(1){
57340500039 2:6b2526c99e5c 227 wait_ms(200);
57340500039 2:6b2526c99e5c 228 c=joy.LCD_joystick();
57340500039 2:6b2526c99e5c 229 if(c=='l'){
57340500039 2:6b2526c99e5c 230 break;
57340500039 2:6b2526c99e5c 231 }else if(c=='r'){
57340500039 2:6b2526c99e5c 232 return -1;
57340500039 2:6b2526c99e5c 233 }
57340500039 2:6b2526c99e5c 234 }
57340500039 2:6b2526c99e5c 235 }
57340500039 2:6b2526c99e5c 236 break;
57340500039 2:6b2526c99e5c 237 case 'r':
57340500039 2:6b2526c99e5c 238 if(mode==0) mode=1;
57340500039 2:6b2526c99e5c 239 else{
57340500039 2:6b2526c99e5c 240 joy.LCD_clear();
57340500039 2:6b2526c99e5c 241 joy.LCD_write_string(0,0,"set alarm at",0);
57340500039 2:6b2526c99e5c 242
57340500039 2:6b2526c99e5c 243 temp[0] = '0'+x[0]/10;
57340500039 2:6b2526c99e5c 244 temp[1] = x[0]%10+'0';
57340500039 2:6b2526c99e5c 245 temp[2] = '.';
57340500039 2:6b2526c99e5c 246 temp[3] = '0'+x[1]/10;
57340500039 2:6b2526c99e5c 247 temp[4] = x[1]%10+'0';
57340500039 2:6b2526c99e5c 248 temp[5] = '\0';
57340500039 2:6b2526c99e5c 249 joy.LCD_write_string(20,1,temp,0);
57340500039 2:6b2526c99e5c 250
57340500039 2:6b2526c99e5c 251 joy.LCD_write_string(0,3,"confirm?",0);
57340500039 2:6b2526c99e5c 252 joy.LCD_write_string(0,4,"(Y) move Right",0);
57340500039 2:6b2526c99e5c 253 joy.LCD_write_string(0,5,"(N) move Left",0);
57340500039 2:6b2526c99e5c 254 while(1){
57340500039 2:6b2526c99e5c 255 wait_ms(200);
57340500039 2:6b2526c99e5c 256 c=joy.LCD_joystick();
57340500039 2:6b2526c99e5c 257 if(c=='r'){
57340500039 2:6b2526c99e5c 258 isAlarm = 1;
57340500039 2:6b2526c99e5c 259 wakeUp[2]++;
57340500039 2:6b2526c99e5c 260 hourAlarm = (temp[0]-'0')*10+(temp[1]-'0');
57340500039 2:6b2526c99e5c 261 minAlarm = (temp[3]-'0')*10+(temp[4]-'0');
57340500039 2:6b2526c99e5c 262 return 0;
57340500039 2:6b2526c99e5c 263 }else if(c=='l'){
57340500039 2:6b2526c99e5c 264 break;
57340500039 2:6b2526c99e5c 265 }
57340500039 2:6b2526c99e5c 266 }
57340500039 2:6b2526c99e5c 267 }
57340500039 2:6b2526c99e5c 268 break;
57340500039 2:6b2526c99e5c 269 case 'u':
57340500039 2:6b2526c99e5c 270 switch(mode){
57340500039 2:6b2526c99e5c 271 case 0: x[0] = (x[0]+1)%24; break;
57340500039 2:6b2526c99e5c 272 case 1: x[1] = (x[1]+1)%60; break;
57340500039 2:6b2526c99e5c 273 }
57340500039 2:6b2526c99e5c 274 break;
57340500039 2:6b2526c99e5c 275 case 'd':
57340500039 2:6b2526c99e5c 276 switch(mode){
57340500039 2:6b2526c99e5c 277 case 0: x[0] = (x[0]+23)%24; break;
57340500039 2:6b2526c99e5c 278 case 1: x[1] = (x[1]+23)%60; break;
57340500039 2:6b2526c99e5c 279 }
57340500039 2:6b2526c99e5c 280 break;
57340500039 2:6b2526c99e5c 281 }
57340500039 2:6b2526c99e5c 282 wait_ms(200);
57340500039 2:6b2526c99e5c 283 }
57340500039 2:6b2526c99e5c 284 }
57340500039 2:6b2526c99e5c 285
57340500039 2:6b2526c99e5c 286 //modeD = play games
57340500039 2:6b2526c99e5c 287 int modeD(){
57340500039 2:6b2526c99e5c 288 int mode;
57340500039 2:6b2526c99e5c 289 char *data[2];
57340500039 2:6b2526c99e5c 290 data[0] = "Snake";
57340500039 2:6b2526c99e5c 291 data[1] = "Cross Road";
57340500039 2:6b2526c99e5c 292
57340500039 2:6b2526c99e5c 293 mode = menu(2,data);
57340500039 2:6b2526c99e5c 294 wait_ms(100);
57340500039 2:6b2526c99e5c 295 if(mode==0) snake_game();
57340500039 2:6b2526c99e5c 296 else if(mode==1) crossRoad_game();
57340500039 2:6b2526c99e5c 297 return 0;
57340500039 2:6b2526c99e5c 298 }
57340500039 2:6b2526c99e5c 299
57340500039 2:6b2526c99e5c 300 //modeE = watch Data
57340500039 2:6b2526c99e5c 301 int modeE(){
57340500039 2:6b2526c99e5c 302 char c,temp[15];
57340500039 2:6b2526c99e5c 303 int check=0;
57340500039 2:6b2526c99e5c 304
57340500039 2:6b2526c99e5c 305 joy.LCD_clear();
57340500039 2:6b2526c99e5c 306 sprintf(temp,"Late : %d",wakeUp[0]);
57340500039 2:6b2526c99e5c 307 joy.LCD_write_string(0,0,temp,0);
57340500039 2:6b2526c99e5c 308 sprintf(temp,"Not Late : %d",wakeUp[1]);
57340500039 2:6b2526c99e5c 309 joy.LCD_write_string(0,1,temp,0);
57340500039 2:6b2526c99e5c 310 sprintf(temp,"Set Alarm : %d",wakeUp[2]);
57340500039 2:6b2526c99e5c 311 joy.LCD_write_string(0,2,temp,0);
57340500039 2:6b2526c99e5c 312
57340500039 2:6b2526c99e5c 313 sprintf(temp,"reset move joy");
57340500039 2:6b2526c99e5c 314 joy.LCD_write_string(0,4,temp,0);
57340500039 2:6b2526c99e5c 315 sprintf(temp,"down 2 times.");
57340500039 2:6b2526c99e5c 316 joy.LCD_write_string(0,5,temp,0);
57340500039 2:6b2526c99e5c 317 while(1){
57340500039 2:6b2526c99e5c 318 c=joy.LCD_joystick();
57340500039 2:6b2526c99e5c 319 if(check==1){
57340500039 2:6b2526c99e5c 320 joy.LCD_clear();
57340500039 2:6b2526c99e5c 321 joy.LCD_write_string(0,0,"data reset",0);
57340500039 2:6b2526c99e5c 322 wait(2);
57340500039 2:6b2526c99e5c 323 for(check=0;check<3;check++) wakeUp[check] = 0;
57340500039 2:6b2526c99e5c 324 joy.LCD_clear();
57340500039 2:6b2526c99e5c 325 sprintf(temp,"Late : %d",wakeUp[0]);
57340500039 2:6b2526c99e5c 326 joy.LCD_write_string(0,0,temp,0);
57340500039 2:6b2526c99e5c 327 sprintf(temp,"Not Late : %d",wakeUp[1]);
57340500039 2:6b2526c99e5c 328 joy.LCD_write_string(0,1,temp,0);
57340500039 2:6b2526c99e5c 329 sprintf(temp,"Set Alarm : %d",wakeUp[2]);
57340500039 2:6b2526c99e5c 330 joy.LCD_write_string(0,2,temp,0);
57340500039 2:6b2526c99e5c 331
57340500039 2:6b2526c99e5c 332 sprintf(temp,"reset move joy");
57340500039 2:6b2526c99e5c 333 joy.LCD_write_string(0,4,temp,0);
57340500039 2:6b2526c99e5c 334 sprintf(temp,"down 2 times.");
57340500039 2:6b2526c99e5c 335 joy.LCD_write_string(0,5,temp,0);
57340500039 2:6b2526c99e5c 336 }
57340500039 2:6b2526c99e5c 337 check = 0;
57340500039 2:6b2526c99e5c 338 if(c=='l') return -1;
57340500039 2:6b2526c99e5c 339 if(c=='d') check++;
57340500039 2:6b2526c99e5c 340 wait_ms(200);
57340500039 0:4585326daab4 341 }
57340500039 0:4585326daab4 342 }
57340500039 2:6b2526c99e5c 343
57340500039 2:6b2526c99e5c 344 //modeF = bluetooth
57340500039 2:6b2526c99e5c 345 int modeF(){ //bluetooth mode here
57340500039 2:6b2526c99e5c 346 char input[6],temp[15];
57340500039 2:6b2526c99e5c 347 input[0] = pc.getc();
57340500039 2:6b2526c99e5c 348 input[1] = pc.getc();
57340500039 2:6b2526c99e5c 349 input[2] = pc.getc();
57340500039 2:6b2526c99e5c 350 input[3] = pc.getc();
57340500039 2:6b2526c99e5c 351 input[4] = pc.getc();
57340500039 2:6b2526c99e5c 352 input[5] = '\0';
57340500039 2:6b2526c99e5c 353
57340500039 2:6b2526c99e5c 354 switch(input[0]){
57340500039 2:6b2526c99e5c 355 case '0':
57340500039 2:6b2526c99e5c 356 hourTime = (input[1]-'0')*10+(input[2]-'0');
57340500039 2:6b2526c99e5c 357 minTime = (input[3]-'0')*10+(input[4]-'0');
57340500039 2:6b2526c99e5c 358 break;
57340500039 2:6b2526c99e5c 359 case '1':
57340500039 2:6b2526c99e5c 360 isAlarm = 1;
57340500039 2:6b2526c99e5c 361 wakeUp[2]++;
57340500039 2:6b2526c99e5c 362 hourAlarm = (input[1]-'0')*10+(input[2]-'0');
57340500039 2:6b2526c99e5c 363 minAlarm = (input[3]-'0')*10+(input[4]-'0');
57340500039 2:6b2526c99e5c 364 break;
57340500039 2:6b2526c99e5c 365 case '2':
57340500039 2:6b2526c99e5c 366 level = input[1]-'0';
57340500039 2:6b2526c99e5c 367 break;
57340500039 2:6b2526c99e5c 368 case '3':
57340500039 2:6b2526c99e5c 369 sprintf(temp,"%02d%02d%02d",wakeUp[0],wakeUp[1],wakeUp[2]);
57340500039 2:6b2526c99e5c 370 pc.printf(temp);
57340500039 2:6b2526c99e5c 371 break;
57340500039 2:6b2526c99e5c 372 default : //do some thing
57340500039 2:6b2526c99e5c 373 }
57340500039 2:6b2526c99e5c 374
57340500039 2:6b2526c99e5c 375 }
57340500039 2:6b2526c99e5c 376
57340500039 2:6b2526c99e5c 377 // game
57340500039 2:6b2526c99e5c 378 void print(int n,unsigned char x, unsigned char y){
57340500039 2:6b2526c99e5c 379 if(n!=0) joy.LCD_pixel(x,y);
57340500039 2:6b2526c99e5c 380 }
57340500039 2:6b2526c99e5c 381 void win(){
57340500039 2:6b2526c99e5c 382 joy.LCD_clear();
57340500039 2:6b2526c99e5c 383 joy.LCD_write_string(20,2,"WIN!",0);
57340500039 2:6b2526c99e5c 384 }
57340500039 2:6b2526c99e5c 385 void lose(){
57340500039 2:6b2526c99e5c 386 joy.LCD_clear();
57340500039 2:6b2526c99e5c 387 joy.LCD_write_string(20,2,"LOSE!",1);
57340500039 2:6b2526c99e5c 388 }
57340500039 2:6b2526c99e5c 389
57340500039 2:6b2526c99e5c 390 int snake_game(){
57340500039 2:6b2526c99e5c 391 wait(0.5);
57340500039 2:6b2526c99e5c 392 int map[24][24],num = high*width;
57340500039 2:6b2526c99e5c 393
57340500039 2:6b2526c99e5c 394 int k,p=0,i,j;
57340500039 2:6b2526c99e5c 395 int pScore,lvl=level,walk,path=1,temp,now;
57340500039 2:6b2526c99e5c 396 int score = 4,food=0;
57340500039 2:6b2526c99e5c 397 char c;
57340500039 2:6b2526c99e5c 398 int input[high][width];
57340500039 2:6b2526c99e5c 399 unsigned char output[num/8];
57340500039 2:6b2526c99e5c 400
57340500039 2:6b2526c99e5c 401 srand(time(NULL));
57340500039 2:6b2526c99e5c 402 pScore = (rand()%10)+7; //pass score here!
57340500039 2:6b2526c99e5c 403
57340500039 2:6b2526c99e5c 404 for(i=0;i<high;i++){
57340500039 2:6b2526c99e5c 405 for(j=0;j<width;j++){
57340500039 2:6b2526c99e5c 406 if(j==0||i==0||i==high-1||j==width-1) map[i][j] = -1;
57340500039 2:6b2526c99e5c 407 else map[i][j] = 0;
57340500039 2:6b2526c99e5c 408 }
57340500039 2:6b2526c99e5c 409 }
57340500039 2:6b2526c99e5c 410
57340500039 2:6b2526c99e5c 411 map[high/2][width/3] = 1;
57340500039 2:6b2526c99e5c 412 map[high/2][(width/3)+1] = 2;
57340500039 2:6b2526c99e5c 413 map[high/2][(width/3)+2] = 3;
57340500039 2:6b2526c99e5c 414 map[high/2][(width/3)+3] = 4;
57340500039 2:6b2526c99e5c 415 now = ((high/2))*width + (width/3)+3;
57340500039 2:6b2526c99e5c 416 while(map[food/width][food%width]!=0){
57340500039 2:6b2526c99e5c 417 food = rand()%num; //random food
57340500039 2:6b2526c99e5c 418 }
57340500039 2:6b2526c99e5c 419
57340500039 2:6b2526c99e5c 420 joy.LCD_clear();
57340500039 2:6b2526c99e5c 421 joy.LCD_write_string(10,1,"move joy to",0);
57340500039 2:6b2526c99e5c 422 joy.LCD_write_string(10,2,">> START <<",0);
57340500039 2:6b2526c99e5c 423
57340500039 2:6b2526c99e5c 424 while(1){
57340500039 2:6b2526c99e5c 425 wait_ms(200);
57340500039 2:6b2526c99e5c 426 c=joy.LCD_joystick();
57340500039 2:6b2526c99e5c 427 if(c=='u'||c=='d'||c=='l'||c=='r') break;
57340500039 2:6b2526c99e5c 428 }
57340500039 2:6b2526c99e5c 429 wait_ms(200);
57340500039 2:6b2526c99e5c 430 //start game!
57340500039 2:6b2526c99e5c 431 joy.LCD_clear();
57340500039 2:6b2526c99e5c 432 while(1){
57340500039 2:6b2526c99e5c 433 //print map[][] to 0,1
57340500039 2:6b2526c99e5c 434
57340500039 2:6b2526c99e5c 435 for(i=0;i<high;i++){
57340500039 2:6b2526c99e5c 436 for(j=0;j<width;j++){
57340500039 2:6b2526c99e5c 437 if((i*width + j)==food) input[i][j] = 1;
57340500039 2:6b2526c99e5c 438 else if(map[i][j]!=0) input[i][j] = 1;
57340500039 2:6b2526c99e5c 439 else input[i][j] = 0;
57340500039 2:6b2526c99e5c 440 }
57340500039 2:6b2526c99e5c 441 }
57340500039 2:6b2526c99e5c 442
57340500039 2:6b2526c99e5c 443 //change to new Map
57340500039 2:6b2526c99e5c 444
57340500039 2:6b2526c99e5c 445 p = 0;
57340500039 2:6b2526c99e5c 446 for(i=0;i<72;i++) output[i] = 0;
57340500039 2:6b2526c99e5c 447
57340500039 2:6b2526c99e5c 448 for(i=0;i<3;i++){
57340500039 2:6b2526c99e5c 449 for(j=0;j<24;j++){
57340500039 2:6b2526c99e5c 450 for(k=7;k>=0;k--){
57340500039 2:6b2526c99e5c 451 output[p] = output[p]*2 + input[i*8+k][j];
57340500039 2:6b2526c99e5c 452 //printf("%d ",input[i*8+7-k][j]);
57340500039 2:6b2526c99e5c 453 }
57340500039 2:6b2526c99e5c 454 p++;
57340500039 2:6b2526c99e5c 455 }
57340500039 2:6b2526c99e5c 456 }
57340500039 2:6b2526c99e5c 457
57340500039 2:6b2526c99e5c 458 joy.LCD_clear();
57340500039 2:6b2526c99e5c 459 joy.LCD_draw_bmp_pixel(0,0,output,high,width);
57340500039 2:6b2526c99e5c 460
57340500039 2:6b2526c99e5c 461 wait_ms(200);
57340500039 2:6b2526c99e5c 462 //find path
57340500039 2:6b2526c99e5c 463 c=joy.LCD_joystick();
57340500039 2:6b2526c99e5c 464 switch (c){
57340500039 2:6b2526c99e5c 465 case 'l': temp=-1; break;
57340500039 2:6b2526c99e5c 466 case 'r': temp=1; break;
57340500039 2:6b2526c99e5c 467 case 'u': temp=-width; break;
57340500039 2:6b2526c99e5c 468 case 'd': temp=width; break;
57340500039 2:6b2526c99e5c 469 default : temp=path;
57340500039 2:6b2526c99e5c 470 }
57340500039 2:6b2526c99e5c 471 if(temp!=-path)path=temp;
57340500039 2:6b2526c99e5c 472
57340500039 2:6b2526c99e5c 473 if(map[(now+path)/width][(now+path)%width]!=0) break; //eat !food
57340500039 2:6b2526c99e5c 474
57340500039 2:6b2526c99e5c 475 now+=path;
57340500039 2:6b2526c99e5c 476 temp = 1;
57340500039 2:6b2526c99e5c 477
57340500039 2:6b2526c99e5c 478 if(now==food){
57340500039 2:6b2526c99e5c 479 score+=1;
57340500039 2:6b2526c99e5c 480 temp = food;
57340500039 2:6b2526c99e5c 481 while(map[food/width][food%width]!=0||food==temp){
57340500039 2:6b2526c99e5c 482 food = rand()%num; //random food
57340500039 2:6b2526c99e5c 483 }
57340500039 2:6b2526c99e5c 484 map[food/width][food%width] = 1;
57340500039 2:6b2526c99e5c 485 temp=0;
57340500039 2:6b2526c99e5c 486 }
57340500039 2:6b2526c99e5c 487 map[now/width][now%width]=score+1;
57340500039 2:6b2526c99e5c 488 for(i=0;i<num;i++) if(map[i/width][i%width]>0) map[i/width][i%width]-=temp;
57340500039 2:6b2526c99e5c 489
57340500039 2:6b2526c99e5c 490
57340500039 2:6b2526c99e5c 491 wait_ms((maxLvl - lvl+1)*200);
57340500039 2:6b2526c99e5c 492 }
57340500039 2:6b2526c99e5c 493
57340500039 2:6b2526c99e5c 494 if((score*lvl)-4>=pScore){
57340500039 2:6b2526c99e5c 495 win();
57340500039 2:6b2526c99e5c 496 wait(2);
57340500039 2:6b2526c99e5c 497 return 1;
57340500039 2:6b2526c99e5c 498 }
57340500039 2:6b2526c99e5c 499
57340500039 2:6b2526c99e5c 500 lose();
57340500039 2:6b2526c99e5c 501 wait(2);
57340500039 2:6b2526c99e5c 502
57340500039 2:6b2526c99e5c 503 return 0;
57340500039 2:6b2526c99e5c 504 }
57340500039 2:6b2526c99e5c 505 int crossRoad_game(){
57340500039 2:6b2526c99e5c 506 wait(0.5);
57340500039 2:6b2526c99e5c 507 int car[high][width],num = high*width;
57340500039 2:6b2526c99e5c 508 unsigned char i,j;
57340500039 2:6b2526c99e5c 509 int k,p;
57340500039 2:6b2526c99e5c 510 int pScore,lvl=level,walk,path=0,temp,now;
57340500039 2:6b2526c99e5c 511 int score = 4,isWin=0;
57340500039 2:6b2526c99e5c 512 char c;
57340500039 2:6b2526c99e5c 513 int input[high][width];
57340500039 2:6b2526c99e5c 514 unsigned char output[num/8];
57340500039 2:6b2526c99e5c 515
57340500039 2:6b2526c99e5c 516 now = ((high-2))*width + (width/2);
57340500039 2:6b2526c99e5c 517 srand(time(NULL));
57340500039 2:6b2526c99e5c 518 pScore = (rand()%10)+7; //pass score here!
57340500039 2:6b2526c99e5c 519
57340500039 2:6b2526c99e5c 520 for(i=0;i<high;i++){
57340500039 2:6b2526c99e5c 521 for(j=0;j<width;j++){
57340500039 2:6b2526c99e5c 522 if(i==high-1) car[i][j] = -1;
57340500039 2:6b2526c99e5c 523 else if(i==0) car[i][j] = -2;
57340500039 2:6b2526c99e5c 524 else car[i][j] = 0;
57340500039 2:6b2526c99e5c 525 }
57340500039 2:6b2526c99e5c 526 }//set no car
57340500039 2:6b2526c99e5c 527
57340500039 2:6b2526c99e5c 528 for(i=1;i<high-2;i++){
57340500039 2:6b2526c99e5c 529 for(j=0;j<((width*((i%2)+1))/10);j++){
57340500039 2:6b2526c99e5c 530 temp = rand()%(width);
57340500039 2:6b2526c99e5c 531 car[i][temp] = 1;
57340500039 2:6b2526c99e5c 532 }
57340500039 2:6b2526c99e5c 533 }//set car
57340500039 2:6b2526c99e5c 534
57340500039 2:6b2526c99e5c 535 joy.LCD_clear();
57340500039 2:6b2526c99e5c 536 joy.LCD_write_string(10,1,"move joy to",0);
57340500039 2:6b2526c99e5c 537 joy.LCD_write_string(10,2,">> START <<",0);
57340500039 2:6b2526c99e5c 538 while(1){
57340500039 2:6b2526c99e5c 539 wait_ms(200);
57340500039 2:6b2526c99e5c 540 c=joy.LCD_joystick();
57340500039 2:6b2526c99e5c 541 if(c=='u'||c=='d'||c=='l'||c=='r') break;
57340500039 2:6b2526c99e5c 542 }
57340500039 2:6b2526c99e5c 543
57340500039 2:6b2526c99e5c 544 //start game!
57340500039 2:6b2526c99e5c 545 joy.LCD_clear();
57340500039 2:6b2526c99e5c 546 while(1){
57340500039 2:6b2526c99e5c 547
57340500039 2:6b2526c99e5c 548 //print map[][] to 0,1
57340500039 2:6b2526c99e5c 549 for(i=0;i<num;i++){
57340500039 2:6b2526c99e5c 550 if(i==now) input[i/width][i%width] = 1;
57340500039 2:6b2526c99e5c 551 else if(car[i/width][i%width]!=0) input[i/width][i%width] = 1;
57340500039 2:6b2526c99e5c 552 else input[i/width][i%width] = 0;
57340500039 2:6b2526c99e5c 553 }
57340500039 2:6b2526c99e5c 554
57340500039 2:6b2526c99e5c 555 //change to new Map
57340500039 2:6b2526c99e5c 556 p = 0;
57340500039 2:6b2526c99e5c 557 for(i=0;i<72;i++) output[i] = 0;
57340500039 2:6b2526c99e5c 558 for(i=0;i<3;i++){
57340500039 2:6b2526c99e5c 559 for(j=0;j<24;j++){
57340500039 2:6b2526c99e5c 560 for(k=7;k>=0;k--){
57340500039 2:6b2526c99e5c 561 output[p] = output[p]*2 + input[i*8+k][j];
57340500039 2:6b2526c99e5c 562 printf("%d ",input[i*8+7-k][j]);
57340500039 2:6b2526c99e5c 563 }
57340500039 2:6b2526c99e5c 564 p++;
57340500039 2:6b2526c99e5c 565 }
57340500039 2:6b2526c99e5c 566 }
57340500039 2:6b2526c99e5c 567 joy.LCD_clear();
57340500039 2:6b2526c99e5c 568 joy.LCD_draw_bmp_pixel(0,0,output,high,width);
57340500039 2:6b2526c99e5c 569
57340500039 2:6b2526c99e5c 570
57340500039 2:6b2526c99e5c 571 //find path
57340500039 2:6b2526c99e5c 572 c=joy.LCD_joystick();
57340500039 2:6b2526c99e5c 573 switch (c){
57340500039 2:6b2526c99e5c 574 case 'a': path=-1; break;
57340500039 2:6b2526c99e5c 575 case 'd': path=1; break;
57340500039 2:6b2526c99e5c 576 case 'w': path=-width; break;
57340500039 2:6b2526c99e5c 577 case 's': path=width; break;
57340500039 2:6b2526c99e5c 578 default : path=0;
57340500039 2:6b2526c99e5c 579 }
57340500039 2:6b2526c99e5c 580
57340500039 2:6b2526c99e5c 581 for(i=1;i<high-2;i++){
57340500039 2:6b2526c99e5c 582 if(i%2==0){ // <<<
57340500039 2:6b2526c99e5c 583 temp = car[i][0];
57340500039 2:6b2526c99e5c 584 for(j=0;j<width-1;j++) car[i][j] = car[i][j+1];
57340500039 2:6b2526c99e5c 585 car[i][width-1] = temp;
57340500039 2:6b2526c99e5c 586 }else{ // >>>
57340500039 2:6b2526c99e5c 587 temp = car[i][width-1];
57340500039 2:6b2526c99e5c 588 for(j=width-1;j>0;j--) car[i][j] = car[i][j-1];
57340500039 2:6b2526c99e5c 589 car[i][0] = temp;
57340500039 2:6b2526c99e5c 590 }
57340500039 2:6b2526c99e5c 591 }//car walk
57340500039 2:6b2526c99e5c 592
57340500039 2:6b2526c99e5c 593 if(path*path==1){ //L,R
57340500039 2:6b2526c99e5c 594 if(now+path<0){
57340500039 2:6b2526c99e5c 595 if((now+width)/width < (now+width+path)/width) now -= width;
57340500039 2:6b2526c99e5c 596 else if((now+width)/width>(now+width+path)/width) now += width;
57340500039 2:6b2526c99e5c 597 }else{
57340500039 2:6b2526c99e5c 598 if((now)/width<(now+path)/width) now -= width;
57340500039 2:6b2526c99e5c 599 else if((now)/width>(now+path)/width) now += width;
57340500039 2:6b2526c99e5c 600 }
57340500039 2:6b2526c99e5c 601 }
57340500039 2:6b2526c99e5c 602
57340500039 2:6b2526c99e5c 603 now+=path;
57340500039 2:6b2526c99e5c 604
57340500039 2:6b2526c99e5c 605 if(isWin==1) break;
57340500039 2:6b2526c99e5c 606 if(car[now/width][now%width]==-2) isWin = 1;
57340500039 2:6b2526c99e5c 607 else if(car[now/width][now%width]==-1) now-=path;
57340500039 2:6b2526c99e5c 608 else if(car[now/width][now%width]==1) break;
57340500039 2:6b2526c99e5c 609
57340500039 2:6b2526c99e5c 610 path = 0;
57340500039 2:6b2526c99e5c 611
57340500039 2:6b2526c99e5c 612
57340500039 2:6b2526c99e5c 613 wait_ms((maxLvl - lvl+1)*200);
57340500039 2:6b2526c99e5c 614 }
57340500039 2:6b2526c99e5c 615 if(isWin){
57340500039 2:6b2526c99e5c 616 win();
57340500039 2:6b2526c99e5c 617 wait(2);
57340500039 2:6b2526c99e5c 618 return 1;
57340500039 2:6b2526c99e5c 619 }
57340500039 2:6b2526c99e5c 620
57340500039 2:6b2526c99e5c 621 lose();
57340500039 2:6b2526c99e5c 622 wait(2);
57340500039 2:6b2526c99e5c 623
57340500039 2:6b2526c99e5c 624 return 0;
57340500039 2:6b2526c99e5c 625 }
57340500039 2:6b2526c99e5c 626 int menu(int n, char *input[]){
57340500039 2:6b2526c99e5c 627 wait_ms(100);
57340500039 2:6b2526c99e5c 628 int i;
57340500039 2:6b2526c99e5c 629 int mode = 0;
57340500039 2:6b2526c99e5c 630 char c;
57340500039 2:6b2526c99e5c 631 while(1){
57340500039 2:6b2526c99e5c 632 joy.LCD_clear();
57340500039 2:6b2526c99e5c 633 for(i=0;i<n;i++){
57340500039 2:6b2526c99e5c 634 if(mode==i){
57340500039 2:6b2526c99e5c 635 joy.LCD_write_string(0,i,input[i],1);
57340500039 2:6b2526c99e5c 636 }else{
57340500039 2:6b2526c99e5c 637 joy.LCD_write_string(0,i,input[i],0);
57340500039 2:6b2526c99e5c 638 }
57340500039 2:6b2526c99e5c 639 }
57340500039 2:6b2526c99e5c 640
57340500039 2:6b2526c99e5c 641
57340500039 2:6b2526c99e5c 642 c=joy.LCD_joystick();
57340500039 2:6b2526c99e5c 643 if(c=='r') break;
57340500039 2:6b2526c99e5c 644 switch(c){
57340500039 2:6b2526c99e5c 645 case 'u': if(mode!=0) mode--;
57340500039 2:6b2526c99e5c 646 break;
57340500039 2:6b2526c99e5c 647 case 'd': if(mode!=n-1) mode++;
57340500039 2:6b2526c99e5c 648 break;
57340500039 2:6b2526c99e5c 649 case 'l': return -1;
57340500039 2:6b2526c99e5c 650 break;
57340500039 2:6b2526c99e5c 651 }
57340500039 2:6b2526c99e5c 652 wait_ms(200);
57340500039 2:6b2526c99e5c 653 }
57340500039 2:6b2526c99e5c 654 wait_ms(200);
57340500039 2:6b2526c99e5c 655 return mode;
57340500039 2:6b2526c99e5c 656 }