Beispielprogramm zur Benutzung der Jagdsignale



int B_Rechts = 0b010;
int B_Links  = 0b001;
int B_Heck   = 0b100;

int frei                = 0;
int crash_rechts        = 1;
int crash_links         = 2;
int crash_vorn          = 3;
int crash_hinten        = 4;
int crash_hinten_rechts = 5;
int crash_hinten_links  = 6;
int robbi_explodiert    = 7;

/* Liest aus welche Bumper ausgeloest haben und */
/* ermittelt daraus die "Unfallstelle".         */  
int crash()
{
  int bumpers = bumper();

  if (bumpers == 0)
    return frei;
  else if (bumpers == (B_Rechts | B_Links))
    return crash_vorn;
  else if (bumpers == B_Rechts)
    return crash_rechts;
  else if (bumpers == B_Links)
    return crash_links;
  else if (bumpers == B_Heck)
    return crash_hinten;
  else if (bumpers == (B_Heck | B_Rechts))
    return crash_hinten_rechts;
  else if (bumpers == (B_Heck | B_Links))
    return crash_hinten_links;
  else
    return robbi_explodiert;
}

/* Berechnet Zufallswert im Bereich [0..range-1] */
int rand(int range)
{
  int rnd = (int)mseconds();
  
  if (rnd >= 0)
    return (rnd % range);
  else
    return (-rnd % range);	
}

void main()
{
  int i, error, cli, action = 0;

  /* int mode ist global als persistente Variable deklariert. */  
  /* Zwischen den Modi 1 und 2 wird durch druecken des        */
  /* Reset-Knopfes gewechselt.                                */

  if ( mode == 1 )
    {
      mode = 2; /* Mode nach dem naechsten Reset wechseln. */

      while (1) /* bis zum naechsten Reset */
	{
	  msleep(1000L); /* 1 Sekunde warten ... */
	  Stosse_ins_Horn(rand(8)); /* ... und schon wieder ein Signal! */
	}
    }
  else if ( mode == 2 )
    {
      mode = 1; /* Mode nach dem naechsten Reset wechseln. */
      
      while(1) /* bis zum naechsten Reset */
	{
	  /* Hinten antippen zum ausloesen des Signals */
	  if(crash() == crash_hinten)
	    {
	      /* Schalterprellen abfangen */
	      msleep(100L); 
	      while(crash());
	      /* Troeh-Roeh */
	      Stosse_ins_Horn(action);
	    } 
	  /* Rechts antippen zum hochzaehlen */
	  if(crash() == crash_rechts) 
	    {
	      /* Schalterprellen abfangen ... */
	      msleep(100L); 
	      while(crash());
	      /* ... und raufzaehlen */
	      printf("%d\n",++action);
	    }
	  /* Links antippen zum runterzaehlen */
	  if(crash() == crash_links)
	    {
	      /* Schalterprellen abfangen ... */
	      msleep(100L);
	      while(crash());
	      /* und runterzaehlen */
	      printf("%d\n",--action);
	    }
	}
    }
  else
    mode = 2; /* Init der Variable mode beim ersten Durchlauf */
}



© Gunnar Mecke, Letzte Änderung: 29.09.97

Zurück zu den Jagdmelodien