guowenxue
2018-10-15 1622a6b71a276e58c9ff19cc9bd7ae876faa4914
update beep code, add play little star support
2 files modified
166 ■■■■■ changed files
modules/c/beep.c 151 ●●●●● patch | view | raw | blame | history
modules/c/led.c 15 ●●●●● patch | view | raw | blame | history
modules/c/beep.c
@@ -32,9 +32,32 @@
//#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)
    {
@@ -52,20 +75,20 @@
#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)
    {
@@ -74,6 +97,13 @@
    }
    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) ;
@@ -91,6 +121,7 @@
        pwmWrite(PWM_PIN, range/2);
    }
}
/* Turn ON/OFF buzzer, Active Buzzer can not set frequency */
int turn_active_beep(int cmd)
@@ -116,3 +147,111 @@
}
/*+---------------------------------+
 *|  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);
    }
}
modules/c/led.c
@@ -31,6 +31,9 @@
#include <wiringPi.h>
#include "led.h"
#define msleep(x) usleep( 1000*(x) )
#define DELAY     500
int main(int argc, char *argv[])
{
@@ -39,19 +42,19 @@
    while(1)
    {
        turn_led(LED_R, ON);
        sleep(1);
        msleep(DELAY);
        turn_led(LED_R, OFF);
        sleep(1);
        msleep(DELAY);
        turn_led(LED_G, ON);
        sleep(1);
        msleep(DELAY);
        turn_led(LED_G, OFF);
        sleep(1);
        msleep(DELAY);
        turn_led(LED_B, ON);
        sleep(1);
        msleep(DELAY);
        turn_led(LED_B, OFF);
        sleep(1);
        msleep(DELAY);
    }
        return 0;