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
LCD Zahlen Formatierung
01.02.2015, 01:22 (Dieser Beitrag wurde zuletzt bearbeitet: 01.02.2015 03:21 von Kaito164.)
Beitrag #1
LCD Zahlen Formatierung
Hi,
habe jetzt das Ethernet Shield und bekomme auch die Werte auf mein LCD ausgegeben.
Das Problem was ich habe ist die Ausgabe, wenn z.b. das Heading von 0-359 geht und dann wieder bei 0 anfängt bleiben die alten Zahlen im Display stehen.
Nach der Ausgabe von
"HDG = 359" müsste
"HDG = 000" stehen und nicht
"HDG = 059"
Wie bekomme ich es hin das er die leeren Felder vorne mit 0 Füllt.
Diesen Wert hier "HDG = XP.Dget(118, 2);" müsste Formatiert werden.
Bei "VS = XP.Dget(118, 3);" bekomme ich einen Wert von -4000 bis 4000, das Minus zeigt er an gibt es eine Möglichkeit bei einen Positiven Wert ein + zu setzen?
Wie hier im Bild

Hier der Angepasste Code was ich bis jetzt zum Testen habe.
Code:
#include <SPI.h>        
#include <Ethernet.h>
//#include <EthernetUdp.h>
#include <Wire.h>
#include <XPlaneData.h>         // -- include XPlaneData library
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
//-----------------------------
byte Ard_MAC[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};// MAC-Address of Arduino
int XPR = 49001;                                  // port to listen to get UDP packets
int XPW = 49000;                                  // port to send UDP packets
int IPx[] = {192, 168, 178, 26};                     // X-Plane IP address ( ! set your !)
//IPAddress ip (192, 168, 178, 60);                                   // Arduino IP address (Auto)

XPlaneData XP (XPR, XPW, IPx, Ard_MAC);   //==!==  Create  XPlaneData object (XP)
//--------------------------------------------------
long HDG;
long HDG_pre;
long CRS;
long CRS_pre;
long SPD;
long SPD_pre;
long FL;
long FL_pre;
long ALT;
long ALT_pre;
long VS;
long VS_pre;

//---------------- setup ---------------------------
void setup()  {


   XP.begin();      //==! init XPlaneData
  
// XP.Pins_In (42, 43);             // Define pins for inputs  
   lcd.init();                       // initialize the lcd
   lcd.backlight();
   lcd.clear();
   Serial.begin(38400);

  lcd.setCursor(5,0);
  lcd.print("AUTOPILOT:");


  lcd.setCursor(0,1);
  lcd.print("HDG: 000 ");  
  lcd.setCursor(10,1);
  lcd.print("FL:  00000");

  lcd.setCursor(0,2);
  lcd.print("CRS: 000 ");
  lcd.setCursor(10,2);
  lcd.print("ALT: 00000");


  lcd.setCursor(0,3);
  lcd.print("SPD: 000 ");
  lcd.setCursor(10,3);
  lcd.print("V/S:  0000");



   }
          
        
          
//------------------------ start --------------------
void loop()
{                // ------ send data to X-Plane -----

// XP.Set_Value(42, "cockpit2/controls/flap_ratio[0]", 0);      // Flaps APR position                                
// XP.Set_Value(43, "cockpit2/controls/flap_ratio[0]", 1 );      // Flaps Full position


//----------- Receive data from X-Plane -----------------
// lcd.setCursor(5,0);
// lcd.print("AUTOPILOT:");

if (XP.udpin())   // -
    {                

HDG = XP.Dget(118, 2);                     // HDG
CRS = XP.Dget(98, 2);                     // CRS
SPD = XP.Dget(118, 1);                     // SPD
FL = XP.Dget(118, 4);                      // FL
ALT = XP.Dget(20, 6);                     // ALT
VS = XP.Dget(118, 3);                      // VS
    
    
    if (HDG_pre != HDG) {      // check ob Wert sich geändert hat
        HDG_pre = HDG;
       lcd.setCursor(0,1);
       lcd.print("HDG: ");
       lcd.print(HDG);
     }
              
    if (CRS_pre != CRS) {      // check ob Wert sich geändert hat
        CRS_pre = CRS;
       lcd.setCursor(0,2);
       lcd.print("CRS: ");
       lcd.print(CRS);
     }
    if (SPD_pre != SPD) {      // check ob Wert sich geändert hat
        SPD_pre = SPD;
       lcd.setCursor(0,3);
       lcd.print("SPD: ");
       lcd.print(SPD);
     }
    if (FL_pre != FL) {      // check ob Wert sich geändert hat
        FL_pre = FL;
       lcd.setCursor(10,1);
       lcd.print("FL:  ");
       lcd.print(FL);
     }
    if (ALT_pre != ALT) {      // check ob Wert sich geändert hat
        ALT_pre = ALT;
       lcd.setCursor(10,2);
       lcd.print("ALT: ");
       lcd.print(ALT);
     }
    if (VS_pre != VS) {      // check ob Wert sich geändert hat
        VS_pre = VS;
       lcd.setCursor(10,3);
       lcd.print("VS:  ");
       lcd.print(VS);
     }
              
  
              
          
    }

}

[Bild: attachment.php?aid=826]
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.02.2015, 11:21
Beitrag #2
RE: LCD Zahlen Formatierung
Hi,
Du kannst Dir per sprintf (siehe hier: http://www.cplusplus.com/reference/cstdio/sprintf/) eine Zahl in einen String formatieren. Dabei kannst Du z.B. auch angeben, ob die eine Mindestlänge mit führenden Nullen oder Blanks haben willst. Die möglichen Formatangaben sind hier beschrieben: (http://www.cplusplus.com/reference/cstdio/printf/).
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.02.2015, 00:30
Beitrag #3
RE: LCD Zahlen Formatierung
Ich hatte das mal für eine maximal 4-stellige Zahl so gelöst:
Code:
lcd.setCursor(12,1);                            // Spalte 12, Zeile 1
if(parameter <10) lcd.print(" ");                    // ein leerzeichen wenn Zahl kleiner 2-stellig
if(parameter <100) lcd.print(" ");                 // ein leerzeichen wenn Zahl kleiner 3-stellig
if(parameter <1000) lcd.print(" ");                 // ein leerzeichen wenn Zahl kleiner 4-stellig
lcd.print(parameter);                            // Parameter auf LCD anzeigen

Gruss Ralf
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.02.2015, 08:42
Beitrag #4
RE: LCD Zahlen Formatierung
Danke habe mir mal beide Sachen angesehen und habe noch eine Frage.

Um printf und sprintf zu nutzen muss ich die <stdio.h> laden, wenn ja wo finde ich die aktuelle Version?
Habe die Vermutung das sie bei mir fehlt zumindest ist sie beim #include <stdio.h> nicht rot wie die anderen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.02.2015, 10:01
Beitrag #5
RE: LCD Zahlen Formatierung
(02.02.2015 08:42)Kaito164 schrieb:  Um printf und sprintf zu nutzen muss ich die <stdio.h> laden, wenn ja wo finde ich die aktuelle Version?
Hi,
wenn Du die normale Arduino IDE verwendest, dann sollte das eigentlich nicht nötig sein.
Warum probierst Du es nicht einfach aus?
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.02.2015, 15:20
Beitrag #6
RE: LCD Zahlen Formatierung
ja habe IDE 1.0.6 und wie gesagt alle Include sind in Rot nur die stdio.h nicht deshalb dachte ich die Library Fehlt.

habe es mal probiert aber bekomme nur eine 0 wieder =b
Wahrscheinlich ist mein Ansatz falsch ich probier mal weiter.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.02.2015, 15:22
Beitrag #7
RE: LCD Zahlen Formatierung
(02.02.2015 15:20)Kaito164 schrieb:  habe es mal probiert aber bekomme nur eine 0 wieder =b
Hi,
zeig uns mal das sprintf-Statement, das Du verwendest. ...oder was auch immer Du jetzt gemacht hast. Ohne Details kann Dir keiner helfen.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.02.2015, 17:27 (Dieser Beitrag wurde zuletzt bearbeitet: 02.02.2015 17:45 von tito-t.)
Beitrag #8
RE: LCD Zahlen Formatierung
es gibt kein stdio.h für Sketch, ich glaube auch nicht dass das nötig ist.
sprintf funktioniert bei mir immer schon ohne das.
Nur für floats muss man vorher einen float-patch kopieren, das ist leider normalerweise nicht freigeschaltet.

Code:
int a=1234;
char str[20];
sprintf(str, "%d", a);
formatiert deine Zahl 1234 in einen String str="1234"
mit str kannst du dann machen was du willst. Smile

ps
wie man sprintf formatiert mit Nullen oder was auch immer steht hier (ist identisch für printf und sprintf oder fprintf):
http://www.cplusplus.com/reference/cstdio/printf/

printf ("Characters: %c %c \n", 'a', 65);
printf ("Decimals: %d %ld\n", 1977, 650000L);
printf ("Preceding with blanks: %10d \n", 1977);
printf ("Preceding with zeros: %010d \n", 1977);
printf ("Some different radices: %d %x %o %#x %#o \n", 100, 100, 100, 100, 100);
printf ("floats: %4.2f %+.0e %E \n", 3.1416, 3.1416, 3.1416);
printf ("Width trick: %*d \n", 5, 10);
printf ("%s \n", "A string");

output:
Code:
Characters: a A
Decimals: 1977 650000
Preceding with blanks:       1977
Preceding with zeros: 0000001977                   // <<<<<<<<<<<<<<<<
Some different radices: 100 64 144 0x64 0144
floats: 3.14 +3e+000 3.141600E+000
Width trick:    10
A string
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  4 Anzeigen mit unterschiedlichen zufälligen Zahlen Gravia 4 433 10.02.2016 06:05
Letzter Beitrag: Gravia
  Problem mit Division zweier Zahlen torsten_156 3 460 18.12.2015 22:09
Letzter Beitrag: Bitklopfer
  analogRead: Pin-Nummern zählen? HaWe 4 826 14.06.2015 12:01
Letzter Beitrag: HaWe
  Serial Monitor Zahlen Senden über 9 paq 7 2.028 18.05.2015 08:48
Letzter Beitrag: Scherheinz
  .read() liest nur zahlen anstatt character kraweuschuasta 1 1.249 27.02.2014 21:10
Letzter Beitrag: kraweuschuasta
  Zahlen vom Serieller Monitor verarbeiten Sascha87 1 1.277 16.01.2014 10:47
Letzter Beitrag: Stefan
  10er zahlen in binärzahlen - noobfrage schatten14 9 3.818 14.01.2014 12:17
Letzter Beitrag: Stefan
  Pulse zählen Coleby 8 8.305 05.01.2014 10:10
Letzter Beitrag: Coleby
  Große Zahlen und kein Punkt Xwill 2 1.705 27.10.2013 21:10
Letzter Beitrag: Xwill

Gehe zu:


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