radar skrev:Var nog ingen smart ide att skaffa ett arduino om det ska vara så svårt

kanske lika bra att lägga ner.
det är inte så svårt som det kanske verkar i början. Frågan är
vad det är som känns jobbigt?
Att det funkar att skriva till PC:n ger ju dig alla möjligheter att lyckas.
Om du kollar koden så förstår du att genom att skriva så här:
Kod: Markera allt
Serial.print("mitt tal = ");
Serial.print(min_variabel);
Serial.println("");
... så skrivs ett tal ut till PC:n och den börjar sedan på ny rad.
Har du funderat på hur du ska mata in den önskade kursen? Det finns många sätt, och det gäller att välja ett sätt som inte är allt för krångligt. Om du ska ha PC:n ansluten till din Arduino när du är ute med båten kan det funka med att skriva in kurs i PC:n. Annars kan man tänka sig att man har två knappar - en "styrbord" och en "barbord" och så ändrar du kurs genom att klicka eller hålla ner en knapp (som när du ställer en digital klocka)... men det kan man lösa senare. I början räcker det att du lägger in önskad kurs i programmet som en variabel:
Kod: Markera allt
int vill_ha_kurs = 45; // ska hålla 45 grader
Du får ju ut ett fint tal från kompassen, och du har lyckats med det. Då har du redan kommit långt, och det är inte så värst mycket kvar. Men det är ju lite matematik inblandat. Du måste ju mata in en kompassriktning som du vill att båten ska hålla. Denna måste jämföras med siffran du får ut från kompassen. Och då är Icecaps matematiska funderingar kanska bra att ha med sig när man ska göra koden:
Säg att du vill åka 1° och båt

pekar 359°.
Då är differensen (Mål - Verklighet =) -358°... Men lugn, vi kör bara ett par steg mer!
om(Differens > 180) Differens = Differens - 360;
om(Differens < -180) Differens = Differens + 360;
Första steg gör inget i detta fall men andra steget får värdet att bli 2. Låter OK.
Men motsatsen då? 359° och 1°? Detta ger då 358° och första extrasteg får det att bli -2°, andra extrasteg gör inget.
Så det duger fint också och då har du ditt kurs-fel i storlekar om ±180°.
Varför han skriver så mycket är för att förklara hur han tänker för att få fram hur mycket båtens VERKLIGA KURS skiljer sig från DEN ÖNSKADE. Men det är ju mest addition och subtration, så
formeln blir väldigt enkel:
Denna kod lägger du inuti
void loop() direkt efter
Serial.println("");
Kod: Markera allt
/********** MIN EGEN KOD ***********/
/******** BERÄKNAR AVVIKELSE FRÅN ÖNSKAD KURS *****/
avvikelse = kompass - vill_ha_kurs; // nu har vi en avvikelse
if (avvikelse > 180) avvikelse = avvikelse - 360
if (avvikelse < -180) avvikelse = avvikelse + 360;
/* SKRIV UT AVVIKELSE */
Serial.print("Avvikelse = ");
Serial.print(avvikelse);
Serial.println("");
Variablerna kan du deklarera överst i programmet, lämpligtvis efter //VARS:
Kod: Markera allt
int vill_ha_kurs = 45; // önskad kurs i grader
int avvikelse;
Om du inte förstår if-satserna eller variabeldeklarationerna ovan bör du nog läsa lite om C-programmering (eller om Arduino-programmering) för att lära dig de mest grundläggande sakerna. Det är inte så svårt som det ser ut.