BlackMizi:
Das rettet mich leider nicht! 
Was haste denn in Schule oder Studium so an Mathe gelernt?
Minimum für so eine Rechnung wäre wohl ein erfolgreich absolvierter "Leistungskurs Mathe" auf einer gymnasialen Oberstufe. Besser wären vielleicht noch ein, zwei Semester Studium in einem ingenieurwissenschaftlichen Fach obendrauf.
Die NMEA-Datensätze bekommst Du ausgelesen, so dass Du die Satellitendaten für Elevation und Azimuth vom GPS-Empfänger bekommst?
Ich habe mal ein paar Beispieldaten in ein Array gepackt und gerechnet:
/*
Example data for 11 satellites in view, received NMEA sentences:
$GPGSV,3,1,11,03,03,111,00,04,15,270,00,06,01,010,00,13,06,292,00*74
$GPGSV,3,2,11,14,25,170,00,16,57,208,39,18,67,296,40,19,40,246,00*74
$GPGSV,3,3,11,22,42,067,42,24,14,311,43,27,05,244,00,,,,*4D
*/
struct sat_t {byte id; byte elevation; int azimuth; byte snr;};
sat_t sats[]={ // satellite data extracted from $GPGSV sentences
{3,03,111,0},
{4,15,270,0},
{6,01,10,0},
{13,06,292,0},
{14,25,170,0},
{16,57,208,39},
{18,67,296,40},
{19,40,246,0},
{22,42,67,42},
{24,14,311,43},
{27,5,244,0},
};
/*
sat_t sats[]={ // some different test data
{3,0,0,00},
{4,0,90,00},
{6,0,180,00},
{13,0,270,00},
{14,85,0,00},
{16,85,90,39},
{18,85,180,40},
{19,85,270,00},
{22,42,67,42},
{24,14,311,43},
{27,5,244,00},
};
*/
#define NUMSATS 11
struct point_t {int x; int y;};
point_t center={100,100}; // Mittelpunkt der Kompassrose
int compassRadius=90; // Radius der Kompassrose
void setup() {
Serial.begin(9600);
Serial.println();
Serial.println("Calculate satellite positions in compass circle:");
Serial.println();
for (int i=0;i<NUMSATS;i++)
{
float fCenterDist=compassRadius;
fCenterDist *= cos(radians(sats[i].elevation));
int satPointX = lround(center.x + fCenterDist * sin(radians(sats[i].azimuth)));
int satPointY = lround(center.y + fCenterDist * cos(radians(sats[i].azimuth)));
Serial.print("Sat ID:\t");Serial.print(sats[i].id);
Serial.print("\tElev:\t");Serial.print(sats[i].elevation);
Serial.print("\tAzim.:\t");Serial.print(sats[i].azimuth);
Serial.print("\tpX:\t");Serial.print(satPointX);
Serial.print("\tpY:\t");Serial.print(satPointY);
Serial.println();
}
}
void loop() {
// put your main code here, to run repeatedly:
}
Die Mittelpunktkoordinaten (100, 100) und der Radius der Kompassrose (90) stehen als Zahlenkonstanten im Quelltext und sind daher leicht anpassbar.
Annahme: Der Nullpunkt (0,0) sei in der linken, unteren Ecke des Bildschirms.
Ausgerechnet werden dann für alle Satellitendaten im Array die Koordinaten der Punkte, an denen diese in der Kompassrose einzuzeichnen wären.
Ohne Gewähr für die Richtigkeit.
Und wenn sich an Deinem Bildschirm der Koordinaten-Nullpunkt (0,0) in der linken oberen Ecke befindet, mußt Du die Koordinaten für den Bildschirm ein wenig umrechnen, sonst erhältst Du eine gespiegelte Ansicht.