Codigo para juego de aros ultrasonicos utilizando la tarjeta freedom KL25Z
Dependencies: PinDetect_for_KL25Z TextLCD mbed
main.cpp
- Committer:
- rodomnz
- Date:
- 2014-05-11
- Revision:
- 0:5ebac3c273c0
- Child:
- 1:39340990fa3f
File content as of revision 0:5ebac3c273c0:
#include "mbed.h" #include "TextLCD.h" #include "Timer.h" #include "PinDetect.h" Serial pc(USBTX, USBRX); //LCD TextLCD lcd( D2, D3, D4, D5,D6, D7, TextLCD::LCD16x2); //leds BusOut leds(PTC3, PTC4, PTC5, PTC6); // Sensores AnalogIn sensor_1(A0); AnalogIn sensor_2(A2); AnalogIn sensor_3(A4); AnalogIn sensor_4(A1); //pot for velocity of leds AnalogIn pot(A3); float s1,s2,s3,s4; int modo_lectura=0; int points_array[10]; int points_pointer=0; //level_array int level_array[20]; int level_selection=1; Timer timer; int gamemode=0; int contador; int start_mode=0; int i; int show_time=500; int scores_time=0; // Button with antibouncing effect------------------------ PinDetect start_button(PTA13); /*PinDetect levelup(PTD5); PinDetect leveldown(PTD0);*/ PinDetect show_scores(PTD2); //functions----------------------------- void leds_function(int *ptr_randomvalue, int *ptr_busoutvalue); int tiempo_apagado, leds_value; void secuence_generator(int *ptr_level); void start_reset(); void levelupfunction(); void leveldownfunction(); void show_scores_function(); int main() { contador=0; secuence_generator(&level_selection); timer.start(); start_button.attach_deasserted(&start_reset); /*leveldown.attach_deasserted(&levelupfunction); levelup.attach_deasserted(&leveldownfunction);*/ show_scores.attach_deasserted(&show_scores_function); start_button.mode(PullUp); /*leveldown.mode(PullUp); levelup.mode(PullUp);*/ show_scores.mode(PullUp); start_button.setSampleFrequency(); show_scores.setSampleFrequency(); while(1) { while(start_mode==0) {//mode Press Start........................... if((timer.read_ms()>show_time+500) && (timer.read_ms()>scores_time+4000)) { lcd.cls(); contador=0; /*secuence_generator(&level_selection);*/ timer.reset(); lcd.printf("press start \nnivel %i \n", level_selection); secuence_generator(&level_selection); //(pot.read()*1000)+200= (pot.read()*1000)+200; } } while((gamemode==0)&&(start_mode==1)) {//mode show led sequence---------------------- while(timer.read_ms()>(pot.read()*1000)+200) { leds_function(&level_array[contador],&leds_value); leds=leds_value; contador++; timer.reset(); tiempo_apagado=((pot.read()*1000)+200)/2; } while(timer.read_ms()>tiempo_apagado) { tiempo_apagado=tiempo_apagado+(pot.read()*1000)+200; leds=0; if(contador==(level_selection+1)) { gamemode=1; leds=0; contador=0; lcd.cls(); } } } while((gamemode==1)&&(start_mode==1)) { /*s1=sensor_1.read(); s2=sensor_2.read(); s3=sensor_3.read(); s4=sensor_4.read();*/ /*pc.printf("Sensor 1 %f \n", s1); pc.printf("Sensor 2 %f \n", s2); pc.printf("Sensor 3 %f \n", s3); pc.printf("Sensor 4 %f \n\n", s4);*/ while(modo_lectura==0) { s1=sensor_1.read(); s2=sensor_2.read(); s3=sensor_3.read(); s4=sensor_4.read(); if((s1>0.05)&&(s2>0.05)&&(s3>0.05)&&(s4>0.05)) {// verify that theres nothing above leds modo_lectura=1; lcd.printf("Empieza!!\n"); } } while(modo_lectura==1) { s1=sensor_1.read(); s2=sensor_2.read(); s3=sensor_3.read(); s4=sensor_4.read(); if(contador!=0) { lcd.cls(); } if(s1<0.017 && level_array[contador]==1) {// sensor 1 code modo_lectura=0; contador++; lcd.printf("good \n"); } else if(s1<0.017 && level_array[contador]!=1) { lcd.printf("Perdiste \n"); show_time=timer.read_ms(); if(points_pointer==9) { for (i=0; i<9; i++) { points_array[i]=points_array[i+1]; } } else{ points_pointer++; } modo_lectura=0; gamemode=0; contador=0; start_mode=0; level_selection=1; } if(s2<0.017 && level_array[contador]==2) {// sensor 2 code modo_lectura=0; contador++; lcd.printf("good \n"); } else if(s2<0.017 && level_array[contador]!=2) { lcd.printf("perdiste \n"); show_time=timer.read_ms(); if(points_pointer==9) { for (i=0; i<9; i++) { points_array[i]=points_array[i+1]; } } else{ points_pointer++; } modo_lectura=0; gamemode=0; contador=0; start_mode=0; level_selection=1; } if(s3<0.017 && level_array[contador]==3) {// sensor 3 code modo_lectura=0; contador++; lcd.printf("good \n"); } else if(s3<0.017 && level_array[contador]!=3) { lcd.printf("Perdiste \n"); show_time=timer.read_ms(); if(points_pointer==9) { for (i=0; i<9; i++) { points_array[i]=points_array[i+1]; } } else{ points_pointer++; } start_mode=0; modo_lectura=0; gamemode=0; contador=0; level_selection=1; } if(s4<0.017 && level_array[contador]==4) {// sensor 4 code modo_lectura=0; contador++; lcd.printf("good \n"); } else if(s4<0.017 && level_array[contador]!=4) { lcd.printf("Perdiste \n"); show_time=timer.read_ms(); if(points_pointer==7) { for (i=0; i<7; i++) { points_array[i]=points_array[i+1]; } } else{ points_pointer++; } modo_lectura=0; gamemode=0; contador=0; start_mode=0; level_selection=1; } } if(contador>level_selection) {//check if theres winners------------------- lcd.printf("ganaste \n"); gamemode=0; points_array[points_pointer]=points_array[points_pointer] + level_selection*2; lcd.printf("puntos %i",points_array[points_pointer] ); wait(3); level_selection++; secuence_generator(&level_selection); contador=0; } } }//end_of_while(1) }//end_of_int_main //funciones void secuence_generator(int *ptr_level) { int j; srand (time(NULL)); for (j=0; j<=(*ptr_level); j++) { level_array[j]=rand()%4+1; pc.printf(" %i \n",level_array[j]); } } void leds_function(int *ptr_randomvalue, int *ptr_busoutvalue) { switch(*ptr_randomvalue) { case 0: *ptr_busoutvalue=0; break; case 1: *ptr_busoutvalue=1; break; case 2: *ptr_busoutvalue=2; break; case 3: *ptr_busoutvalue=4; break; case 4: *ptr_busoutvalue=8; break; } } void levelupfunction() { level_selection++; start_mode=0; } void leveldownfunction() { level_selection--; start_mode=0; } void start_reset() { start_mode=!start_mode; contador=0; } void show_scores_function(){ lcd.cls(); for (i=0;i<8;i++){ lcd.printf("%i:%i,", i+1,points_array[i]); scores_time=timer.read_ms(); } start_mode=0; }