From 1622a6b71a276e58c9ff19cc9bd7ae876faa4914 Mon Sep 17 00:00:00 2001
From: guowenxue <guowenxue@gmail.com>
Date: Mon, 15 Oct 2018 11:01:49 +0800
Subject: [PATCH] update beep code, add play little star support
---
modules/c/led.c | 15 +++--
modules/c/beep.c | 151 ++++++++++++++++++++++++++++++++++++++++++++++++--
2 files changed, 154 insertions(+), 12 deletions(-)
diff --git a/modules/c/beep.c b/modules/c/beep.c
index 4108b1f..b26011c 100644
--- a/modules/c/beep.c
+++ b/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);
+ }
+}
+
+
diff --git a/modules/c/led.c b/modules/c/led.c
index 8007bcd..514dd85 100644
--- a/modules/c/led.c
+++ b/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;
--
Gitblit v1.9.1