Hallo RP6v2 Fans!

Einen schönen 3. Advent!

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;
}