some sound with music notes and mode switching

This commit is contained in:
bigalex 2012-10-03 23:41:15 +02:00
parent 692b459ce4
commit 92857ec46b
2 changed files with 85 additions and 2 deletions

View File

@ -10,7 +10,71 @@
#include "lib/usart.h"
#include "lib/bughal.h"
#include "lib/util.h"
#include "lib/music.h"
//operartion modes
#define MODE0 0
#define MODE1 1
#define MODE2 2
#define MODE3 3
#define NUM_MODES 4
uint8_t OpMode = 0; //Operation mode
bool ModeChanged = true;
void modeswitch_poll(void){
if (btn_state(BTNST_LUP,BTN_LEFT)){
//opmode -
OpMode = (0 == OpMode) ? (NUM_MODES-1) : (OpMode-1);
ModeChanged = true;
button_clear(BTN_LEFT);
};
if (btn_state(BTNST_LUP,BTN_RIGHT)){
//opmode +
ModeChanged = true;
OpMode = ((NUM_MODES-1) == OpMode) ? 0 : (OpMode+1);
button_clear(BTN_RIGHT);
};
return;
};
void do_mode0(void){
if (ModeChanged){
ModeChanged = false;
music_setNote(NOTE_PAUSE,0); //mute
led_off(LED_L|LED_R);
};
};
void do_mode1(void){
if (ModeChanged){
ModeChanged = false;
music_setNote(NOTE_C,2); //mute
led_off(LED_R);
led_on(LED_L);
};
};
void do_mode2(void){
if (ModeChanged){
ModeChanged = false;
music_setNote(NOTE_C,3); //mute
led_off(LED_L);
led_on(LED_R);
};
};
void do_mode3(void){
if (ModeChanged){
ModeChanged = false;
music_setNote(NOTE_C,4); //mute
led_on(LED_L|LED_R);
};
};
void __attribute__((noreturn))
@ -24,6 +88,7 @@ main(void)
init_motor();
/* software initialisation */
timer_init();
music_init();
/* here the show begins:*/
sei();
@ -36,6 +101,15 @@ main(void)
//do something
//main polling loop;
button_poll();
modeswitch_poll();
switch(OpMode){
case MODE1 : do_mode1(); break;
case MODE2 : do_mode2(); break;
case MODE3 : do_mode3(); break;
default : do_mode0();
}
/*
if (timer_expired(&t)){
//while left button is pressed switch left led on
if (btn_state(BTNST_SDN,BTN_LEFT)|btn_state(BTNST_LDN,BTN_LEFT)){
@ -43,6 +117,11 @@ main(void)
} else {
led_off(LED_L);
};
if (btn_state(BTNST_SUP,BTN_LEFT)){
music_setNote(NOTE_PAUSE,0); //mute
button_clear(BTN_LEFT);
};
//when right button has been pressed short, toggle right led
if (btn_state(BTNST_SUP,BTN_RIGHT)){
if (ledstate_r ==0){
@ -52,6 +131,7 @@ main(void)
ledstate_r = 0;
led_off(LED_R);
};
music_setNote(500,0); //50Hz sound
button_clear(BTN_RIGHT); //this is important, to show the event has been processed
};
//when right button has been pressed long, toggle motor
@ -63,6 +143,7 @@ main(void)
motorstate = 0;
set_motor(MOTOR_OFF);
};
music_setNote(NOTE_B,5); //1000Hz sound
button_clear(BTN_RIGHT); //this is important, to show the event has been processed
};
@ -70,7 +151,7 @@ main(void)
}; //end if timer expired
//USART0_put_uint16(0xA09F);
//USART0_crlf();
*/
}

View File

@ -1 +1,3 @@
#pragma once