Code:
/*
* ****************************************************************************
* RP6 ROBOT SYSTEM - RP6 CONTROL M32 Examples
* ****************************************************************************
* Example: Christmas
* Author(s): Dirk
* ****************************************************************************
* Description:
* This program for RP6 Control plays the song Jingle Bells
* and shows a Christmas tree on the terminal.
*
* ############################################################################
* The Robot does NOT move in this example! You can simply put it on a table
* next to your PC and you should connect it to the PC via the USB Interface!
* ############################################################################
* ****************************************************************************
*/
/*****************************************************************************/
// Includes:
#include "RP6ControlLib.h" // The RP6 Control Library.
// Always needs to be included!
/*****************************************************************************/
// Defines:
// Define tone frequencies (well temperament):
// Great Octave
#define Tone_H 2 //123Hz
// Small Octave
#define Tone_c 16 //131Hz
#define Tone_cis 30 //139Hz
#define Tone_d 42 //147Hz
#define Tone_dis 54 //156Hz
#define Tone_e 65 //165Hz
#define Tone_f 76 //175Hz
#define Tone_fis 86 //185Hz
#define Tone_g 96 //196Hz
#define Tone_gis 105 //208Hz
#define Tone_a 113 //220Hz
#define Tone_ais 121 //233Hz
#define Tone_h 128 //247Hz
// ' Octave
#define Tone_C1 136 //262Hz
#define Tone_Cis1 142 //277Hz
#define Tone_D1 149 //294Hz
#define Tone_Dis1 155 //311Hz
#define Tone_E1 160 //330Hz
#define Tone_F1 166 //349Hz
#define Tone_Fis1 171 //370Hz
#define Tone_G1 175 //392Hz
#define Tone_Gis1 180 //415Hz
#define Tone_A1 184 //440Hz
#define Tone_Ais1 188 //466Hz
#define Tone_H1 192 //494Hz
// '' Octave
#define Tone_C2 195 //523Hz
#define Tone_Cis2 199 //554Hz
#define Tone_D2 202 //587Hz
#define Tone_Dis2 205 //622Hz
#define Tone_E2 208 //659Hz
#define Tone_F2 210 //698Hz
#define Tone_Fis2 213 //740Hz
#define Tone_G2 215 //784Hz
#define Tone_Gis2 217 //831Hz
#define Tone_A2 219 //880Hz
#define Tone_Ais2 221 //932Hz
#define Tone_H2 223 //988Hz
// ''' Octave
#define Tone_C3 225 //1047Hz
#define Tone_Cis3 227 //1109Hz
#define Tone_D3 228 //1175Hz
#define Tone_Dis3 230 //1245Hz
#define Tone_E3 231 //1319Hz
#define Tone_F3 233 //1397Hz
#define Tone_Fis3 234 //1480Hz
#define Tone_G3 235 //1568Hz
#define Tone_Gis3 236 //1661Hz
#define Tone_A3 237 //1760Hz
#define Tone_Ais3 238 //1865Hz
#define Tone_H3 239 //1976Hz
// '''' Octave
#define Tone_C4 240 //2093Hz
#define Tone_Cis4 241 //2217Hz
#define Tone_D4 242 //2349Hz
#define Tone_Dis4 242 //2489Hz
#define Tone_E4 243 //2637Hz
#define Tone_F4 244 //2794Hz
#define Tone_Fis4 244 //2960Hz
#define Tone_G4 245 //3136Hz
#define Tone_Gis4 246 //3322Hz
#define Tone_A4 246 //3520Hz
#define Tone_Ais4 247 //3729Hz
#define Tone_H4 247 //3951Hz
// ''''' Octave
#define Tone_C5 248 //4186Hz
// Beats per minute (BPM):
#define Largo 50
#define Larghetto 63
#define Adagio 71
#define Andante 92
#define Moderato 114
#define Allegro 144
#define Presto 188
/*****************************************************************************/
// Variables:
uint16_t T_1; // Whole tone
uint16_t T_2; // Semitone (halftone)
uint16_t T_4; // Quarter tone
uint16_t T_8; // Quaver (eigth note)
uint16_t T_16; // Semiquaver
uint16_t T_32; // Demisemiquaver (thirty-second note)
/*****************************************************************************/
// Functions:
/**
* SET SPEED
*
* Input: Speed [BPM]
* OR Speed [Adagio] (= 71 BPM)
*
*/
void setSpeed(uint16_t bpm)
{
T_4 = 60000 / bpm;
T_1 = 4 * T_4;
T_2 = 2 * T_4;
T_8 = T_4 / 2;
T_16 = T_4 / 4;
T_32 = T_4 / 8;
}
/**
* PLAY JINGLE BELLS
*
*/
void jingle_bells(void)
{
setSpeed(Allegro); // Set 144 BPM
setLEDs(0b0010);
sound(Tone_E1,T_4, 0);
sound(Tone_E1,T_4, 0);
sound(Tone_E1,T_2, 0);
sound(Tone_E1,T_4, 0);
sound(Tone_E1,T_4, 0);
sound(Tone_E1,T_2, 0);
sound(Tone_E1,T_4, 0);
setLEDs(0b1000);
sound(Tone_G1,T_4, 0);
setLEDs(0b0001);
sound(Tone_C1,T_4, 0);
setLEDs(0b0010);
sound(Tone_D1,T_4, 0);
setLEDs(0b0100);
sound(Tone_E1,T_1, 0);
setLEDs(0b1000);
sound(Tone_F1,T_4, 0);
sound(Tone_F1,T_4, 0);
sound(Tone_F1,T_4, 0);
sound(Tone_F1,T_4, 0);
sound(Tone_F1,T_4, 0);
setLEDs(0b0100);
sound(Tone_E1,T_4, 0);
sound(Tone_E1,(T_4 + T_8), 0);
sound(Tone_E1,T_8, 0);
sound(Tone_E1,T_4, 0);
setLEDs(0b0010);
sound(Tone_D1,T_4, 0);
sound(Tone_D1,T_4, 0);
setLEDs(0b0100);
sound(Tone_E1,T_4, 0);
setLEDs(0b0010);
sound(Tone_D1,T_2, 0);
setLEDs(0b1000);
sound(Tone_G1,T_2, 0);
setLEDs(0b0010);
sound(Tone_E1,T_4, 0);
sound(Tone_E1,T_4, 0);
sound(Tone_E1,T_2, 0);
sound(Tone_E1,T_4, 0);
sound(Tone_E1,T_4, 0);
sound(Tone_E1,T_2, 0);
sound(Tone_E1,T_4, 0);
setLEDs(0b1000);
sound(Tone_G1,T_4, 0);
setLEDs(0b0001);
sound(Tone_C1,T_4, 0);
setLEDs(0b0010);
sound(Tone_D1,T_4, 0);
setLEDs(0b0100);
sound(Tone_E1,T_1, 0);
setLEDs(0b1000);
sound(Tone_F1,T_4, 0);
sound(Tone_F1,T_4, 0);
sound(Tone_F1,T_4, 0);
sound(Tone_F1,T_4, 0);
sound(Tone_F1,T_4, 0);
setLEDs(0b0100);
sound(Tone_E1,T_4, 0);
sound(Tone_E1,T_4, 0);
sound(Tone_E1,T_4, 0);
setLEDs(0b1000);
sound(Tone_G1,T_4, 0);
sound(Tone_G1,T_4, 0);
setLEDs(0b0100);
sound(Tone_F1,T_4, 0);
setLEDs(0b0010);
sound(Tone_D1,T_4, 0);
setLEDs(0b0001);
sound(Tone_C1,(T_4 * 3), T_4);
setLEDs(0b0000);
}
/*****************************************************************************/
// Main function - The program starts here:
int main(void)
{
initRP6Control(); // Always call this first! The Processor will not work
// correctly otherwise.
initLCD(); // Initialize the LC-Display (LCD)
// Always call this before using the LCD!
// Write some text messages to the UART - just like on RP6Base:
writeString_P("\n\n _______________________\n");
writeString_P(" \\| RP6 ROBOT SYSTEM |/\n");
writeString_P(" \\_-_-_-_-_-_-_-_-_-_/\n\n");
// Set the four Status LEDs:
setLEDs(0b1111);
mSleep(500);
setLEDs(0b0000);
showScreenLCD("################", "################");
mSleep(1500);
showScreenLCD("<<RP6 Control>>", "<<LC - DISPLAY>>");
mSleep(2500);
showScreenLCD(" Merry Christmas", "* Jingle Bells *");
writeString_P(" X\n");
writeString_P(" *\n");
writeString_P(" **i\n");
writeString_P(" *****\n");
writeString_P(" *i*****\n");
writeString_P(" *******O*\n");
writeString_P(" ***********\n");
writeString_P(" **O****i*****\n");
writeString_P(" *************i*\n");
writeString_P(" **O*i************\n");
writeString_P(" ***********O****i**\n");
writeString_P(" **i****************O*\n");
writeString_P(" *******O*****i*********\n");
writeString_P(" *****************O*****i*\n");
writeString_P(" ****O**i*******************\n");
writeString_P("**i*******************i******\n");
writeString_P(" & |I|\n");
writeString_P(" [M32] |I|\n");
while(true)
{
mSleep(5000); // Pause 5 seconds
jingle_bells(); // Play melody
}
return 0;
}
Lesezeichen