Tankmätaren, "Fuel level", är resistiv, ja. Så det är en i praktiken bara en varierande spänning på den ledaren som anger bränslemängden(0V-5V på x70, med risk för peakar över 5V, så en voltage divider krävs). Så den läses ju enkelt bara genom en analogRead(). Föreslår dock flera samplingar och dra ett snitt på det, då enstaka mätningar kan fladdra rätt mycket pga. gupp eller liknande saker.
Min bränelskalkyl ser ut så här;
Kod: Markera alltif (millis() - lastFuel >= 1000){
float sensorValue = analogRead(A1);
delay(10);
float curFuel = map(sensorValue, 270, 630, 600, 100);
curFuel = curFuel / 10;
if (curFuel < 0.0) {
curFuel = 0.0;
}
if (curFuel > 70.0) {
curFuel = 70.0;
}
totFuel = totFuel + curFuel;
if (countFuel >= 10){
curFuel = totFuel / (countFuel + 1);
fuel = (float)curFuel + (String)"L";
countFuel = 0;
curFuel = 0;
totFuel = 0;
}
else
{
countFuel++;
}
lastFuel = millis();
}
Och det är variabeln "fuel" jag printar på skärmen. Jag kör en långsam sampling på det, en gång i sekunden, och uppdaterar variablen fuel var 10e sek. Går att ha snabbare sampling, men finns inte mycket anledning till det imo. Jag valde också att använda en decimal, inte för att jag tror den är så exakt, men det ser bättre ut
Min beräkning lär dock inte fungera så precist för dig, eftersom den är anpassad för min voltage-divider och 5V-spänning. Men principen bör vara samma.
Värdena på min voltage-divider kommer jag inte ihåg, men dom är ju inte relevanata för dig ändå eftersom min är anpassad för 5V, och du måste ha för 3.3V.
Min går ner i sömnläge av en timer som startar när man vrider av tändningen(satt på 10min har jag för mig), och vaknar igen antingen när man drar på tändningen eller trycker på min rotary encoder som jag styr arduinon med(jag har ju menyer och massa lull-lull i mitt bygge, så styrning krävs :p).
Jag hoppas du laddar upp lite bilder när du börjar montera allt, ska bli intressant att se hur du löser det :)