OBD2 - Watterott-shield - herkömmliches LCD

Hallo

Ich habe mir das Watterott-Shield gekauft, das notwendige Kabel gelötet und die mechanic-0.6 Bibliothek installiert. Leider ist bei den Beispielsketches das LCD seriell angeschlossen und es scheitert jetzt bei mir daran, dass ich nicht weiß, wie ich den Sketch auf ein “normales” LCD, also mit der LiquidCrystal.h Bibliothek, den vielen Anschlüssen etc. umbaue. Kann mir dabei bitte jemand helfen?

Weiters mault der Compiler beim Beispielsketch: :58:57: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
Einfach die Deklaration des Wertes buffer von char auf string ändern ist vermutlich Blödsinn, was kann ich da sonst machen?

Ich würde mir gerne ein Gerät á la Scangauge bauen.

Beispielsketch der Bibliothek:

/*********************************************************************
 * Mechanic - Hacking your car
 *
 * Copyright (C) 2013 Joerg Pleumann
 * 
 * This example is free software; you can redistribute it and/or
 * modify it under the terms of the Creative Commons Zero License,
 * version 1.0, as published by the Creative Commons Organisation.
 * This effectively puts the file into the public domain.
 *
 * This example is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * LICENSE file for more details.
 */

#include <Mechanic.h>
#include <SoftwareSerial.h>

SoftwareSerial lcd(4, 5);

/*
 * Clear screen on Sparkfun serial LCD.
 */
void clearScreen() {
  lcd.write(0xfe);
  lcd.write(0x01);
}

/*
 * Set cursor on Sparkfun serial LCD.
 */
void gotoXY(int line, int column) {
  lcd.write(0xfe);
  lcd.write(0x80 + (64 * line + column));
}

ObdInterface obd;
ObdMessage msg;

void setup() {
  Serial.begin(115200);
  while (!Serial);
  
  obd.setSlow(false);
  obd.setExtended(false);
  obd.setDebug(false);
  obd.begin();

  lcd.begin(9600);
}

void loop() {
  char buffer[16];

  clearScreen();

  obd.getPidAsString(0x04, 0.0f, 100.0f, "%d %%", buffer);
  gotoXY(0, 0);
  lcd.print(buffer);
  
  obd.getPidAsString(0x05, -40.0f, 215.0f, "%d", buffer);
  gotoXY(0, 8);
  lcd.print(buffer);
  lcd.write(0xDF); // Degree sign on Sparkfun serial LCD
  lcd.print("C");
  
  obd.getPidAsString(0x0c, 0.0f, 16383.75f, "%d rpm", buffer);
  gotoXY(1, 0);
  lcd.print(buffer);

  obd.getPidAsString(0x0d, 0.0f, 255.0f, "%d km/h", buffer);
  gotoXY(1, 8);
  lcd.print(buffer);
  
  delay(1000);
}

LG
Friedrich

buffalo64: ... Watterott-Shield ... es scheitert ...

Was sagt Watterott dazu?

Gruß

Gregor

Habe ich noch nicht gefragt. Ich glaube eher nicht, dass die mir nicht viel weiterhelfen können, da ja das Shield selbst nichts mit einem Display zu tun hat, und für den Sketch bin ja ich verantwortlich. Sie werden mich wahrscheinlich auf den Shop verweisen, wo ich ein serielles Display kaufen kann.

Ich würde vorerst gerne das Ganze mit einem LCD ausprobieren und dann, wenn es so funktioniert, wie ich es mir vorstelle (inkl. der notwendigen PIDs), auf ein ungefähr 4" großes Grafikdisplay umsteigen. Dann brauche ich das serielle Display nicht mehr.

LG Friedrich

buffalo64: Habe ich noch nicht gefragt.

Das würde ich einfach mal tun. Wenn die Dich mit dem abwimmeln, was Du vermutest, kannst Du es ja hier kundtun.

Gruß

Gregor

Soweit ich den Sachverhalt verstanden habe, liegt der Hund doch anders begraben.

  • Du hast ein Sketch “mechanic”, welches ein anderes Display (samt anderer Library) verwendet
  • Du hast ein Display von Watterott

Soweit meine beiden Annahmen :slight_smile:

Nun wäre Step I:
Sich ein Sketch für die LiquidCrystal.h Library zu suchen. .
Step II:
Verstehen wie man auf das Display schreibt.
Step III:
Mechanic Sketch öffnen

#include <SoftwareSerial.h>

entfernen

#include <LiquidCrystal.h>

einfügen
Alle lcd.write-Befehle mit Deinen Erkenntnissen aus Step II ersetzen.

Viel Erfolg!

Stimmt zu 50%, ich habe kein Display von Watterott, sondern ein anderes, welches herkömmlich angeschlossen ist. Wie ich dieses Display ansteuere, weiß ich schon aus anderen Sketches, wo ich diese Type bereits (rudimentär) erfolgreich verwendet habe (inkl. passender Library).
Ich fange mit dem seriellen Display, mit den ganzen Hex-Adressen nichts an, kenne mich auch nicht wirklich damit aus, wie und ob ich lcd.write gegen lcd.print tauschen kann/soll/muss.

Ich weiß, wie ich mein Display initialisiere, wie ich den Cursor setze, Werte ausgebe usw., aber eben nur mit dem herkömmlichen Display.

LG
Friedrich

Hi Friedrich,

das ist eigentlich relativ simpel. Für den Arduino sind Hex und Int Werte prinzipiell das selbe. Nur wir tun uns damit schwer.

lcd.write(0xfe);

ist nichts anderes als

lcd.write(254);

Die 254 ist ein spezielles Kommando, welches dem Display sagt, dass nun ein Integer-Wert kommt um den Cursor zu versetzen. (Oder 1 um das Display zu löschen) Wie sich die Zahlen aus Zeile und Spalte zusammensetzen, kann man hier gut der Tabelle entnehmen.

Nachdem der Cursor auf die entsprechende Position gesetzt wurde, kann man seinen Text übermitteln. Ebenfalls mit write. Oder wie im Beispiel mit print.

Du musst also nur gotoXY mit setCursor übersetzen und write kann bleiben. Muss nur von "lcd" auf den Namen Deiner LiquidCrystal-Library geändert werden.

gregorss: Das würde ich einfach mal tun. Wenn die Dich mit dem abwimmeln, was Du vermutest, kannst Du es ja hier kundtun.

Gruß

Gregor

Ich habe sehr gute Erfahrungen mit dem Service von Watterott gemacht. Stefan Watterott kümmerte sich sofort um meine Anfragen. Auch wenn es nicht direkt mit seiner Hardware zutun hat.

Gruß

Scherheinz:
Ich habe sehr gute Erfahrungen mit dem Service von Watterott gemacht. Stefan Watterott kümmerte sich sofort um meine Anfragen. Auch wenn es nicht direkt mit seiner Hardware zutun hat.

Auch für mich ist Watterott einer der eher sympathischen Versender. Das mit dem „Abwimmeln“ war nur das, was mir bei Friedrichs „Vorweg-Argumentation“ einfiel. Was manche Firmen tun, um sich die Kundschaft vom Leib zu halten, ist echt heftig.

Gruß

Gregor

Die brauchen sich aber dann auch nicht wundern, wenn sie plötzlich keine Kundschaft mehr haben.
Wir haben auf der Arbeit auch scherzhaft gesagt: Kunde droht mit Auftrag aber eben nur scherzhaft.

Hruß Tommy

Tommy56: Die brauchen sich aber dann auch nicht wundern, wenn sie plötzlich keine Kundschaft mehr haben.

Mal abgesehen davon, dass das nicht plötzlich passiert: Es gibt anscheinend genug „Dumme“, die nachwachsen und diejenigen, die blöde Händler ignorieren, ersetzen. Naja ... alles wird gut ...

Gruß

Gregor

Das stimmt leider auch.

Für mich ist schlechter Service aber ein Auschlußkriterium. Dann lieber etwas mehr zahlen aber guten Service.

Gruß Tommy

Ich würde mal sagen Du versuchst das Display alleine anzuschließen und ein bißchen zu üben. Dann lernst Du wie Du es löschen kannst und wie Du den Kursor auf bestimmte Positionen setzen kannst und dort etwas hienzuschreiben. Wenn das klapt dann versuchst Du den Sketch so umzuschreiben daß die Ausgabe auf das Display funktioniert. Grüße Uwe

Ich bin absolut positiv überrascht: ich habe von Watterott einen korrigierten Sketch erhalten, damit hätte ich nun wirklich nicht gerechnet!!! :) :) :)

Danke auch für den link mit der Erklärung des seriellen Displays (Trib), hilft mir wahrscheinlich beim nächsten Mal weiter.

LG Friedrich

Sag ich doch, ein top Laden! ;D Darum bezahlt man doch gerne etwas mehr als für China Importe...