Sketch Frage was ist uprinter?

Hallo Liebes Forum,
Ich habe mir von github diese library ESC_POS_Printer heruntergeladen und es mit dem Beispiel A_printertest getestet leider geht der Tennsy 3.6 immer nur bis zu abfrage if (uprinter) und ich wollte euch fragen was abgefragt wird bei uprinter konnte leider nichts finden?
Hier noch mal der Sketch:

/*------------------------------------------------------------------------
  Example sketch for Adafruit Thermal Printer library for Arduino.
  Demonstrates a few text styles & layouts, bitmap printing, etc.

  IMPORTANT: DECLARATIONS DIFFER FROM PRIOR VERSIONS OF THIS LIBRARY.
  This is to support newer & more board types, especially ones that don't
  support SoftwareSerial (e.g. Arduino Due).  You can pass any Stream
  (e.g. Serial1) to the printer constructor.  See notes below.

  You may need to edit the PRINTER_FIRMWARE value in Adafruit_Thermal.h
  to match your printer (hold feed button on powerup for test page).
  ------------------------------------------------------------------------*/

#include "USBHost_t36.h"
#include "USBPrinter_t36.h"
#include "ESC_POS_Printer.h"
#include "qrcode.h"

USBHost myusb;
USBPrinter uprinter(myusb);
ESC_POS_Printer printer(&uprinter);

void setup() {
  Serial.begin(9600);
  while (!Serial && millis() < 3000) delay(1);
  Serial.println(F("Hello printer"));
  myusb.begin();
  Serial.println(F("Init USB"));
  uprinter.begin();
  Serial.println(F("Init USB printer"));
}

void printer_test()
{
  
  printer.feed(5);
  printer.reset();
  printer.setDefault(); // Restore printer to defaults


  // Test inverse on & off
  printer.inverseOn();
  printer.println(F("Inverse ON"));
  printer.inverseOff();

  // Test character double-height on & off
  printer.doubleHeightOn();
  printer.println(F("Double Height ON"));
  printer.doubleHeightOff();

  // Set text justification (right, center, left) -- accepts 'L', 'C', 'R'
  printer.justify('R');
  printer.println(F("Right justified"));
  printer.justify('C');
  printer.println(F("Center justified"));
  printer.justify('L');
  printer.println(F("Left justified"));

  // Test more styles
  printer.boldOn();
  printer.println(F("Bold text"));
  printer.boldOff();

  printer.underlineOn();
  printer.println(F("Underlined text"));
  printer.underlineOff();

  printer.setSize('L');        // Set type size, accepts 'S', 'M', 'L'
  printer.println(F("Large"));
  printer.setSize('M');
  printer.println(F("Medium"));
  printer.setSize('S');
  printer.println(F("Small"));

  printer.justify('C');
  printer.println(F("normal\nline\nspacing"));
  printer.setLineHeight(50);
  printer.println(F("Taller\nline\nspacing"));
  printer.setLineHeight(); // Reset to default
  printer.justify('L');

  // Print the QR code in graphics mode
  // See the ./bitmap/mkqrcode program to generate qrcode.h
  Serial.print(F("qrcode_data size = ")); Serial.println(sizeof(qrcode_data));
  printer.printBitmap(qrcode_width, qrcode_height, qrcode_data, qrcode_density);
  printer.println(F("ESC_POS_Printer"));

  printer.feed(2);
}

void loop() 
{
  myusb.Task();


  // Make sure USB printer found and ready [b]Was wird hier genau abgefragt?[/b]
  if (uprinter) {                                          
    printer.begin();
    Serial.println(F("Init ESC POS printer"));

    printer_test();
    // Do this one time to avoid wasting paper
    while (1) delay(1);
  }
}

So jetzt noch mal kurz das Setup habe am Teensy Board ein Usb Kabel angelötet und mit dem Usb Drucker Verbunden der Drucker ist der Epson TM-T88IV Model M129H!

Ich bedanke mich schon mal fürs lesen und hoffe ihr könnt mir helfen!

Bei solchen Abfragen wird der bool Operator überladen:

Da geht es praktisch immer darum dass das Objekt bereit zur Verwendung bereit ist. Also es gibt irgendeinen internen Zustand oder eine Status-Variable zurück

Konkret finde ich im Code aber auch nichts dazu. Etwas seltsam

Wo man das noch findet ist zum Beispiel in der Ethernet Klasse:

virtual operator bool() { return sockindex < MAX_SOCK_NUM; }

Konkret finde ich im Code aber auch nichts dazu. Etwas seltsam

Ein USBPrinter erbt von USBDriver, der diesen operator definiert.

github.com/PaulStoffregen/USBHost_t36/blob/master/USBHost_t36.h:

/************************************************/

/*  USB Device Driver Common Base Class        /
/
***********************************************/

// All USB device drivers inherit from this base class.
class USBDriver : public USBHost {
public:
operator bool() {
Device_t *dev = *(Device_t * volatile *)&device;
return dev != nullptr;
}

Fragt sich nun, warum die Member-Variable device bei dir nicht gesetzt ist…

Hi michael_x,

danke für die Hilfe nur leider verstehe ich nicht wie ich jetzt das Problem lösen kann, das er den Drucker erkennt. Würde mich sehr über ein Lösungsvorschlag oder eine Idee wie man zu einer Lösung meines Problems kommt freuen!

MfG CharlyNano

Hallo,

also USB-Host gehört zu den kompliziertesten Dingen, die man mit einem Microcontroller machen kann. Da habe ich mich bisher noch nicht rangetraut.

Ich weiß zumindest, dass auf den zweiten USB-Anschluss am Teensy 3.6 eigentlich Pins (Stiftleiste) kommen. Da dran kommt ein Pfostenstecker-zu-USB 2.0 A-Buchse Kabel, genau wie bei einem PC Motherboard. Das angelötete USB-Kabel könnte also schon mal eine potentielle Fehlerquelle sein.

Der Drucker hat ein Netzteil ? Ich denke nicht, dass der Teensy ihn versorgen könnte. Ob die 5 V auf dem Bus stabil sind, wäre das nächste was man sich anschauen könnte. (Eher mit dem Scope als mit dem Voltmeter.)

Wenn die Hardware ok schein, könnte man schauen, was auf dem Bus passiert. Da habe ich keinerlei praktische Erfahrung. Ich denke mal, das geht so ähnlich, wie bei dem "Test" Sketch in den Beispielen der USB-Host Library. Der ist allerdings für ein Display gedacht, müsste man auf serielle Ausgabe umschreiben. Ich bin mir auch ziemlich sicher, dass die Cracks im Teensy Forum mal einen Sketch stehen hatten, der alle Geräte inkl. Hubs auf dem Bus zeigte. Habe eben danach gesucht, ihn auf die Schnelle aber nicht gefunden.

Ich bin nicht sicher, ob es hier Leute gibt, die sich mit USB-Host auskennen. Eventuell ist das eher was für das Teensy Forum. Da sind sogar Leute, die einen USB-Ethernet Adapter an dem Teil am laufen haben ...

Ansonsten müssten wir uns hier vorsichtig auf unbekanntes Gebiet vorantasten.

Würde mich sehr über ein Lösungsvorschlag oder eine Idee wie man zu einer Lösung meines Problems kommt freuen!

Hab selber keinen Teensy3.6 und schon gar nicht solch einen Drucker.
Tut mir leid, dir da nicht wirklich weiterhelfen zu können.

Ein Teensy Forum wäre eventuell hilfreicher, wie ArduFE schon angemerkt hat.

Da das Beispiel auf einer ganzen Anzahl Libraries basiert, passen evtl. die Versionen nicht zusammen?
Von wann ist das Beispiel? Die zu dem Zeitpunkt aktuellen Libraries sollten ja damals funktioniert haben, wäre anzunehmen.

Rein theoretisch hast du alle Quellen da, und darfst nach Belieben drin rum pfuschen, um mehr rauszukriegen. Die Urheber haben es dir gegeben wie es ist, und wünschen dir viel Erfolg. :wink: