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
Suche jemanden, der mir einen Sketch von 1602 LCD auf Nokia 5110 LCD umschreibt
28.04.2015, 15:16
Beitrag #9
RE: Suche jemanden, der mir einen Sketch von 1602 LCD auf Nokia 5110 LCD umschreibt
Also in dem oben verlinkten Beispielsketch machen die das so:

display.setTextSize(1);
set_text(11,0,"Hallo Welt!",BLACK);
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.04.2015, 19:16 (Dieser Beitrag wurde zuletzt bearbeitet: 28.04.2015 19:37 von HaWe.)
Beitrag #10
RE: Suche jemanden, der mir einen Sketch von 1602 LCD auf Nokia 5110 LCD umschreibt
hallo,
ich würde so vorgehen:

das
display.setTextSize(1);
brauchst du nur 1x am Anfang in setup().

deklariere
char stringbuf[50];

Aber dann ersetz doch mal überall im restlichen Code dein
lcd.print(stringbuf)
durch
set_text(0,0, stringbuf, BLACK);

dann schreibt er immer die Meldung ganz an den Anfang in die 1. Zeile

wenn du Zahlen ausgeben willst, musst du sie zuerst als String umformatieren.
das geht mit
itoa()
ftoa() bzw. dtostrf()
oder sprintf() wie tito schon schrieb - das funktioniert aber leider aus Arduinos nur mit integer, nicht mit float (außer auf dem Due, oder mit Patch).

Aber eins nach dem anderen - erstmal die Strings umschreiben!

und für ints geht es mit itoa am schnellsten:
char * itoa ( int value, char * str, int base );

also statt
lcd.write(1023);

jetzt diese 2 Zeilen:
itoa( 1023, strbuf, 10); // Zahl in string umwandeln
set_text(0,0, stringbuf, BLACK); // string auf Display schreiben


Um in die 2. Zeile zu schreiben, bräuchte man erst mal einen Beispielcode, das ist von Display zu Display und von Font zu Font verschieden.




ps,
nur am Rande,
als ftoa würde ich diesen Code verwenden:

Code:
char * ftoa(char * str, double f, int16_t precision)  // als precision reicht meist 7
{
  int32_t  p[] = {0,10,100,1000,10000,100000,1000000,10000000,100000000};
  int32_t  intnum, decimal;  
  char * sret = str;

  if(precision>8) precision=8;
  
  intnum = (long)f;
  itoa( intnum, str, 10);
  
  while ( *str != '\0') str++;
  *str++ = '.';
  
  decimal = abs( (long)( (f - intnum ) * p[precision]) );  
  itoa( decimal, str, 10);

  return sret;
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.04.2015, 05:11
Beitrag #11
RE: Suche jemanden, der mir einen Sketch von 1602 LCD auf Nokia 5110 LCD umschreibt
Guten Morgen,

ich habe mir das jetzt mehrmals durchgelesen. Obwohl es gut erklärt ist, habe ich es noch nicht ganz verstanden. Aber ich werde mir das später mal in aller Ruhe anschauen. Heute bin ich ganztägig zu einer Fortbildung. Da wird das leider nix.

Was ist denn der Vorteil dieser "Umschreibung" der Ausgabebefehle auf dem 1602 LCD? Ist das "universeller" und wird dann von jedem Display ausgegeben?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.04.2015, 08:17 (Dieser Beitrag wurde zuletzt bearbeitet: 29.04.2015 08:54 von tito-t.)
Beitrag #12
RE: Suche jemanden, der mir einen Sketch von 1602 LCD auf Nokia 5110 LCD umschreibt
hallo,
ich kam noch nicht zum Umschreiben, vielleicht komme ich heute nachm. dazu, aber vielleicht ist ja auch jemand anderes schneller.

Wie Hawe schrieb, es ist richtig, sprintf geht nicht mit float (außer mit patch), das hatte ich vergessen. Das ist zwar einerseits schade, andererseits hast du ja gar kein float in deinem eigenen Programm. (Aber selbst wenn: der Patch ist schnell installiert!)

Weshalb das Umschreiben nötig ist:
Deine lcd - lib kann Zahlen direkt ausgeben, die meisten anderen TFT- libs, die ich kenne, können das nicht, daher muss man Zahlen vorher zu strings umformatieren.
Dann kannst du die strings allerdings viel flexibler formatiert mit allen möglichen libs ausgeben (auch z.B. mit Serial sogar).

sprintf ist etwas schwer für Anfänger, trotzdem empfehle ich es dir sogar schon für einfache Integer-Zahlen. Der Trick dabei: es füllt automatisch mit Leerzeichen oder Nullen auf, um Zahlen besser tabellarisch ordnen zu können.
Und bei floats kann es auch die Zahl der Vor- und Nachkommastellen exakt festlegen.

Statt
itoa(1023, stringbuf, 10); // 10 für Dezimal-System
heißt es dann
sprintf(stringbuf, "%d", 1023); // "%d" für Integer im Dezimalsystem

und statt
itof(3.1415, stringbuf, 7); // 7 für Genauigkeit/Anzahl Stellen
heißt es dann
sprintf(stringbuf, "%8f", 1023); // "%8f" für 7 Fließkommastellen plus Dezimalpunkt (!!) insgesamt
oder
sprintf(stringbuf, "%8.2f", 1023); // "%8.2f" für 7 Fließkommastellen insgesamt, davon 2 Nachkommastellen, plus Dezimalpunkt (!!)

Es wird automatisch rechtsbündig ausgegeben, unbenutzte Stellen werden automatisch mit Leerzeichen aufgefüllt. Weitere Feinheiten später.

Bitte guck doch mal, wie hawe schon schrieb, ob du nicht mal den gesamten Beispiel-Sketch von deinem Nokia komplett posten kannst, dann erkennt man besser wie die Syntax ist.

so long !
Tim
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.04.2015, 12:33
Beitrag #13
RE: Suche jemanden, der mir einen Sketch von 1602 LCD auf Nokia 5110 LCD umschreibt
Mahlzeit.

Hab noch ein paar Minuten Mittagspause. Der Link zum Beispielsketch steht in meinem ersten Beitrag unten.

Alles andere später.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.04.2015, 13:21 (Dieser Beitrag wurde zuletzt bearbeitet: 29.04.2015 13:26 von HaWe.)
Beitrag #14
RE: Suche jemanden, der mir einen Sketch von 1602 LCD auf Nokia 5110 LCD umschreibt
dann gucken wir doch schonamal:
Code:
// Nokia 5110 LCD-Display (84x48 Bildpunkte)

#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

// D7 - Serial clock out (CLK oder SCLK)
// D6 - Serial data out (DIN)
// D5 - Data/Command select (DC oder D/C)
// D4 - LCD chip select (CE oder CS)
// D3 - LCD reset (RST)
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);


void setup()   {

  // Display initialisieren
  display.begin();

  // Kontrast setzen
  display.setContrast(60);
  display.clearDisplay();   // clears the screen and buffer
}


void loop() {
  
  display.setTextSize(1);
  set_text(11,0,"Hallo Welt!",BLACK);
  delay(500);
  
  display.drawLine(7,11,77,11,BLACK);
  display.display();
  delay(500);
  
  display.drawCircle(8,23,5,BLACK);
  display.display();
  delay(500);
  
  display.fillCircle(11,26,5,BLACK);
  display.display();
  delay(500);
  
  display.drawRect(25,18,10,10,BLACK);
  display.display();
  delay(500);

  display.fillRect(28,21,10,10,BLACK);
  display.display();
  delay(500);

  display.drawRoundRect(47,18,10,10,2,BLACK);
  display.display();
  delay(500);
  
  display.fillRoundRect(50,21,10,10,2,BLACK);
  display.display();
  delay(500);
  
  display.drawTriangle(68,18,68,28,78,23,BLACK);
  display.display();
  delay(500);

  display.fillTriangle(71,21,71,31,81,26,BLACK);
  display.display();
  delay(500);
  
  // Ein kleines bisschen Scroll-Text-Magie
  int x=0;
  for(int i=0;i<(5.6*8);i++){
    set_text(x,40,"blog.simtronyx.de",BLACK);
    delay(i==0?1000:100);
    if(i<(5.6*8)-1)set_text(x,40,"blog.simtronyx.de",WHITE);
    if((i)<(2.74*8))x-=1;else x+=1;
  }
  delay(250);
  
  display.clearDisplay();      // Display wieder löschen
}

void set_text(int x,int y,String text,int color){
  
  display.setTextColor(color); // Textfarbe setzen, also Schwarz oder Weiss
  display.setCursor(x,y);      // Startpunkt-Position des Textes
  display.println(text);       // Textzeile ausgeben
  display.display();           // Display aktualisieren
}

hmh, sie aus, als ob er per

set_text(x,40,"blog.simtronyx.de",BLACK);

in eine der unteren Zeilen schreibt (y=40), was 4. Zeile bedeuten könnte - stimmt das?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.04.2015, 14:27 (Dieser Beitrag wurde zuletzt bearbeitet: 29.04.2015 14:37 von HaWe.)
Beitrag #15
RE: Suche jemanden, der mir einen Sketch von 1602 LCD auf Nokia 5110 LCD umschreibt
dann könnte es so aussehen:

Code:
// Nokia 5110 LCD-Display (84x48 Bildpunkte)

#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

// D7 - Serial clock out (CLK oder SCLK)
// D6 - Serial data out (DIN)
// D5 - Data/Command select (DC oder D/C)
// D4 - LCD chip select (CE oder CS)
// D3 - LCD reset (RST)
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

const int hallPin=2;     // <<<<<<<<<<<<<<<<<< hallPin geändert !

#define fwidth 5         // <<<<<<< wie breit ist ein font?

const unsigned long sampleTime=1000;
const int maxRPM = 7000;

char sbuf[50];

void setup()
{
  pinMode(hallPin,INPUT);
  display.begin(16, 2);
  display.clearDisplay();
  set_text(0,0," System booting", BLACK);
  delay(1500);
  display.clearDisplay();
  set_text(0,0,"      done", BLACK);
  delay(1000);
  display.clearDisplay();
}

void loop()
{
  delay(100);
  int rpm=getRPM();
  display.clearDisplay();
  
  displayRPM(rpm);
  displayBar(rpm);
}

int getRPM()
{
  int count=0;
  boolean kflag=LOW;
  unsigned long currentTime=0;
  unsigned long startTime=millis();
  while (currentTime<=sampleTime)
  {
    if (digitalRead(hallPin)==HIGH)
    {
      kflag=HIGH;
    }
    if (digitalRead(hallPin)==LOW && kflag==HIGH)
    {
      count++;
      kflag=LOW;
    }
    currentTime=millis()-startTime;
  }
  int count2rpm = int(60000./float(sampleTime))*count;
  return count2rpm;
}

void displayRPM(int rpm)
{
  lcd.clear();
  //lcd.setCursor(0, 0);
  set_text(0,0,rpm,DEC);
  //lcd.setCursor(5,0);
  set_text(5*fwidth,0, "RPM", BLACK);   // <<<<<<< wie breit ist ein font?
  
  //lcd.setCursor(12,0);
  sbuf=itoa(rpm/(maxRPM/100,sbuf,10);
  set_text(12*fwidth, sbuf, BLACK);
  //lcd.setCursor(15,0);
  set_text(15*fwidth,0, "%", BLACK);    // <<<<<<< wie breit ist ein font?

}

void displayBar(int rpm)
{
  int numOfBars=map(rpm,0,maxRPM,0,15);         // <<<< ?????
  //lcd.setCursor(0,1);
  if (rpm!=0)
  {
  for (int i=0; i<=numOfBars; i++)
   {
        //lcd.setCursor(i,1);
        //lcd.write(1023);                   // <<<< ?????
        sbuf=itoa(1023,sbuf,10);             // <<<< ?????
        set_text(i*fwidth,10, 1023, BLACK);  // <<<< ?????
      }
  }
}

mit den angemarkertern Unklarheiten...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.04.2015, 18:37
Beitrag #16
RE: Suche jemanden, der mir einen Sketch von 1602 LCD auf Nokia 5110 LCD umschreibt
Deine Zeilen habe ich überflogen (sagt mir auf die Schnelle eh wenig, muss ich erst in Ruhe lesen) aber die Anmerkungen habe ich gelesen. Die unteren Fragezeichen beziehen sich auf die Grafik in der zweiten Zeile des angehangenen Bildes (Das ist der Sketch in Aktion)h. Je höher die Drehzahl desto weiter der Ausschlag der Grafik.

Muss erst noch ein paar andere Sachen klären. Dann widme ich mich wieder Euren Antworten.


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Sketch vom Arduino Board Herunterladen Sarius 2 343 27.07.2016 15:26
Letzter Beitrag: Sarius
  Sketch konnte nicht angelegt werden Sarius 2 237 16.07.2016 15:59
Letzter Beitrag: Sarius
  LCD 1602 mit I2C Tellen 17 595 10.07.2016 10:29
Letzter Beitrag: amithlon
  Ausgabe druckt immer 2 Werte anstatt nur einen. Finde den Fehler nicht TimeMen 24 734 02.07.2016 14:18
Letzter Beitrag: hotsystems
  [Suche] Library Programmierer/in für privates Projekt avoid 8 577 19.05.2016 15:01
Letzter Beitrag: avoid
Sad Suche simplen Scetch für ESP8266-Modul torsten_156 14 1.120 19.04.2016 07:54
Letzter Beitrag: amithlon
  SHT21 in Sketch integrieren PrinzEisenherz1 6 589 06.04.2016 14:38
Letzter Beitrag: PrinzEisenherz1
Question Arduino Pro Micro verlangt keyboard.h im sketch weinema 0 308 01.03.2016 19:04
Letzter Beitrag: weinema
  Suche LCD.h Zip bojojo 4 855 11.02.2016 17:31
Letzter Beitrag: bojojo
  Suche deutsches Forum für Processing torsten_156 3 509 06.02.2016 13:12
Letzter Beitrag: torsten_156

Gehe zu:


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