void oled_clear_screen(){ int i, j; for(i = 0; i < 8; i++){ oled_goto_line(i); for(j = 0; j < 256; j++){ write_d(0b00000000); } } //Jump to first line oled_goto_line(0); }
void oled_welcome(){ oled_clear_screen(); char message1[] = "VELKOMMEN!"; char message2[] = "WELCOME!"; char message3[] = "Willkommen!"; char message4[] = "Bienvenue!"; char message5[] = "Bon bini!"; char message6[] = "Mauya!"; char message7[] = "Welkam!"; oled_goto_line(0); oled_print(message1); oled_goto_line(1); oled_print(message2); oled_goto_line(2); oled_print(message3); oled_goto_line(3); oled_print(message4); oled_goto_line(4); oled_print(message5); oled_goto_line(5); oled_print(message6); oled_goto_line(6); oled_print(message7); _delay_ms(1000); }
void display_highscore_list(uint8_t offset) { // Print text to OLED oled_clear(); oled_goto_line(offset); oled_goto_column(0); oled_print_p(PSTR("Highscore list")); for(int i = 0; i < HIGHSCORE_LENGTH; i++) { oled_goto_line(2+offset+i); oled_goto_column(0); for (int j = 0; j < NAME_LENGTH; j++) { oled_putchar(highscore_list[i].name[j]); } oled_print(" "); oled_print(uint16_to_str(highscore_list[i].score)); } }
void oled_game_over(){ oled_clear_screen(); sound_play(GAMEOVER); //Play game over music char message1[] = "GAME OVER"; //char message2[] = "YOU DIED"; oled_goto_line(3); oled_changeColumn(2); oled_print(message1); _delay_ms(3000); sound_play(SILENCE); //prevent looping _delay_ms(1000); }
highscore_element_t enter_initials(uint16_t score) { highscore_element_t new_score; int8_t set_char = 0; uint8_t iter = 0; // Print text to OLED oled_clear(); oled_goto_line(0); oled_goto_column(0); oled_print_p(PSTR("Your score ")); oled_print(uint16_to_str(score)); oled_goto_line(2); oled_goto_column(0); oled_print_p(PSTR("Enter you initials")); oled_goto_line(6); oled_goto_column(0); oled_print_p(PSTR("Press left button when finished")); //Recently obtained score new_score.score = score; //Initial initials new_score.name[0] = 'A'; new_score.name[1] = 'A'; new_score.name[2] = 'A'; //Stay in the enter_initials menu until left slider button is pushed while (!SLIDER_left_button()) { if (JOY_getDirection() == UP) { if (++iter > SET_NAME_DELAY) { iter = 0; //Increment selected initial if (set_char == 0) { new_score.name[0]--; } else if (set_char == 1) { new_score.name[1]--; } else { new_score.name[2]--; } //Check for under-roll if (new_score.name[set_char] < 'A') new_score.name[set_char] = 'Z'; } } else if (JOY_getDirection() == DOWN) { if (++iter > SET_NAME_DELAY) { iter = 0; //Increment selected initial if (set_char == 0) { new_score.name[0]++; } else if (set_char == 1) { new_score.name[1]++; } else { new_score.name[2]++; } //Check for over-roll if (new_score.name[set_char] > 'Z') new_score.name[set_char] = 'A'; } } else if (JOY_getDirection() == LEFT) { if (++iter > SET_NAME_DELAY) { iter = 0; //Change which initial to edit set_char--; // Check for under-roll if (set_char < 0) set_char = NAME_LENGTH-1; } } else if (JOY_getDirection() == RIGHT) { if (++iter > SET_NAME_DELAY) { iter = 0; //Change which initial to edit set_char++; // Check for over-roll if (set_char > NAME_LENGTH-1) set_char = 0; } } //if change, update screen if(iter == 0) { oled_goto_line(3); oled_goto_column(0); for (int i = 0; i < NAME_LENGTH; i++) { if (set_char == i) { oled_putchar_underscore(new_score.name[i]); } else { oled_putchar(new_score.name[i]); } } } _delay_ms(10); } return new_score; }
void oled_submenu2(){ volatile position joy_pos; joy_pos.button_pressed = 150; oled_clear_screen(); /*FIRST MENU*/ // header char header[] = "YOU ARE TRAPPED!"; // entry one char entry1[] = "NEVER"; // entry two char entry2[] = "GONNA"; // entry three char entry3[] = "GIVE YOU UP"; // arrow starts on entry one. Movement of joystick along Y axis changes this int arrow = menu_entry_one; int prev_arrow; int navigation_counter = 999; int started = 0; //Define menu pointer oled_pos(menu_entry_one, arrow_column); oled_print("<<"); sound_play(ROLL); while(!started){ oled_goto_line(menu_header); oled_print(header); oled_goto_line(menu_entry_one); oled_print(entry1); oled_goto_line(menu_entry_two); oled_print(entry2); oled_goto_line(menu_entry_three); oled_print(entry3); if(joystickDirY() != NEUTRAL){ navigation_counter++; } else{ navigation_counter = 1; } if(navigation_counter % 100 == 0){ prev_arrow = arrow; if(joystickDirY() == UP){ if(arrow == menu_entry_one){ arrow = menu_entry_three; } else{ arrow--; } } else if(joystickDirY() == DOWN){ if(arrow == menu_entry_three){ arrow = menu_entry_one; } else{ arrow++; } } oled_goto_line(prev_arrow); oled_clear_line(); oled_goto_line(arrow); oled_changeColumn(arrow_column); oled_print("<<"); oled_changeColumn(0); navigation_counter++; } //Handle button presses joy_pos = joystickPos(); if(joy_pos.button_pressed < button_margin){ while(joy_pos.button_pressed < button_margin){ //Prevent button spam joy_pos = joystickPos(); } started = 1; button_pressed = 0; } } return 0; }
int oled_submenu1(){ volatile position joy_pos; joy_pos.button_pressed = 150; oled_clear_screen(); /*FIRST MENU*/ // header char header[] = "MUSIC MENU"; // entry one char entry1[] = "POKEMON"; // entry two char entry2[] = "SUPER MARIO"; // entry three char entry3[] = "ZELDA"; // arrow starts on entry one. Movement of joystick along Y axis changes this int arrow = menu_entry_one; int prev_arrow; int navigation_counter = 999; int started = 0; //Define menu pointer oled_pos(menu_entry_one, arrow_column); oled_print("<<"); sound_play(POKEMON); while(!started){ oled_goto_line(menu_header); oled_print(header); oled_goto_line(menu_entry_one); oled_print(entry1); oled_goto_line(menu_entry_two); oled_print(entry2); oled_goto_line(menu_entry_three); oled_print(entry3); if(joystickDirY() != NEUTRAL){ navigation_counter++; } else{ navigation_counter = 1; } if(navigation_counter % 100 == 0){ prev_arrow = arrow; if(joystickDirY() == UP){ if(arrow == menu_entry_one){ arrow = menu_entry_three; } else{ arrow--; } } else if(joystickDirY() == DOWN){ if(arrow == menu_entry_three){ arrow = menu_entry_one; } else{ arrow++; } } //Let user listen to currently selected song if(arrow == menu_entry_one){ sound_play(POKEMON); } else if(arrow == menu_entry_two){ sound_play(MARIO); } else if(arrow == menu_entry_three){ sound_play(ZELDA); } else { sound_play(ROLL); } oled_goto_line(prev_arrow); oled_clear_line(); oled_goto_line(arrow); oled_changeColumn(arrow_column); oled_print("<<"); oled_changeColumn(0); navigation_counter++; } //Handle button presses joy_pos = joystickPos(); if(joy_pos.button_pressed < button_margin){ while(joy_pos.button_pressed < button_margin){ //Prevent button spam joy_pos = joystickPos(); } if(arrow == menu_entry_one){ ingame_song = POKEMON; } else if(arrow == menu_entry_two){ ingame_song = MARIO; } else if(arrow == menu_entry_three){ ingame_song = ZELDA; } started = 1; button_pressed = 0; } } return 0; }
int oled_navigate(){ volatile position joy_pos; joy_pos.button_pressed = 150; oled_clear_screen(); /*FIRST MENU*/ // header char header[] = "MENU"; // entry one char entry1[] = "Start game"; // entry two char entry2[] = "Change music"; // entry three char entry3[] = "DO NOT PRESS!"; // arrow starts on entry one. Movement of joystick along Y axis changes this int arrow = menu_entry_one; int prev_arrow; int navigation_counter = 999; int started = 0; //Define menu pointer oled_pos(menu_entry_one, arrow_column); oled_print("<<"); sound_play(MENU); while(!started){ oled_goto_line(menu_header); oled_print(header); oled_goto_line(menu_entry_one); oled_print(entry1); oled_goto_line(menu_entry_two); oled_print(entry2); oled_goto_line(menu_entry_three); oled_print(entry3); if(joystickDirY() != NEUTRAL){ navigation_counter++; } else{ navigation_counter = 1; } if(navigation_counter % 100 == 0){ prev_arrow = arrow; if(joystickDirY() == UP){ if(arrow == menu_entry_one){ arrow = menu_entry_three; } else{ arrow--; } } else if(joystickDirY() == DOWN){ if(arrow == menu_entry_three){ arrow = menu_entry_one; } else{ arrow++; } } oled_goto_line(prev_arrow); oled_clear_line(); oled_goto_line(arrow); oled_changeColumn(arrow_column); oled_print("<<"); oled_changeColumn(0); navigation_counter++; } //Handle button presses joy_pos = joystickPos(); if(joy_pos.button_pressed < button_margin){ while(joy_pos.button_pressed < button_margin){ //Prevent button spam joy_pos = joystickPos(); } if(arrow == menu_entry_one){ started = 1; //A game request has been received, so we should stop interfacing } else if(arrow == menu_entry_two){ oled_submenu1(); oled_clear_screen(); //Redefine menu pointer oled_goto_line(arrow); oled_changeColumn(arrow_column); oled_print("<<"); oled_changeColumn(0); sound_play(MENU); } else if(arrow == menu_entry_three){ oled_submenu2(); oled_clear_screen(); //Redefine menu pointer oled_goto_line(arrow); oled_changeColumn(arrow_column); oled_print("<<"); oled_changeColumn(0); sound_play(MENU); } button_pressed = 0; } } return 0; }
//Moves to desired line and column void oled_pos(uint8_t row, uint8_t column){ oled_goto_line(row); oled_changeColumn(column); }