Jag håller på med en autopilot till båt som använder ett arduino nano och en cmps12 kompass via I2C.
länk till kompassens datablad: https://www.robot-electronics.co.uk/files/cmps12.pdf
Allting fungerar fint i båten förutom att kompassriktningen ibland ändras, båten kan svänga upp till ca 90grader ibland men kompassriktningen visar samma värde, den flyttar alltså värdet på kursen jag håller.
Jag tänkte försöka ge mig på att kalibrera kompassen men jag blir inte klok på hur jag ska addressera genom I2c för att komma åt att spara kalibreringen!
Har försökt med massa olika koder men har nu gett upp och insett att jag behöver hjälp!
Jag har kommit så långt att jag tror att jag kan läsa ut kalibreringsstatus då jag har sett enstaka nollor ändras till ettor när jag rör kompassen i vissa riktningar men för att vara säker på att jag kan spara kalibreringsvärdena så har jag även försökt radera kalibreringsvärdena med följande kod:
Kod: Markera allt
#include <Wire.h>
#define ADDRESS 0x60
void setup(){
Wire.begin();
Serial.begin(9600);
//while(!Serial);
calibrate();
}
void loop(){
}
void calibrate(){
Serial.println("Radera värden");
delay(1000); //1 second before starting
Serial.println("Start");
Wire.beginTransmission(ADDRESS);
Wire.write(0);
Wire.write(0xF0);
Wire.endTransmission();
delay(20);
Wire.beginTransmission(ADDRESS);
Wire.write(0);
Wire.write(0xF5);
Wire.endTransmission();
delay(20);
Wire.beginTransmission(ADDRESS);
Wire.write(0);
Wire.write(0xF6);
Wire.endTransmission();
delay(20);
Serial.println("klar");
}
Jag skulle behöva en sorts I2C for dummies kurs då jag har läst allt jag kan hitta men ändå inte riktigt förstår hur jag kan läsa / skriva till enskilda register eller hur jag vet hur många bytes jag ska begära från en read?
Någon på detta forum som har tålamod att lära en bilmekaniker om I2c?