| | |
| | | |
| | | //#define CONFIG_ACTV_BEEP |
| | | |
| | | /* Only passive buzzer can play tone */ |
| | | #ifndef CONFIG_ACTV_BEEP |
| | | #define CONFIG_PLAY_LITTLE_STAR |
| | | //#define CONFIG_PLAY_TONE_TEST |
| | | #endif |
| | | |
| | | void play_tone_freq(void); |
| | | void play_little_star(void); |
| | | |
| | | int main(int argc, char *argv[]) |
| | | { |
| | | wiringPiSetup(); |
| | | |
| | | #ifdef CONFIG_PLAY_LITTLE_STAR |
| | | while(1) |
| | | { |
| | | play_little_star(); |
| | | sleep(3); |
| | | } |
| | | #elif (defined CONFIG_PLAY_TONE_TEST) |
| | | while(1) |
| | | { |
| | | play_tone_freq(); |
| | | sleep(3); |
| | | } |
| | | #else |
| | | |
| | | while(1) |
| | | { |
| | |
| | | #endif |
| | | sleep(1); |
| | | } |
| | | #endif |
| | | |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | /*+-----------------------------+ |
| | | *| Turn buzzer on or off API | |
| | | *+-----------------------------+*/ |
| | | |
| | | |
| | | int turn_passive_beep(int cmd, int freq) |
| | | { |
| | | int range; |
| | | |
| | | if(freq<2000 || freq>2500) |
| | | { |
| | | printf("Beep set invalid PWM frequency!\n"); |
| | | return -1; |
| | | } |
| | | |
| | | if(OFF == cmd) |
| | | { |
| | |
| | | } |
| | | else |
| | | { |
| | | |
| | | if(freq<2000 || freq>5000) |
| | | { |
| | | printf("Beep set invalid PWM frequency[%d]!\n", freq); |
| | | return -1; |
| | | } |
| | | |
| | | /* Set GPIO as PWM output mode */ |
| | | pinMode(PWM_PIN, PWM_OUTPUT) ; |
| | | |
| | |
| | | pwmWrite(PWM_PIN, range/2); |
| | | } |
| | | } |
| | | |
| | | |
| | | /* Turn ON/OFF buzzer, Active Buzzer can not set frequency */ |
| | | int turn_active_beep(int cmd) |
| | |
| | | } |
| | | |
| | | |
| | | /*+---------------------------------+ |
| | | *| Play Tone OD,RE,MI....XI,DO1 | |
| | | *+---------------------------------+*/ |
| | | |
| | | enum |
| | | { |
| | | UNUSED=0, |
| | | DO, |
| | | RE, |
| | | MI, |
| | | FA, |
| | | SO, |
| | | LA, |
| | | XI, |
| | | DO1, |
| | | RI1, |
| | | TONE_MAX, |
| | | }; |
| | | |
| | | #define msleep(x) usleep( 1000*(x) ) |
| | | |
| | | static int tone_freq[TONE_MAX]={0, 2093, 2349, 2637, 2794, 3136, 3520, 3952, 4186, 4698 }; |
| | | //static int tone_freq[TONE_MAX]={0, 2000, 2130, 2250, 2360, 2450, 2530, 2620, 2700, 2780}; |
| | | |
| | | static inline void play_tone(int tone, int delay) |
| | | { |
| | | if(tone<DO || tone>RI1) |
| | | return ; |
| | | |
| | | turn_passive_beep(ON, tone_freq[tone]); |
| | | msleep(delay); |
| | | turn_passive_beep(OFF, 0); |
| | | } |
| | | |
| | | void play_tone_freq(void) |
| | | { |
| | | int i; |
| | | |
| | | for(i=DO; i<TONE_MAX; i++) |
| | | { |
| | | play_tone( i, 500 ); |
| | | msleep(500); |
| | | } |
| | | } |
| | | |
| | | |
| | | /*+------------------------------+ |
| | | *| Play song "Little Start" | |
| | | *+------------------------------+*/ |
| | | |
| | | typedef struct tone_s |
| | | { |
| | | int tone; |
| | | int delay_ms; |
| | | |
| | | } tone_t; |
| | | |
| | | #define DEF_DELAY 350 |
| | | static tone_t little_start_notation[]= |
| | | { |
| | | {DO, DEF_DELAY}, |
| | | {DO, DEF_DELAY}, |
| | | {SO, DEF_DELAY}, |
| | | {SO, DEF_DELAY}, |
| | | {LA, DEF_DELAY}, |
| | | {LA, DEF_DELAY}, |
| | | {SO, DEF_DELAY*2}, |
| | | |
| | | {FA, DEF_DELAY}, |
| | | {FA, DEF_DELAY}, |
| | | {MI, DEF_DELAY}, |
| | | {MI, DEF_DELAY}, |
| | | {RE, DEF_DELAY}, |
| | | {RE, DEF_DELAY}, |
| | | {DO, DEF_DELAY*2}, |
| | | |
| | | |
| | | {SO, DEF_DELAY}, |
| | | {SO, DEF_DELAY}, |
| | | {FA, DEF_DELAY}, |
| | | {FA, DEF_DELAY}, |
| | | {MI, DEF_DELAY}, |
| | | {MI, DEF_DELAY}, |
| | | {RE, DEF_DELAY*2}, |
| | | |
| | | |
| | | {SO, DEF_DELAY}, |
| | | {SO, DEF_DELAY}, |
| | | {FA, DEF_DELAY}, |
| | | {FA, DEF_DELAY}, |
| | | {MI, DEF_DELAY}, |
| | | {MI, DEF_DELAY}, |
| | | {RE, DEF_DELAY*2}, |
| | | }; |
| | | |
| | | #define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0])) |
| | | void play_little_star(void) |
| | | { |
| | | int i; |
| | | |
| | | for(i=0; i<ARRAY_SIZE(little_start_notation); i++) |
| | | { |
| | | play_tone(little_start_notation[i].tone, little_start_notation[i].delay_ms); |
| | | msleep(30); |
| | | } |
| | | } |
| | | |
| | | |