Gregor, dat is volgens mij precies wat ik zoek
![:) :)](/media/kunena/emoticons/smile.png)
!
Heb je hem aan boord geïnstalleerd (en zo ja wat zijn je ervaringen)?
en nog belangrijker, wil je de code delen?
Heb je mijn video van een paar posts geleden gezien? Dat is wat ik heb gebouwd. En die code wil ik best delen:
#include <Wire.h>
#include <LSM303.h>
//#include <AverageList.h>
//#include <SoftwareSerial.h>
LSM303 compass;
//SoftwareSerial mySerial(0, 1); // RX, TX
//int rxPin = 0; // RX PIN
//int txPin = 1; // TX PIN
/*
const byte MAX_NUMBER_OF_READINGS = 30;
int storage[MAX_NUMBER_OF_READINGS] = {0};
AverageList<int> list = AverageList<int>( storage, MAX_NUMBER_OF_READINGS );
*/
void setup() {
//pinMode(txPin, OUTPUT);
Serial.begin(4800);
Wire.begin();
compass.init();
compass.enableDefault();
// Calibration values. Use the Calibrate example program to get the values for
// your compass.
compass.m_min.x = -717; compass.m_min.y = -459; compass.m_min.z = -611;
compass.m_max.x = 376; compass.m_max.y = 511; compass.m_max.z = 447;
/* compass.m_min.x = 2047;
compass.m_min.y = 990;
compass.m_min.z = 280;
compass.m_max.x = -360;
compass.m_max.y = -832;
compass.m_max.z = -2175; */
}
/* Oorspronkelijke code
void loop() {
compass.read();
int heading = compass.heading((LSM303::vector){0,-1,0});
Serial.println(heading);
delay(500);
}
*/
/*----------------------------------------------------------------------------
1 2 3 4 5 6
| | | | | |
$--HDG,x.x,x.x,a,x.x,a*hh<CR><LF>
------------------------------------------------------------------------------
Field Number:
1. Magnetic Sensor heading in degrees
2. Magnetic Deviation, degrees
3. Magnetic Deviation direction, E = Easterly, W = Westerly
4. Magnetic Variation degrees
5. Magnetic Variation direction, E = Easterly, W = Westerly
6. Checksum */
char nmeastr[17]; // HCHDG,000.00,,,,*
int checksum;
char hs[6]; // 000.00
int i=1;
char hdtnmea[15]; // HCHDT,000.00,T*
int checksumhdt;
char hdt[6]; // 000.00
void loop() {
strcpy(nmeastr,"HCHDG,");
strcpy(hdtnmea,"HCHDT,");
//dtostrf(FLOAT,WIDTH,PRECSISION,BUFFER);
compass.read();
int heading = compass.heading((LSM303::vector){0,-1,0 }); //1,0,0 will allign North with SFE silkscreen
//int rand = compass.heading((LSM303::vector){0,-1,0});
//Serial.print("Heading list : ");
//Serial.print(heading);
//Serial.println("\t\t");
//int rand = compass.heading((LSM303::vector){0,-1,0});
//Serial.print("Heading list : ");
//Serial.println(heading);
//if (heading > 180)
//{
// heading = heading - 360;
//}
//if (heading != 0)
//{
// list.addValue(heading);
//}
//list.debug("list",Serial); //print contents to serial console
//Serial.print("Average: ");
//Serial.println(list.getAverage());
// dtostrf(compass.heading((LSM303::vector){0,-1,0}), 5, 2, hs);
//dtostrf(list.getAverage(), 5, 2, hs);
dtostrf(heading, 5, 2, hs);
strcat(nmeastr,hs);
strcat(nmeastr,",,,,");
strcpy(hdtnmea,"HCHDT,");
dtostrf(heading, 5, 2, hdt);
strcat(hdtnmea,hdt);
strcat(hdtnmea,",T");
//add a checksum
checksum=0;
for (int n=0; n < strlen(nmeastr); n++) {
checksum ^= nmeastr[n];
}
checksumhdt=0;
for (int n=0; n < strlen(hdtnmea); n++) {
checksumhdt ^= hdtnmea[n];
}
//Print iedere zoveel tellen een $GPGSA-string
// Serial.print("tel : ");
if(i < 30) {
i ++;
}
else
{
Serial.println("$GPGSA,A,3,02,,,07,,09,24,26,,,,,1.6,1.6,1.0*3D");
i=1;
}
/*
Serial.print("$");
Serial.print(nmeastr);
Serial.print("*");
Serial.print(checksum, HEX);
Serial.println();
*/
Serial.print("$");
Serial.print(hdtnmea);
Serial.print("*");
Serial.print(checksumhdt, HEX);
Serial.println();
//Serial.print("\t");
//Serial.println();
/* 5hz == 200 */
delay(400);
}