Jag håller på och bygger en autopilot till min båt. Den består av en arduino, rodersensor(0,5-4.5V), dubbla reläer NC/NO , digital kompass och en LCD(16,2) samt en tryckknapp för att spara den kurs jag håller just nu.
Jag är nybörjare när det gäller programmering och har kommit till att jag sparar värdet.
nu vill jag ju att
-om differensen är mer än tex -5 grader.
-starta motor åt vänster tills sensorn gått från 2,5v(512) till ca 2V (410)
-stanna motorn
-delay(50*differens)
-starta motorn till höger till sensorn gått till 2,5v(512)
-Stanna motorn.
tvärt om om det är +5grader.
Min kod så här långt.
#include <DSPC01.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
int delaytime=250;
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
DSPC01 dspc01;
const int buttonPin =2;
const int motorhPin=10;
const int motorvPin=11;
int buttonState = 0;
int sensorPin=A0;
int goal=0;
int sensor=0;
int motorh=LOW;
int motorv=LOW;
int diff=0;
void setup()
{
pinMode(buttonPin, INPUT);
pinMode(motorhPin, OUTPUT);
pinMode(motorvPin, OUTPUT);
Serial.begin(115200);
dspc01.begin(A2,A3);
Serial.println("Compass calibration: Rotate twice horizontally, 360 deg in 3 seconds");
dspc01.calibrate_compass();
delay(6000);
lcd.begin(16,2);
}
void loop()
{
Serial.print(" Compass [deg] ");
//delay(delaytime);
dspc01.request_compass();
delay(delaytime);
int kurs=dspc01.compass();
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH)
{
goal=(kurs);}
else
{
goal==0;
}
Serial.println(kurs);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("K");
lcd.setCursor(0,1);
lcd.print("S");
lcd.setCursor(2,0);
lcd.print(kurs);
lcd.setCursor(2,1);
lcd.print(goal);
diff=(goal-kurs);
if (diff> -5{
motorhPin=HIGH;
}
if (sensor=<400);
motorhPin=LOW;
delay(diff*50);
motorvPin=HIGH;
if (sensor)>512;
motorhPin=LOW;
}
Hur får jag motorn att gå tills sensorn uppnått sitt värde? (jag vet att denna kod inte är rätt)
resten kan jag lista ut tror jag

Tacksam om någon har tips.
MVH
Mike gasoline