Zitat Zitat von Dasive
Miit meinem Programm, dachte da sei die Fehlerchance gering:
Code:
#include "RP6RobotBaseLib.h"

void RobotBase_initialisieren (void){
  initRobotBase();
  writeString_P("RobotBase initialisiert\n");
}

void Motorkomponenten_starten (void){
  powerON();
  writeString_P("Energie fuer Motorenkomponenten freigegeben\n");
}

void LEDs_pruefen(void){
  int LEDs_angeschaltet = 0;
  while(LEDs_angeschaltet < 3)
  {
    statusLEDs.LED1 = true;
    statusLEDs.LED4 = true;
    updateStatusLEDs();
    mSleep(100);
    statusLEDs.LED2 = true;
    statusLEDs.LED5 = true;
    updateStatusLEDs();
    mSleep(100);
    statusLEDs.LED3 = true;
    statusLEDs.LED6 = true;
    updateStatusLEDs();
    mSleep(100);
  
    statusLEDs.LED1 = false;
    statusLEDs.LED4 = false;
    updateStatusLEDs();
    mSleep(100);
    statusLEDs.LED2 = false;
    statusLEDs.LED5 = false;
    updateStatusLEDs();
    mSleep(100);
    statusLEDs.LED3 = false;
    statusLEDs.LED6 = false;
    updateStatusLEDs();
    mSleep(100);
	LEDs_angeschaltet = LEDs_angeschaltet +1;
  }
  
  int Alle_LEDs_angeschaltet = 0;
  while(Alle_LEDs_angeschaltet < 3)
  {
    statusLEDs.LED1 = true;
	statusLEDs.LED2 = true;
	statusLEDs.LED3 = true;
	statusLEDs.LED4 = true;
	statusLEDs.LED5 = true;
	statusLEDs.LED6 = true;
	updateStatusLEDs();
	mSleep(100);
	
	statusLEDs.LED1 = false;
	statusLEDs.LED2 = false;
	statusLEDs.LED3 = false;
	statusLEDs.LED4 = false;
	statusLEDs.LED5 = false;
	statusLEDs.LED6 = false;
	updateStatusLEDs();
	mSleep(100);
	Alle_LEDs_angeschaltet = Alle_LEDs_angeschaltet +1;
  }
  writeString_P("LEDs geprueft\n");
}

void LED_Zustaende_ausgeben(void){
  if(statusLEDs.LED1)
    writeString_P(" LED 1: An, ");
  else
	writeString_P(" LED 1: Aus, ");
	
  if(statusLEDs.LED2)
    writeString_P("LED 2: An, ");
  else
	writeString_P("LED 2: Aus, ");
	
  if(statusLEDs.LED3)
    writeString_P("LED 3: An, ");
  else
	writeString_P("LED 3: Aus, ");
	
  if(statusLEDs.LED4)
    writeString_P("LED 4: An, ");
  else
	writeString_P("LED 4: Aus, ");
	
  if(statusLEDs.LED5)
    writeString_P("LED 5: An, ");
  else
	writeString_P("LED 5: Aus, ");
	
  if(statusLEDs.LED6)
    writeString_P("LED 6: An\n");
  else
	writeString_P("LED 6: Aus\n");
}
void Bumper_Zustaende_ausgeben(void){
  task_Bumpers();
  if(bumper_left)
    writeString_P(" Linker Bumper: aktiv ,");
  else
    writeString_P(" Linker Bumper: inaktiv ,");
	
  if(bumper_right)
    writeString_P("Rechter Bumper: aktiv\n");
  else
    writeString_P("Rechter Bumper: inaktiv\n");
}
void ACS_Zustaende_ausgeben(void){
  setACSPwrLow();
  task_ACS();
  if (obstacle_left == true && obstacle_right == true)
    writeString_P(" Hinderniss nahe vorne:   ja, ");
  else
    writeString_P(" Hinderniss nahe vorne:   nein, ");
	
  if(obstacle_left == true)
    writeString_P("Hinderniss nahe links:   ja, ");
  else
    writeString_P("Hinderniss nahe links:   nein, ");
	
  if(obstacle_right == true)
    writeString_P("Hinderniss nahe rechts:   ja\n");
  else
    writeString_P("Hinderniss nahe rechts:   nein\n");
	
  mSleep(50);	
  setACSPwrMed();
  task_ACS();
  if (obstacle_left == true && obstacle_right == true)
    writeString_P(" Hinderniss mittel vorne: ja, ");
  else
    writeString_P(" Hinderniss mittel vorne: nein, ");
	
  if(obstacle_left == true)
    writeString_P("Hinderniss mittel links: ja, ");
  else
    writeString_P("Hinderniss mittel links: nein, ");
	
  if(obstacle_right == true)
    writeString_P("Hinderniss mittel rechts: ja\n");
  else
    writeString_P("Hinderniss mittel rechts: nein\n");
	
  mSleep(50);	
  setACSPwrHigh();
  task_ACS();
  if (obstacle_left == true && obstacle_right == true)
    writeString_P(" Hinderniss weit vorne:   ja, ");
  else
    writeString_P(" Hinderniss weit vorne:   nein, ");
	
  if(obstacle_left == true)
    writeString_P("Hinderniss weit links:   ja, ");
  else
    writeString_P("Hinderniss weit links:   nein, ");
	
  if(obstacle_right == true)
    writeString_P("Hinderniss weit rechts:   ja\n");
  else
    writeString_P("Hinderniss weit rechts:   nein\n");
	
  mSleep(50);	
  setACSPwrOff();
}
void Zustaende_ausgeben(void){
  writeString_P("Zustaende:\n");
  LED_Zustaende_ausgeben();
  Bumper_Zustaende_ausgeben();
  ACS_Zustaende_ausgeben();
}

void Fahre_Rueckwaerts(int Distanz)
{
  
}
void Bumper_beruehrt(void) {
    if (bumper_left == true && bumper_right == true)
	{
	}
	else if(bumper_left)
	{
	}
	else
	{
	}
} 
int main (void)
{
  RobotBase_initialisieren();
  Motorkomponenten_starten();
  LEDs_pruefen();
  Zustaende_ausgeben();
  BUMPERS_setStateChangedHandler(Bumper_beruehrt); 
  
  moveAtSpeed(70,70); 
   
  while(true)
  {
    task_RP6System();
  }
  
  return 0;
}
Folgendes:

Die Funktionen, die aktiv dein ACS und deine Bumper überprüfen werden nur EIN EINZIGES MAL aufgerufen, nämlich direkt bei Start.

Die einzige Funktion die öfters aufgerufen wird ist: bumper_beruehrt.
Allerdings ist diese Funktion quasi leer und macht dementsprechend nichts.

Alles was öfters aufgerufen werden soll, muss in die while(true)-Schleife.

Noch was: Du überprüfst deine Variablen immer auf == true. Das würde ich nicht machen. Du kannst auch einfach so prüfen: if(obstacle_left).
Das ganze hat einen Grund: C kennt true und false nicht, eine bool'sche Variable gibt es nicht.
true und false sind in der Bibliothek vom RP6 definiert, und zwar so:
Code:
// Boolean:
#define true 1
#define false 0
#define TRUE 1
#define FALSE 0
Da die Variablen wie obstacle oder bumper aber auch größere Zahlen als 1 annehmen können, falls z.B. der Bumper gedrückt ist, klappt die Abfrage nicht.

Du prüfst dann quasi folgendes:
Code:
if(64 ==1)
Das wird natürlich niemals klappen, obwohl der Bumper eigentlich gedrückt war.