Jetzt fehlt nur noch Eliza *laaach
Wie wär's mit einem kleinen Psychiater?
Code:
/* 
 * ****************************************************************************
 * RP6 ROBOT SYSTEM - RP6 CONTROL M32 TESTS
 * ****************************************************************************
 * Example: Doc Z
 * Author(s): Dirk
 * ****************************************************************************
 * Description:
 * This program for RP6 Control is a simple "electronic psychiatrist".
 * It asks questions (German language) and gives you an advice in the end.
 * Years ago a similar BASIC program was "Dr.Z" (K. Menzel, 1984).
 *
 * ############################################################################
 * 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 (1.3beta or higher). 
        // Always needs to be included!
/*****************************************************************************/
// Defines:
#define MAX_TEXTNO 12   // Number of prepared questions in psyTexts()
#define QUESTIONS 8   // Number of asked questions
/*****************************************************************************/
// Variables:
// Reception buffer for the function getInputLine():
char receiveBuffer[UART_RECEIVE_BUFFER_SIZE + 1];
char username[UART_RECEIVE_BUFFER_SIZE + 1];
uint8_t i, rnd, rnd1, rnd2;
/*****************************************************************************/
// Functions:
// UART receive functions:
/**
 * Get chars of an input line from the UART.
 *
 * Returns 0 (false), if the UART receive buffer is empty
 * OR a character of the input line has been received.
 * Returns 1, if the whole input line has been received
 * (with a "new line" character at the end).
 * Returns 2, if the UART receive buffer overflows.
 * The input line is stored in the receiveBuffer array.
 *
 */
uint8_t getInputLine(void)
{static uint8_t buffer_pos = 0;
 if(getBufferLength()) { 
  receiveBuffer[buffer_pos] = readChar();
  if(receiveBuffer[buffer_pos] == '\n') {
   receiveBuffer[buffer_pos] = '\0';
   buffer_pos = 0;
   return 1;
  }
  else if(buffer_pos >= UART_RECEIVE_BUFFER_SIZE) {
   receiveBuffer[UART_RECEIVE_BUFFER_SIZE] = '\0'; 
   buffer_pos = 0;
   return 2;
  }
  buffer_pos++;
 }
 return 0;
}
/**
 * Get a complete input line from the UART.
 *
 * This function waits for a whole input line from the UART.
 * The input line is stored in the receiveBuffer array.
 * The function is blocking until one of the two following
 * conditions occurs:
 * - A "new line" character has been received at the end of
 *   the input line.
 * - The UART receive buffer overflows.
 *
 */
void enterString(void)
{
 while(!getInputLine());
}
/**
 * GET SEED
 *
 * Gets a starting value for srand().
 *
 */
uint16_t get_seed(void)
{
 uint16_t seed = 0;
 uint16_t *p = (uint16_t*) (RAMEND + 1);
 extern uint16_t __heap_start;
 while (p >= &__heap_start + 1)
  seed ^= * (--p);
 return seed;
}
/**
 * PSY TEXTS
 *
 * Shows one of MAX_TEXTNO questions that the "psychiatrist" asks.
 *
 */
void psyTexts(uint8_t textno)
{
 switch (textno) {
  case 1 :
   writeString_P("Erzähl mir mehr!\n");
   break;
  case 2 :
   writeString_P("Fühlst du das schon lange?\n");
   break;
  case 3 :
   writeString_P("Denkst du, das ist vernünftig?\n");
   break;
  case 4 :
   writeString_P("Würden deine Freunde das glauben?\n");
   break;
  case 5 :
   writeString_P("Kannst du damit leben?\n");
   break;
  case 6 :
   writeString_P("Glaubst du, das ist normal?\n");
   break;
  case 7 :
   writeString_P("Was könnte der Grund sein?\n");
   break;
  case 8 :
   writeString_P("Hast du schon darüber gesprochen?\n");
   break;
  case 9 :
   writeString_P("Bist du manchmal ängstlich?\n");
   break;
  case 10 :
   writeString_P("Bist du oft unzufrieden?\n");
   break;
  case 11 :
   writeString_P("Schläfst du gut?\n");
   break;
  case 12 :
   writeString_P("Bist du häufig enttäuscht?\n");
   break;
//  case 13 :
//   writeString_P("...?\n");
//   break;
 }
}
/*****************************************************************************/
// 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");
 writeString_P("Doc Z for RP6 CONTROL!\n"); 
 // Set the four Status LEDs:
 setLEDs(0b1111);
 mSleep(500);
 setLEDs(0b0000);
 showScreenLCD("################", "################");
 mSleep(1500);
 showScreenLCD("<<RP6  Control>>", "<<LC - DISPLAY>>");
 mSleep(2500); 
 showScreenLCD("     Doc Z      ", "  ************  ");
 mSleep(2500);
 clearLCD(); // Clear the whole LCD Screen
 // Play four sounds with the Piezo Beeper on the RP6Control:
 sound(Tone_Cis2, 300, 200);
 sound(Tone_Fis2, 200, 100);
 sound(Tone_Ais2, 100, 100);
 sound(Tone_Dis3, 50, 100);
 writeString_P("\nGuten Tag, ich bin der RP6 Psychiater.\n");
 writeString_P("Wie ist dein Name?\n");
 clearReceptionBuffer(); // Make sure reception Buffer is empty.
 enterString();
 for (i = 0; i <= UART_RECEIVE_BUFFER_SIZE; i++) {
  username[i] = receiveBuffer[i];
 }
 writeString_P("Wie fühlst du dich, ");
 writeString(username);  // Output the user's name as a String
 writeString_P("?\n");
 enterString();
 srand(get_seed());
 for (i = 1; i <= QUESTIONS; i++) {  // Ask QUESTIONS questions
  do {rnd = (rand() % MAX_TEXTNO + 1);} // rnd = [0..MAX_TEXTNO]
  while((rnd == rnd2) || (rnd == rnd1));
  rnd2 = rnd1;      // Don't repeat questions to fast
  rnd1 = rnd;
  psyTexts(rnd);      // Ask a random question
  enterString();      // Get the answer
 }
 mSleep(1500);
 writeString_P("\nIch denke, du machst gute Fortschritte\n");
 writeString_P("bei der Lösung deiner Probleme, ");
 writeString(username);
 writeString_P(".\n\n");
 writeString_P("Bis zum nächsten Mal.\n");
 while(true) {}
 return 0;
}
/******************************************************************************
 * Additional info
 * ****************************************************************************
 * Changelog:
 * - v. 1.0 (initial release) 02.05.2011 by Dirk
 *
 * ****************************************************************************
 */
/*****************************************************************************/
Schäääm ...