OSDN Git Service

Replace samples.
[nxt-jsp/etrobo-atk.git] / nxtOSEK / samples_c / soundtest / soundtest.c
1 /* soundtest.c */\r
2 #include        "math.h"\r
3 \r
4 #include "kernel.h"\r
5 #include "kernel_id.h"\r
6 #include "ecrobot_interface.h"\r
7 \r
8 /* OSEK declarations */\r
9 DeclareCounter(SysTimerCnt);\r
10 DeclareTask(Task1); \r
11 \r
12 /* LEJOS OSEK hook to be invoked from an ISR in category 2 */\r
13 void user_1ms_isr_type2(void)\r
14 {\r
15   StatusType ercd;\r
16 \r
17   ercd = SignalCounter(SysTimerCnt); /* Increment OSEK Alarm Counter */\r
18   if(ercd != E_OK)\r
19   {\r
20     ShutdownOS(ercd);\r
21   }\r
22 }\r
23 \r
24 /* ===============================================================\r
25  * User Tasks go here\r
26  */\r
27 \r
28 /*\r
29  Sound  1   2   3   4   5   6    7    8    9\r
30  B      62 123 247 494 988 1976 3951 7902\r
31  A#     58 117 233 466 932 1865 3729 7458\r
32  A      55 110 220 440 880 1760 3520 7040 14080\r
33  G#     52 104 208 415 831 1661 3322 6644 13288\r
34  G      49  98 196 392 784 1568 3136 6272 12544\r
35  F#     46  92 185 370 740 1480 2960 5920 11840\r
36  F      44  87 175 349 698 1397 2794 5588 11176\r
37  E      41  82 165 330 659 1319 2637 5274 10548\r
38  D#     39  78 156 311 622 1245 2489 4978 9956\r
39  D      37  73 147 294 587 1175 2349 4699 9398\r
40  C#     35  69 139 277 554 1109 2217 4435 8870\r
41  C      33  65 131 262 523 1047 2093 4186 8372\r
42  Note: Frequency is audible from about 31 to 2100 Hertz.\r
43 */\r
44 #define FREQ_MAX  2093 /* C,7 */\r
45 #define FREQ_MIN  31   /* B,0 */\r
46 #define ASCEND    1.059463094F /* 2^(1/12)  */\r
47 #define DESCEND   0.943874313F /* 2^(-1/12) */\r
48 \r
49 double freq = FREQ_MIN;\r
50 double gain = ASCEND;\r
51 \r
52 /* Task1 executed every 10ms */\r
53 TASK(Task1)\r
54 {\r
55   U8 TouchSensorStatus;\r
56   static U8 TouchSensorStatus_old = 0;\r
57   U32 U32_freq;\r
58 \r
59 //  TouchSensorStatus = ecrobot_get_touch_sensor(NXT_PORT_S4);\r
60 //  TouchSensorStatus = ecrobot_is_ENTER_button_pressed();\r
61   TouchSensorStatus = ecrobot_is_RUN_button_pressed();\r
62   if (TouchSensorStatus == 1 && TouchSensorStatus_old == 0)\r
63   {\r
64         U32_freq = (U32)(freq + 0.5); /* rounding */\r
65         sound_freq(U32_freq, 400);\r
66 \r
67         display_clear(0);\r
68         display_goto_xy(0, 0);\r
69         display_string("Freq: ");\r
70         display_unsigned(U32_freq, 0);\r
71         display_update();\r
72 \r
73         if (freq >= FREQ_MAX) gain = DESCEND; \r
74         else if (freq <= FREQ_MIN)      gain = ASCEND;\r
75         freq *= gain;\r
76   }\r
77   TouchSensorStatus_old = TouchSensorStatus;\r
78 \r
79   TerminateTask();\r
80 }\r