@damaltor
Hallo damaltor, ich glaube, dass Robotik84 die Hell-/Dunkel-Flächen der Odometrie verwuseln möchte. Da wird es etwas knapp, wenn nur alle 10 ms gemessen wird. Allerdings ist dein Vorschlag auf alle Fälle für ASURO-Starter (bist du doch Robotik84?) sehr gut zum üben geeignet.


Hier noch ein kleiner Nachschlag zu dem Speichervolumen.
Ich hatte von unter 1000 Byte Messwerten geschrieben. Dies gilt NUR dann, wenn die ADC-Messung als Byte abgelegt wird. Da die ADC-Wandler aber auch 10 Bit wandeln können, müsstest du schon int-Variablen nehmen und dann wären es nur noch unter 500 Messwerte.
Und jetzt kommt noch rechts und links ins Spiel, also nur noch unter 250 Messwerte.
Wenn dir ein 8-Bit-Ergebnis reicht, kannst du eben die doppelte Datenmenge sammeln.
Als kleine Hilfe ist da z.B. folgendes angegeben:
Code:
#define MAX_MESSWERTE  400
/* Das merkwürdige volatile ist extrem wichtig für Interruptfunktionen! */
volatile unsigned char messdaten [2][MAX_MESSWERTE];  /* 8-Bit */
volatile unsigned int    i; /* Zähler für max. Messwerte */
volatile unsigned char fertig; /* Kann im Hauptprogramm zum prüfen
                                              und dann senden benutzt werden */

/* i und fertig sollten irgendwo im Hauptprogramm vor dem Start des Timers
    initialisiert werden */
i = 0;
fertig = 0;

Interrupt-Funktion-vom-Timer
{
   if (i < MAX_MESSWERTE)
   {
      Hole ODOmetrie-Messwert [links und rechts]
      /* casten (umwandeln) des 16-Bit Messwertes auf 8 bit mit dem
          (unsigned char) */
      messdaten [0][i] = (unsigned char) ADC-Wert von der ODOmetrie[links]
      messdaten [1][i] = (unsigned char) ADC-Wert von der ODOmetrie[rechts]
      i++;
   }
   else
   {
      fertig = 1;
   }
}
Hoffentlich hilft dir das.