Så er jeg kommet en det hvider.
Jeg har fået trip tælleren til at virke ved hastigheder op til 199 km/h så længe jeg kun har en trip tæller i funktion, hvis bække to er i drift så går det fint til hastigheder op til 180 km/h hvis hastigheden ikke er konstant over flere km.
Så har jeg lavet det sådan at den ene trip tæller som skal bruges til split distangerer automatisk nul stiller for vær 20 km for hvis km tallet bliver for stort på de to trip tæller så begynder den ene at halte bag efter ved høje hastigheder.
Efter at jeg har lavet det automatisk nul stillingen for vær 20 km så køre det fint, lavet et test hvor der blev kørt 450 km men den hastighed på 150 km/h uden problemer.
Der er høj hastighed over flere km som giver problemer; så i det virkelige liv bliver det ikke noget problem.
Har også roder med at få udlæsning med komme men fandt til sidste kommandoen som løst det problem.
Men en ting som stadigvæk driller er at når trip tæller starter med at tælle så startet den med !! 0.00 og når den så kommer til 9.99 er det næste tal 10.00 og der får man så et ekstre ciffer, og efter som at positionen på displayet angiver det første ciffer så flytter talle en plads længer til højre ved skift fra 9.99 til 10.00 og et plads yderlige ved 99.99 til 100.00.
jeg har lavet plads nok displayet til de ekstra ciffer men hvis de to trip tæller ikke har sammen antal ciffer så står de to tal ikke over hinanden hvilke ikke er så kønt.
Det man kan gøre er at lave tre placeringer at taller alt efter hvor mange ciffer man har også styre hvilke der bliver brugt med !! if (trip < 99.99 )
Eller er der en smart måde at løse det på
/* TRIPMETER af Stig Hansen
Trip 01 & Trip 02 virker med resat funktion & automatisk reset at trip 02 for vær 20 km
D2 = Taktgiver 01 til Trip 01 som er justerbar op og ned samt reset bar = Takt01 Pull down 10K
D3 = Taktgiver 02 til Trip 02 som er reset bar. = Takt02 Pull down 10K
D4 = Trip 01 juster op = TripOp Pull down 10K
D5 = Trip 01 juster ned = TripNed Pull down 10K
D6 = Trip 01 reset = TripReset01 Pull down 10K
D7 = Trip 02 reset. = TripReset02 Pull down 10K
*/
// Opsætning at displayet
#include <Wire.h> // Indlæser I2C biblioteket
#include <LiquidCrystal_I2C.h> // Indlæser er specielt I2C Bibliotek
LiquidCrystal_I2C LCD(0X3F,16,2); // Definere displayets I2C bus adr og antal karakter samt linje
const int Takt01 = 2; // Pin som Taktgiver 01 er forbundet til
const int Takt02 = 3; // Pin som Taktgiver 02 er forbundet til
int TripOp = 4; // Pin som juster op af Trip01 er forbundet til
int TripNed = 5; // Pin som juster ned at Trip01 er forbundet til
int TripReset01 = 6; // Pin som reset af Trip01 er forbundet til
int TripReset02 = 7; // Pin som reset at Trip02 er forbundet til
//Tæller 01
long Takt01Impulser = 0; // Tæller antallet af impulser fra taktgiveren 01 "long" gør at tælleren ikke går i minus
int Takt01State = 0; // Aktuelle status af taktgiver 01
int LastTakt01State = 0; // Forrige status af taktgiver 01
//Tæller 02
long Takt02Impulser = 0; // Tæller antallet af impulser fra taktgiveren 01 "long" gør at tælleren ikke går i minus
int Takt02State = 0; // Aktuelle status af taktgiver 01
int LastTakt02State = 0; // Forrige status af taktgiver 01
void setup()
{
// Definere Pin type
pinMode(Takt01,INPUT);
pinMode(Takt02,INPUT);
pinMode(TripOp,INPUT);
pinMode(TripNed,INPUT);
pinMode(TripReset01,INPUT);
pinMode(TripReset02,INPUT);
// Opstart at display
LCD.init();
LCD.backlight(); // Tænder baggrunds lyset
LCD.print(" TRIPMETER "); // Opstarts tekst
LCD.setCursor(0,1); // Placering af opstarts teksten
LCD.print("# BETA 2:22 #"); // Versions nummer
delay(5000); // Visnings tid 5 sek
LCD.clear(); // Sletter alt telst på displayet
LCD.setCursor(0, 0); // Placering af Permanent tekst
LCD.print("TRIP 1:0.00 KM"); // Permanent tekst
LCD.setCursor(0, 1); // Placering af Permanent tekst
LCD.print("TRIP 2:0.00 KM"); // Permanent tekst
// Opstart serial communication:
// Serial.begin(9600);
}
void loop()
{
// Tæller 01
float Trip01 = 0;
Trip01 = (0.002175*Takt01Impulser); // Første tal i parentesen er hjul omkredsen skal ændres to steder hvor tripmeters skal kalibreres
Takt01State = digitalRead(Takt01); //Læser taktgivers impulser
if (Takt01State != LastTakt01State) // sammenligne taktGiverState til sin tidligere tilstand
{
if (Takt01State == HIGH) // hvis staten har ændret sig, forøge tælleren
{
// Hvis den nuværende tilstand er HIGH så button
// venter fra off til on:
Takt01Impulser++;
}
// Skrivet Trip 01 på LCD displayet
LCD.setCursor(7, 0);
LCD.print(Trip01);
// Printer Trip 01 via Serial
/* Serial.print("SENSOR 01 : ");
Serial.println(Takt01Impulser);
Serial.print("TRIP 01 : ");
Serial.println(Trip01);
*/
}
LastTakt01State = Takt01State; // Gemmer den aktuelle status som den sidste status til næste gennem løb og forhindre at taktGiverne kan få tælleren til at løbe
//Forsinkelse som skal forhindre flere taktGiver impulser
delay(1);
// Reset af Trip 01
if (digitalRead(TripReset01))
{
Takt01Impulser =0;
// Sletter kørt km
LCD.setCursor(07, 0);
LCD.print("0.00 ");
}
// Tæller 02
float Trip02 = 0;
Trip02 = (0.002175*Takt02Impulser); // Første tal i parentesen er hjul omkredsen skal ændres to steder hvor tripmeters skal kalibreres
Takt02State = digitalRead(Takt02); //Læser taktgivers impulser
if (Takt02State != LastTakt02State) // sammenligne taktGiverState til sin tidligere tilstand
{
if (Takt02State == HIGH) // hvis staten har ændret sig, forøge tælleren
{
// Hvis den nuværende tilstand er HIGH så button
// venter fra off til on:
Takt02Impulser++;
// skrivet Trip 02 på LCD displayet
LCD.setCursor(7, 1);
LCD.print(Trip02);
// Printer Trip 02 via Serial
/* Serial.print("SENSOR 02 : ");
Serial.println(Takt02Impulser);
Serial.print("Trip 02 : ");
Serial.println(Trip02);
*/
//Forsinkelse som skal forhindre flere taktGiver impulser
delay(1);
}
}
LastTakt02State = Takt02State; // Gemmer den aktuelle status som den sidste status til næste gennem løb og forhindre at taktGiverne kan få tælleren til at løbe
// Reset af Trip 02
if (digitalRead(TripReset02))
{
Takt02Impulser =0;
// Sletter kørt km
LCD.setCursor(07, 1);
LCD.print("0.00 ");
}
// Reseter automatisk Trip 02 for vær 20 Km
if (Trip02 > 20.00)
{
Takt02Impulser =0;
LCD.setCursor(07, 1);
LCD.print("0.00 ");
}
}