Hallo

Die Funktion PrintInteger() macht nichts anderes als einen 16bit-Wert (ohne Beachtung des Vorzeichens) in eine Zeichenkette(=String) mit fünf Zeichen umzuwandeln.

Zu Beginn wird die Zeichenfolge mit "00000" vorbelegt (16bit-Werte sind maximal 5-stellig und gehen bis 65tausendirgendwas oder 2 hoch 16 minus 1). Dann wird vom Wert (in x) 10000 abgezogen solange der Wert größergleich 10000 ist. Gleichzeitig wird in der Zeichenkette die erste Stelle hochgezählt. Das funktioniert weil die ASCII-Werte der Ziffern aufeinanderfolgend sind. Anschließend werden 1000 abgezogen solange der Wert größergleich 1000 ist und die zweite Ziffer in der Zeichenkette wird hochgezählt. Dasselbe dann nochmal mit 100 und 10, der Rest kann dann einfach zur letzen Ziffer addiert werden. Die Zeichenkette ist nun fertig (mit führenden Nullen) und wird mit SerWrite() zum Terminal gesendet. Fertig.

Weitere Anmerkungen:
Der Index des Feldes ldata[] beginnt mit 0 und endet mit 99. Für 50 Wertepaare müßte es deshalb so aussehen:

j=0;
for(i=0;i<50;i++){

Das j kannst du auch sparen:

ldata[2*i]=data[0];
ldata[2*i+1]=data[1];

Oder:

ldata[i]=data[0];
ldata[50+i]=data[1];

Natürlich muß man dann beim Senden den Code entsprechend anpassen....

Mit der orginalen 72kHz-Library sollte die Sleep()-Schleife

49*99*255*(1/72000)=17,2 Sekunden verzögern.

(49 mal i, 99 mal a und 255 mal Sleep)

Gruß

mic