INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Km Stand auch nach dem Ausschalten
29.02.2020, 17:02
Beitrag #1
Km Stand auch nach dem Ausschalten
Ich habe ein Problem mit dem Programmcode, ich möchte noch zwei Dinge haben und komme nicht mehr weiter.
1.) Der Kilometerstand soll dauerhaft gespeichert werden, auch nach ausschalten wieder zur verfügung stehen
2.) Einen Tripzähler, den ich per Knopfpdruck zurücksetzen kann


.ino  Tacho_funzt.ino (Größe: 6,45 KB / Downloads: 44)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.02.2020, 17:09
Beitrag #2
RE: Km Stand auch nach dem Ausschalten
Stelle Deinen Sketch bitte in Codetags.
Wie das geht, steht hier.

Wie oft soll der Stand denn gespeichert werden? Der EEPROM hat ca. 100.000 Schreibzyklen.n Wenn Du mehr brauchst, dann nutze einen FRAM.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.02.2020, 17:59
Beitrag #3
RE: Km Stand auch nach dem Ausschalten
Baue in deinen Sketch eine Funktion ein, die beim Abschalten erst den KM-Stand speichert und danach den Arduino abschaltet.
Evtl. brauchst du einen Akku, der den Arduino so lange mit Spannung versorgt. Deine aktuelle Schaltung kenne ich ja nicht.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.02.2020, 18:28
Beitrag #4
RE: Km Stand auch nach dem Ausschalten
Für was für ein Fahrzeug ist der Tacho überhaupt und in welcher Auflösung willst Du den km-Stand speichern?

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.02.2020, 23:34
Beitrag #5
RE: Km Stand auch nach dem Ausschalten
Welchen Arduino nimmst Du?

Hat der überhaupt ein EEPROM? Zur Not kann man den Flash-(Programm-) speicher nutzen, aber dann muss man mit jedem Programm-Update den aktuellen km-Stand in den Quellcode editieren - sehr, sehr unschön und unsicher.

Scheibzyklen: Da must Du mal rechnen, vielleicht einfach alle 5 km ab ins EEPROM, dann reicht es für für 500.000 km.

Stromverbrauch: Ein Arduino macht eine normale Auto-Batterie in einigen Wochen leer!

Gruß
GuaAck
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.03.2020, 09:18
Beitrag #6
RE: Km Stand auch nach dem Ausschalten
(29.02.2020 17:02)Anfänger2020 schrieb:  Ich habe ein Problem mit dem Programmcode, ich möchte noch zwei Dinge haben und komme nicht mehr weiter.
1.) Der Kilometerstand soll dauerhaft gespeichert werden, auch nach ausschalten wieder zur verfügung stehen
2.) Einen Tripzähler, den ich per Knopfpdruck zurücksetzen kann

Der Arduino ist ein Uno und wird über die Rollerbaterie mit Strom Versorgt, natürlich über den Zünschalter. Alle 5 Kilometer speichern wäre schon in Ordnung.
Ich kapier nur nicht wie ich den Code enstprechend schreiben soll un bin für jede Unterstützung dabkbar. Dank auch an alle die mir Bereits geschreiben haben.
Code:
//Anzahl Spalten des Display (16)
#define LCD_WIDTH 20

//Anzahl Zeilen des Display (2)
#define LCD_HEIGHT 4

// Pin für Reed-Kontakt, Digital-2 für Interrupt 0
#define REEDPIN 2

// Hardware-Interrupt für den Reed-Pin
#define REEDINTERRUPT 0

// Radumfang in mm
#define RADUMFANG 310


#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 6, 5, 4, 3);

// build 2-line digit font data array
// Digits are 3 characters wide.
byte bignums[10][2][3] = {
// Define which characters to use for each number. 255 is a solid block; 254 is a space
// The format is { {TopLeft, TopMiddle, TopRight}, {BottomLeft, BottomMiddle, BottomRight} }
{ {255, 0, 255}, {255, 1, 255} },        // data to display "0"
{ {0, 255, 254}, {1, 255, 1} },          // data to display "1"
{ {0, 5, 255}, {255, 1, 1} },            // data to display "2"
{ {0, 5, 255}, {1, 1, 255} },            // data to display "3"
{ {255, 1, 255}, {254, 254, 255} },      // data to display "4"
{ {255, 5, 5}, {1, 1, 255} },            // data to display "5"
{ {255, 5, 5}, {255, 1, 255} },          // data to display "6"
{ {0, 0, 255}, {254, 255, 254} },        // data to display "7"
{ {255, 5, 255}, {255, 1, 255} },        // data to display "8"
{ {255, 5, 255}, {254, 254, 255} }       // data to display "9"
};

void loadchars() {                        // This subroutine programs the custom character data into the LCD
  lcd.command(64);
// Custom character 0
  lcd.write(byte(B11111));
  lcd.write(byte(B11111));
  lcd.write(byte(B11111));
  lcd.write(byte(B00000));
  lcd.write(byte(B00000));
  lcd.write(byte(B00000));
  lcd.write(byte(B00000));
  lcd.write(byte(B00000));

// Custom character 1
  lcd.write(byte(B00000));
  lcd.write(byte(B00000));
  lcd.write(byte(B00000));
  lcd.write(byte(B00000));
  lcd.write(byte(B00000));
  lcd.write(byte(B11111));
  lcd.write(byte(B11111));
  lcd.write(byte(B11111));

// Custom character 2
  lcd.write(byte(B11111));
  lcd.write(byte(B11111));
  lcd.write(byte(B11111));
  lcd.write(byte(B00000));
  lcd.write(byte(B00000));
  lcd.write(byte(B11111));
  lcd.write(byte(B11111));
  lcd.write(byte(B11111));

// Custom character 3
  lcd.write(byte(B00000));
  lcd.write(byte(B00000));
  lcd.write(byte(B00000));
  lcd.write(byte(B00000));
  lcd.write(byte(B00000));
  lcd.write(byte(B01110));
  lcd.write(byte(B01110));
  lcd.write(byte(B01110));

// Custom character 4
  lcd.write(byte(B00000));
  lcd.write(byte(B00000));
  lcd.write(byte(B00000));
  lcd.write(byte(B01110));
  lcd.write(byte(B01110));
  lcd.write(byte(B01110));
  lcd.write(byte(B00000));
  lcd.write(byte(B00000));

// Custom character 5
  lcd.write(byte(B11111));
  lcd.write(byte(B11111));
  lcd.write(byte(B11111));
  lcd.write(byte(B00000));
  lcd.write(byte(B00000));
  lcd.write(byte(B00000));
  lcd.write(byte(B11111));
  lcd.write(byte(B11111));

// Custom character 6
  lcd.write(byte(B11111));
  lcd.write(byte(B11111));
  lcd.write(byte(B11111));
  lcd.write(byte(B00000));
  lcd.write(byte(B00000));
  lcd.write(byte(B00000));
  lcd.write(byte(B11110));
  lcd.write(byte(B11111));

// Custom character 7
  lcd.write(byte(B00000));
  lcd.write(byte(B00000));
  lcd.write(byte(B00000));
  lcd.write(byte(B00000));
  lcd.write(byte(B00000));
  lcd.write(byte(B00000));
  lcd.write(byte(B00000));
  lcd.write(byte(B00000));

  lcd.home();
}

void printbigchar(byte digit, byte col) { // This subroutine prints the big font characters on the LCD screen
if (digit > 9) return;                   // reject anything above 9
for (int i = 0; i < 2; i++) {            // count i from 0 to 1
   lcd.setCursor(col*4 , i);              // set LCD cursor at correct point
   for (int j = 0; j < 3; j++) {          // count j from 0 to 2
     lcd.write(bignums[digit][i][j]);     // write proper block to LCD from array
   }
   lcd.write(254);                        // write an empty space
}
lcd.setCursor(col + 4, 0);               // move the cursor to the top line, col + 4
}


void setup(){
  pinMode(REEDPIN, INPUT_PULLUP); // Reedkontakt direkt und ohne Widerstand angeschlossen
  lcd.begin(LCD_WIDTH, LCD_HEIGHT);
  loadchars();
  attachInterrupt(REEDINTERRUPT, reedISR, FALLING);
}

volatile byte reedCountSum;
volatile long reedMillisSum;

unsigned long lastReedMillis;

void reedISR()
{
  if (millis()-lastReedMillis>=25)  // 25ms entspricht max. 40 Radumdrehungen pro Sekunde
  {
    reedCountSum++;                 // eine Radumdrehung zählen
    reedMillisSum+=millis()-lastReedMillis;   // Zeit addieren
    lastReedMillis=millis();       // Zeit merken
  }
}

unsigned long gesamtUmdrehungen;

void tachoAnzeige()
{
  byte umdrehungen;
  unsigned long zeit;
  float kph, kilometer;
  int kphRounded;
  char buffer[10];
  noInterrupts();            // Interrupts sperren
    umdrehungen=reedCountSum;// Zählvariable umkopieren
    reedCountSum=0;          // Zählvariable auf 0 zurücksetzen
    zeit=reedMillisSum;      // Zeitzähler umkopieren
    reedMillisSum=0;         // Zeitzähler auf 0 zurücksetzen
  interrupts();              // Interrupts wieder zulassen
  gesamtUmdrehungen+= umdrehungen; // Aufsummieren aller Radumdrehungen
  kilometer=(float)gesamtUmdrehungen*(float)RADUMFANG/1000000.0; // Fahrtkilometerzähler
  if (umdrehungen>0)
    kph=float(RADUMFANG)*(float)umdrehungen/(float)zeit*3.6;
  else
    kph=0.0;

  lcd.setCursor(12, 0);
  dtostrf(kilometer,3, 1, buffer);
  lcd.print(buffer);
  /*
  lcd.setCursor(0, 0);
  dtostrf(kilometer,9,3,buffer);
  lcd.print(buffer);
  lcd.print(" km");
  lcd.setCursor(0, 1);
  lcd.print("KM/H ");
  dtostrf(kph,5,1,buffer);
  */
  kphRounded=int(kph+0.5); // auf ganze kph gerundet
  // Ausgabe kph in grossen Ziffern
  kphRounded = kphRounded % 1000;       // drop any digits above 999
  printbigchar(kphRounded / 100,0);     // print the speed hundreds
  kphRounded = kphRounded % 100;        // drop any digits above 99
  printbigchar(kphRounded/10,1);        // print the speed tens
  kphRounded = kphRounded % 10;         // drop any digits above 9
  printbigchar(kphRounded,2);           // print the speed ones
  lcd.setCursor(12, 1);
  lcd.print("km/h");
}


unsigned long letzteSekunde=0;
void loop()
{
  unsigned long dieseSekunde=millis()/1000;
  // Tachoanzeige wird genau einmal pro Sekunde aktualisiert
  if (letzteSekunde != dieseSekunde)
  {
    tachoAnzeige();
    letzteSekunde=dieseSekunde;
  }
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.03.2020, 10:22
Beitrag #7
RE: Km Stand auch nach dem Ausschalten
Hi,

Beispiel: Ein 1000µF Kondensator hinter einer Diode (damit der Elko auch nur die zu versorgende Schaltung mit Strom versorgt) kann bei einer Stromentnahme von 50mA diese Schaltung (5V) für ca. 12-13ms mit Strom versorgen, dann ist der BOD (4.3V) erreicht. Also den Spannungsabfall am Eingang schnell feststellen und eine Routine starten bovor es dunkel wird. Dann tut es sicher auch der EEPROM laaange.

Gruß André
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.03.2020, 10:40
Beitrag #8
RE: Km Stand auch nach dem Ausschalten
Hast du den Arduino schon am Roller betrieben ?
Auch bei der Fahrt ?

Ich kann mir nicht vorstellen, dass es funktioniert.
Die Spannungsspitzen sind bei eienm Verbrennungsmotor so hoch, dass die ohne besondere Vorkehrungen den Uno zerstören können.
Also bevor es an die Feinheiten des Sketches geht, sollte erst mal die Hardware geklärt sein. Was nützt die der beste Sketch, wenn dauernd der Uno abraucht.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  DFPlayer hört nach einem Song auf Cobblepot 9 256 14.09.2020 20:14
Letzter Beitrag: hotsystems
  IDE Probleme nach Update auf 1.8.13 DO3GE 7 265 04.09.2020 14:41
Letzter Beitrag: hotsystems
  einmaliger Loop nach Knopfdruck Saftschmuggler 2 334 09.08.2020 18:18
Letzter Beitrag: Saftschmuggler
  Schalter u. Slider von Nextion nach Arduino abfragen, Lösungsansatz gesucht alpenpower 2 747 09.03.2020 07:59
Letzter Beitrag: alpenpower
  MobaTools Library: neue Version 2.0 läuft auch auf ESP8266 MicroBahner 7 1.165 07.02.2020 11:30
Letzter Beitrag: AnjinSan
  Webserver URL nach Eingaben zurücksetzen kiximek 9 1.269 17.01.2020 17:23
Letzter Beitrag: Tommy56
  Angabe des Dynamischen Speicherverbrauchs nach Compilieren BennIY 14 1.411 16.10.2019 21:56
Letzter Beitrag: Bitklopfer
Wink Solar Roboter- Servo dreht nach Stopp nicht weiter Stagneth.Alexander 37 4.960 20.08.2019 14:15
Letzter Beitrag: geist4711
  RTC MCP 7940 geht nach grobby 15 2.644 13.01.2019 15:01
Letzter Beitrag: grobby
  Leonardo macht keinen Auto-Reset (je nach Sketch) SebastianM 5 1.477 01.09.2018 07:49
Letzter Beitrag: amithlon

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste