Beschimpfungsdrucker nachbauen?
Moderatoren: Heaterman, Finger, Sven, TDI, Marsupilami72, duese
Re: Beschimpfungsdrucker nachbauen?
Hier gibts schonmal ein Handbuch: https://download.epson-biz.com/modules/ ... t=3&pid=22
oder hier: https://www.bartec.de/de/downloads/mess ... Manual.pdf
Zumindest für die Dipschalter. Das netzteil nennt sich EPSON PS-170
Hier drin ist das Pinning der Schnittstelle beschrieben: https://files.support.epson.com/pdf/pos ... g_revb.pdf
Fuck, das ist tatsächlich die Parallelversion. Ist halt etwas mehr Aufwand, geht aber auch. Zum Netzteil hab ich noch nichts gefunden.....
oder hier: https://www.bartec.de/de/downloads/mess ... Manual.pdf
Zumindest für die Dipschalter. Das netzteil nennt sich EPSON PS-170
Hier drin ist das Pinning der Schnittstelle beschrieben: https://files.support.epson.com/pdf/pos ... g_revb.pdf
Fuck, das ist tatsächlich die Parallelversion. Ist halt etwas mehr Aufwand, geht aber auch. Zum Netzteil hab ich noch nichts gefunden.....
Re: Beschimpfungsdrucker nachbauen?
Wo kann man denn die Beschimpfungsdatei downloaden?
- Zummmsel
- Beiträge: 650
- Registriert: Di 26. Mai 2020, 00:23
- Wohnort: Südliches Tor zur Fränkischen
- Kontaktdaten:
Re: Beschimpfungsdrucker nachbauen?
Schau mal weiter oben, als TXT-Anhang an meinem Beitrag
Re: Beschimpfungsdrucker nachbauen?
Genau. Das sind die Richtigen! Danke!
Re: Beschimpfungsdrucker nachbauen?
Die Pinbelegung des Netzteilsteckern sollte sich relativ einfach ausmessen lassen.
Zuerst GND ausmessen, die anderen beiden sollten dann VCC sein.
Vorher aber mal die Leiterbahnen verfolgen ob das Sinn macht.
Zuerst GND ausmessen, die anderen beiden sollten dann VCC sein.
Vorher aber mal die Leiterbahnen verfolgen ob das Sinn macht.
Re: Beschimpfungsdrucker nachbauen?
Das Pinout habe ich gefunden, über dem etwas dünneren Pin ist GND und daneben +.
Wenn man von hinten auf die Buchse schaut ist links GND und rechts +.
Der Drucker lässt sich anschalten und auch das Papier wird gefördert,
eine Testseite kann der Möller offenbar nicht.
Wenn man von hinten auf die Buchse schaut ist links GND und rechts +.
Der Drucker lässt sich anschalten und auch das Papier wird gefördert,
eine Testseite kann der Möller offenbar nicht.
Re: Beschimpfungsdrucker nachbauen?
Hier sieht es schonmal gut aus:
https://www.youtube.com/watch?v=yNPC8QJPuZ4
Die Musik ist fürchterlich, aber das sieht für mein Vorhaben ganz richtig aus,
die Platine von dem Kerl ist auch 25 Polig aber der Selbsttest sagt Serial.
Das ganze sieht man bei Minute 4:34 Minuten.
Mein Selbsttest (Feed-Taste gedrückt halten und einschalten) ist wie vermutet:
Mal sehen, wenn sich meine Belagerung auf den WAF auswirkt:
Hier hat jemand einen Drucker (kein Thermodrucker, sondern einen normalen) rangetüdelt:
https://forum.arduino.cc/index.php?topic=74776.0
Könnte es damit funktionieren?
Was meinen die Experten dazu?
Gruß Pascal
https://www.youtube.com/watch?v=yNPC8QJPuZ4
Die Musik ist fürchterlich, aber das sieht für mein Vorhaben ganz richtig aus,
die Platine von dem Kerl ist auch 25 Polig aber der Selbsttest sagt Serial.
Das ganze sieht man bei Minute 4:34 Minuten.
Mein Selbsttest (Feed-Taste gedrückt halten und einschalten) ist wie vermutet:
Mal sehen, wenn sich meine Belagerung auf den WAF auswirkt:
Hier hat jemand einen Drucker (kein Thermodrucker, sondern einen normalen) rangetüdelt:
https://forum.arduino.cc/index.php?topic=74776.0
Könnte es damit funktionieren?
Was meinen die Experten dazu?
Gruß Pascal
-
- Beiträge: 3261
- Registriert: Mo 12. Aug 2013, 19:47
Re: Beschimpfungsdrucker nachbauen?
Was steht denn an der "Telefonbuchse" neben dem Centronicsport dran? Im Handbuch liest es sich so, als gäbe es beide Anschlüsse, nur Ethernet wäre optional, und eine Beschreibung der Buchsen ist nicht im Handbuch?
Seriell gab es auch mit 25 poligem Dsub, aber ist schon ewig her...
Seriell gab es auch mit 25 poligem Dsub, aber ist schon ewig her...
Re: Beschimpfungsdrucker nachbauen?
Die kleine Buchse ist zum Anschluss einer Geldschublade. Die wird dann dadurch entriegelt
Re: Beschimpfungsdrucker nachbauen?
Da steht DK, laut Anleitung ist das der Drawer-Kickout,
ich könnte somit nach der Beleidigung noch eine Kasse öffnen oder eine Arschtrittmaschine starten.
€dit für mich:
https://github.com/SilverGreen93/USB-Centronics
ich könnte somit nach der Beleidigung noch eine Kasse öffnen oder eine Arschtrittmaschine starten.
€dit für mich:
https://github.com/SilverGreen93/USB-Centronics
Re: Beschimpfungsdrucker nachbauen?
Heute wollte ich mal das hier testen:
https://forum.arduino.cc/index.php?topic=74776.0
Hier sah es noch knapp aber möglich aus:
Da ich die Leitungen von der Platine zu kurz gemacht habe,
war das eine ganz schöne Friemlei:
Leider sind die Drähtchen wieder aus dem Board gerutscht,
somit habe ich das für heute abgebrochen und versuche es morgen nochmals in Ruhe mit längeren Drähten...
https://forum.arduino.cc/index.php?topic=74776.0
Hier sah es noch knapp aber möglich aus:
Da ich die Leitungen von der Platine zu kurz gemacht habe,
war das eine ganz schöne Friemlei:
Leider sind die Drähtchen wieder aus dem Board gerutscht,
somit habe ich das für heute abgebrochen und versuche es morgen nochmals in Ruhe mit längeren Drähten...
-
- Beiträge: 3261
- Registriert: Mo 12. Aug 2013, 19:47
Re: Beschimpfungsdrucker nachbauen?
Den Drucker einfach auf die andere Seite zu legen oder die Steckplatine auf irgendwas draufzustellen wäre nicht gegangen?
Re: Beschimpfungsdrucker nachbauen?
Ja war gestern alles zu einfach .
Man will noch kurz was machen, hat aber eigentlich gar keine Zeit dafür,
dann reicht die Zeit dennoch und man verbockts halt doch wieder.
Daher lieber einen Schritt zurück und nochmals vorne mit passender Zeit-/Materialplanung .
Der Kübel druckt:
Jetzt kann ich weiter forschen um diese Punkte zu klären:
- Drucker das Papier abschneiden beibringen
- Drucker einen zufälligen Text ausgeben lassen, anhand einer TXT Datei oder so?
Mal schauen wie es weiter geht, der wichtigste Schritt ist jedenfalls gemacht .
Grüßle Pascal
€dit:
Das hier habe ich zum Thema Cut in der Anleitung gefunden, wie bekomme ich das in meinen Code?
Und wohin damit?
Man will noch kurz was machen, hat aber eigentlich gar keine Zeit dafür,
dann reicht die Zeit dennoch und man verbockts halt doch wieder.
Daher lieber einen Schritt zurück und nochmals vorne mit passender Zeit-/Materialplanung .
Der Kübel druckt:
Code: Alles auswählen
const int startup_charsPerLine = 80;
const int startup_num_lines = 2;
byte startup_message[startup_num_lines][startup_charsPerLine] = {
"This is the startup message. It prints whenever",
"the Arduino is reset.",
};
const int charsPerLine = 80; // this is the max # of chars per line
const int num_lines = 10;
byte message[num_lines][charsPerLine] = {
" ", // blank line
"This is the normal message. It prints whenever",
"you connect pin 14 (analog 0) to GND.",
" ", // blank line
"------------------------------------------------------------------------------", // a spiffy line
"1) More message content",
" ",
"II) you can have up to about 80 chars per line ",
" ",
"------------------------------------------------------------------------------",
};
// parallel port pin# = arduino pin#
const int nStrobe = 2;
const int data_0 = 3;
const int data_1 = 4;
const int data_2 = 5;
const int data_3 = 6;
const int data_4 = 7;
const int data_5 = 8;
const int data_6 = 9;
const int data_7 = 10;
const int nAck = 11;
const int busy = 12;
const int strobeWait = 2; // microseconds to strobe for
void setup() {
Serial.begin(9600);
pinMode(nStrobe, OUTPUT); // is active LOW
digitalWrite(nStrobe, HIGH); // set HIGH
pinMode(data_0, OUTPUT);
pinMode(data_1, OUTPUT);
pinMode(data_2, OUTPUT);
pinMode(data_3, OUTPUT);
pinMode(data_4, OUTPUT);
pinMode(data_5, OUTPUT);
pinMode(data_6, OUTPUT);
pinMode(data_7, OUTPUT);
pinMode(nAck, INPUT); // is active LOW
pinMode(busy, INPUT);
pinMode(13, OUTPUT);
pinMode(14, INPUT); // analog pin 0 on duemilanove and uno
digitalWrite(14, HIGH); // enable pull-up
delay(1000);
resetPrinter();
printStartupMessage();
resetPrinter();
Serial.println("Delay for 5 sec");
delay(5000);
Serial.println("Startup complete");
}
void loop() {
while(digitalRead(14) == HIGH) {
// wait
}
resetPrinter();
printMessage();
resetPrinter();
}
void printByte(byte inByte) {
while(digitalRead(busy) == HIGH) {
// wait for busy to go low
}
int b0 = bitRead(inByte, 0);
int b1 = bitRead(inByte, 1);
int b2 = bitRead(inByte, 2);
int b3 = bitRead(inByte, 3);
int b4 = bitRead(inByte, 4);
int b5 = bitRead(inByte, 5);
int b6 = bitRead(inByte, 6);
int b7 = bitRead(inByte, 7);
digitalWrite(data_0, b0); // set data bit pins
digitalWrite(data_1, b1);
digitalWrite(data_2, b2);
digitalWrite(data_3, b3);
digitalWrite(data_4, b4);
digitalWrite(data_5, b5);
digitalWrite(data_6, b6);
digitalWrite(data_7, b7);
digitalWrite(nStrobe, LOW); // strobe nStrobe to input data bits
delayMicroseconds(strobeWait);
digitalWrite(nStrobe, HIGH);
while(digitalRead(busy) == HIGH) {
// wait for busy line to go low
}
}
void resetPrinter() {
Serial.println("Reseting printer...");
printByte(27); // reset printer
printByte('E');
Serial.println("Printer Reset");
}
void printMessage() {
digitalWrite(13, HIGH);
for(int line = 0; line < num_lines; line++) {
for(int cursorPosition = 0; cursorPosition < charsPerLine; cursorPosition++) {
byte character = message[line][cursorPosition];
printByte(character);
delay(1);
}
printByte(10); // new line
printByte(13); // carriage return
}
digitalWrite(13,LOW);
}
void printStartupMessage() {
Serial.println("Print start-up mssage");
digitalWrite(13, HIGH);
for(int line = 0; line < startup_num_lines; line++) {
for(int cursorPosition = 0; cursorPosition < startup_charsPerLine; cursorPosition++) {
byte character = startup_message[line][cursorPosition];
printByte(character);
// delay(1);
}
printByte(10); // new line
printByte(13); // carriage return
Serial.print("Line ");
Serial.print(line);
Serial.println(" printed.");
}
Serial.println("Startup message printed");
digitalWrite(13,LOW);
}
Jetzt kann ich weiter forschen um diese Punkte zu klären:
- Drucker das Papier abschneiden beibringen
- Drucker einen zufälligen Text ausgeben lassen, anhand einer TXT Datei oder so?
Mal schauen wie es weiter geht, der wichtigste Schritt ist jedenfalls gemacht .
Grüßle Pascal
€dit:
Das hier habe ich zum Thema Cut in der Anleitung gefunden, wie bekomme ich das in meinen Code?
Und wohin damit?
Re: Beschimpfungsdrucker nachbauen?
Das Schneiden sollte nach dem Ausdruck erfolgen. Es wird entweder direkt nach dem Ausdruck geschnitten (m=1 oder 49), oder mit wählbarem Abstand (m=66, n=Abstand). Die Anleitung ist insofern Murks, als dass das Format von m und n nicht benannt ist, Du musst es probieren. Da es für alle Zahlenformate gleich dargestellt ist, wird es definitiv falsch sein und nur für ein Format passen. Eine typisch miserable Anleitung, von denen ich schon zu viele lesen durfte. Viel Erfolg...
MfG. Andreas
MfG. Andreas
Re: Beschimpfungsdrucker nachbauen?
ich hab noch einen Epson 88 in Seriell.
der soll auch mal Beschimpfungen drucken, oder Witze.
Epson Bon Drucker brauchen einen Steuerbefehl damit das Messer abschneidet.
Ist bei Epson POS dokumentiert.
der soll auch mal Beschimpfungen drucken, oder Witze.
Epson Bon Drucker brauchen einen Steuerbefehl damit das Messer abschneidet.
Ist bei Epson POS dokumentiert.
Re: Beschimpfungsdrucker nachbauen?
Ja da findet sich doch ruckzuck was "passendes":
https://reference.epson-biz.com/modules ... tent_id=72
Hier ist der Cut-Befehl zu finden:
https://reference.epson-biz.com/modules ... tent_id=87
Aber wie ich das in meinen Code bekomme ist mir noch total schleierhaft.
Auch scheint der Sketch den ich verwende extrem Speicherhungrig zu sein,
denn viel Text kann ich da nicht reinpacken.
Wenn du mit dem Cut Befehl weiter kommst, wäre es super,
wenn du es hier posten würdest.
Grüßle Pascal
https://reference.epson-biz.com/modules ... tent_id=72
Hier ist der Cut-Befehl zu finden:
https://reference.epson-biz.com/modules ... tent_id=87
Aber wie ich das in meinen Code bekomme ist mir noch total schleierhaft.
Auch scheint der Sketch den ich verwende extrem Speicherhungrig zu sein,
denn viel Text kann ich da nicht reinpacken.
Wenn du mit dem Cut Befehl weiter kommst, wäre es super,
wenn du es hier posten würdest.
Grüßle Pascal
Re: Beschimpfungsdrucker nachbauen?
Die Anleitung auf der Webseite legt nahe, dass es sich bei m und n um Dezimalwerte handelt. Probiere erst man den einfachen Schnitt aus. Das sind simple Textzeichen, die zum Drucker geschickt werden. Mit PrintByte() kannst Du die Zeichen übertragen, in Deinem Code findest Du schon Beispiele dazu.
MfG. Andreas
MfG. Andreas
Re: Beschimpfungsdrucker nachbauen?
const int startup_charsPerLine = 80; definiert die Anzahl Zeichen je Zeile auf 80
const int startup_num_lines = 2; Anzahl der Zeilen der Startnachricht
byte startup_message[startup_num_lines][startup_charsPerLine] = { "startup_message = Name der Variable für den Druck // {=Beginn der Nachricht?
"This is the startup message. It prints whenever", Zeile 1 Startnachricht
"the Arduino is reset.", Zeile 2 Startnachricht
}; } Ende der Nachricht?
const int charsPerLine = 80; // this is the max # of chars per line maximal 80 Zeichen je Zeile wie oben
const int num_lines = 10; Anzahl Zeilen für Pin A0 auf GND Druckausgabe
byte message[num_lines][charsPerLine] = { "message" ist der Name der Variable die später für den Druck aufgerufen wird?
" ", // blank line
"This is the normal message. It prints whenever",
"you connect pin 14 (analog 0) to GND.",
" ", // blank line
"------------------------------------------------------------------------------", // a spiffy line
"1) More message content",
" ",
"II) you can have up to about 80 chars per line ",
" ",
"------------------------------------------------------------------------------",
};
// parallel port pin# = arduino pin#
const int nStrobe = 2;
const int data_0 = 3;
const int data_1 = 4;
const int data_2 = 5;
const int data_3 = 6;
const int data_4 = 7;
const int data_5 = 8;
const int data_6 = 9;
const int data_7 = 10;
const int nAck = 11;
const int busy = 12;
const int strobeWait = 2; // microseconds to strobe for
void setup() {
Serial.begin(9600);
pinMode(nStrobe, OUTPUT); // is active LOW
digitalWrite(nStrobe, HIGH); // set HIGH
pinMode(data_0, OUTPUT);
pinMode(data_1, OUTPUT);
pinMode(data_2, OUTPUT);
pinMode(data_3, OUTPUT);
pinMode(data_4, OUTPUT);
pinMode(data_5, OUTPUT);
pinMode(data_6, OUTPUT);
pinMode(data_7, OUTPUT);
pinMode(nAck, INPUT); // is active LOW
pinMode(busy, INPUT);
pinMode(13, OUTPUT);
pinMode(14, INPUT); // analog pin 0 on duemilanove and uno
digitalWrite(14, HIGH); // enable pull-up
delay(1000);
resetPrinter();
printStartupMessage(); Aufruf Druckbefehl für Startdruck
resetPrinter();
Serial.println("Delay for 5 sec"); Ausgabe Serielle Schnittstelle Log?
delay(5000); Wartezeit 5 Sekunden, bis der nächste Resetbefehl kommen darf?
Serial.println("Startup complete"); Ausgabe Serielle Schnittstelle Log?
}
void loop() {
while(digitalRead(14) == HIGH) {
// wait
}
resetPrinter();
printMessage();
resetPrinter();
}
void printByte(byte inByte) {
while(digitalRead(busy) == HIGH) {
// wait for busy to go low
}
int b0 = bitRead(inByte, 0);
int b1 = bitRead(inByte, 1);
int b2 = bitRead(inByte, 2);
int b3 = bitRead(inByte, 3);
int b4 = bitRead(inByte, 4);
int b5 = bitRead(inByte, 5);
int b6 = bitRead(inByte, 6);
int b7 = bitRead(inByte, 7);
digitalWrite(data_0, b0); // set data bit pins
digitalWrite(data_1, b1);
digitalWrite(data_2, b2);
digitalWrite(data_3, b3);
digitalWrite(data_4, b4);
digitalWrite(data_5, b5);
digitalWrite(data_6, b6);
digitalWrite(data_7, b7);
digitalWrite(nStrobe, LOW); // strobe nStrobe to input data bits
delayMicroseconds(strobeWait);
digitalWrite(nStrobe, HIGH);
while(digitalRead(busy) == HIGH) {
// wait for busy line to go low
}
}
void resetPrinter() {
Serial.println("Reseting printer..."); Ausgabe Serielle Schnittstelle Log?
printByte(27); // reset printer 27= setzt den Drucker tatsächlich zurück?
printByte('E'); ?
Serial.println("Printer Reset"); Ausgabe Serielle Schnittstelle Log?
}
void printMessage() {
digitalWrite(13, HIGH);
for(int line = 0; line < num_lines; line++) { legt die Zeile 1 als Zeile 0 fest und gibt die Addition der nächsten Zeilen vor?
for(int cursorPosition = 0; cursorPosition < charsPerLine; cursorPosition++) {
byte character = message[line][cursorPosition]; Variable "message" wird aufgerufen
printByte(character);
delay(1);
}
printByte(10); // new line ?
printByte(13); // carriage return ?
}
digitalWrite(13,LOW);
}
void printStartupMessage() {
Serial.println("Print start-up mssage"); Ausgabe der Seriellen Schnittstelle, als Log?
digitalWrite(13, HIGH);
for(int line = 0; line < startup_num_lines; line++) {
for(int cursorPosition = 0; cursorPosition < startup_charsPerLine; cursorPosition++) { was bedeutet das cursorPosition?
byte character = startup_message[line][cursorPosition]; Variable "startup_message" wird aufgerufen
printByte(character);
// delay(1);
}
printByte(10); // new line
printByte(13); // carriage return
Serial.print("Line "); Ausgabe Serielle Schnittstelle Log, Line ist der Text der ausgegeben wird
Serial.print(line); Ausgabe Serielle Schnittstelle Log, "line" die Zahl der Zeile?
Serial.println(" printed."); Ausgabe Serielle Schnittstelle Log?
}
Serial.println("Startup message printed"); Ausgabe Serielle Schnittstelle Log?
digitalWrite(13,LOW);
}
------------------------------------------------------------------------------------
Ich habe mal versucht den Code/Sketch zu kommentieren, mit dem was ich zum Teil meine wofür das gut sein soll.
@andreas6:
Ich bin dafür glaub echt zu doof, bzw. einfach noch zu weit weg von dem ganzen Thema,
ich habe das vorhin einfach mal versucht. Das einzige was ich hinbekommen habe war,
dass vor meinem Text eine Zahl/Buchstabe vorne angestellt wurde.
Kannst du mir sagen wo ich das einfügen müsste und wie es genau aussehen müsste?
Jetzt geht´s erstmal mit dem Sohnemann spazieren, so kann man nicht arbeiten mit einem schreiendem Baby
Gruß Pascal
const int startup_num_lines = 2; Anzahl der Zeilen der Startnachricht
byte startup_message[startup_num_lines][startup_charsPerLine] = { "startup_message = Name der Variable für den Druck // {=Beginn der Nachricht?
"This is the startup message. It prints whenever", Zeile 1 Startnachricht
"the Arduino is reset.", Zeile 2 Startnachricht
}; } Ende der Nachricht?
const int charsPerLine = 80; // this is the max # of chars per line maximal 80 Zeichen je Zeile wie oben
const int num_lines = 10; Anzahl Zeilen für Pin A0 auf GND Druckausgabe
byte message[num_lines][charsPerLine] = { "message" ist der Name der Variable die später für den Druck aufgerufen wird?
" ", // blank line
"This is the normal message. It prints whenever",
"you connect pin 14 (analog 0) to GND.",
" ", // blank line
"------------------------------------------------------------------------------", // a spiffy line
"1) More message content",
" ",
"II) you can have up to about 80 chars per line ",
" ",
"------------------------------------------------------------------------------",
};
// parallel port pin# = arduino pin#
const int nStrobe = 2;
const int data_0 = 3;
const int data_1 = 4;
const int data_2 = 5;
const int data_3 = 6;
const int data_4 = 7;
const int data_5 = 8;
const int data_6 = 9;
const int data_7 = 10;
const int nAck = 11;
const int busy = 12;
const int strobeWait = 2; // microseconds to strobe for
void setup() {
Serial.begin(9600);
pinMode(nStrobe, OUTPUT); // is active LOW
digitalWrite(nStrobe, HIGH); // set HIGH
pinMode(data_0, OUTPUT);
pinMode(data_1, OUTPUT);
pinMode(data_2, OUTPUT);
pinMode(data_3, OUTPUT);
pinMode(data_4, OUTPUT);
pinMode(data_5, OUTPUT);
pinMode(data_6, OUTPUT);
pinMode(data_7, OUTPUT);
pinMode(nAck, INPUT); // is active LOW
pinMode(busy, INPUT);
pinMode(13, OUTPUT);
pinMode(14, INPUT); // analog pin 0 on duemilanove and uno
digitalWrite(14, HIGH); // enable pull-up
delay(1000);
resetPrinter();
printStartupMessage(); Aufruf Druckbefehl für Startdruck
resetPrinter();
Serial.println("Delay for 5 sec"); Ausgabe Serielle Schnittstelle Log?
delay(5000); Wartezeit 5 Sekunden, bis der nächste Resetbefehl kommen darf?
Serial.println("Startup complete"); Ausgabe Serielle Schnittstelle Log?
}
void loop() {
while(digitalRead(14) == HIGH) {
// wait
}
resetPrinter();
printMessage();
resetPrinter();
}
void printByte(byte inByte) {
while(digitalRead(busy) == HIGH) {
// wait for busy to go low
}
int b0 = bitRead(inByte, 0);
int b1 = bitRead(inByte, 1);
int b2 = bitRead(inByte, 2);
int b3 = bitRead(inByte, 3);
int b4 = bitRead(inByte, 4);
int b5 = bitRead(inByte, 5);
int b6 = bitRead(inByte, 6);
int b7 = bitRead(inByte, 7);
digitalWrite(data_0, b0); // set data bit pins
digitalWrite(data_1, b1);
digitalWrite(data_2, b2);
digitalWrite(data_3, b3);
digitalWrite(data_4, b4);
digitalWrite(data_5, b5);
digitalWrite(data_6, b6);
digitalWrite(data_7, b7);
digitalWrite(nStrobe, LOW); // strobe nStrobe to input data bits
delayMicroseconds(strobeWait);
digitalWrite(nStrobe, HIGH);
while(digitalRead(busy) == HIGH) {
// wait for busy line to go low
}
}
void resetPrinter() {
Serial.println("Reseting printer..."); Ausgabe Serielle Schnittstelle Log?
printByte(27); // reset printer 27= setzt den Drucker tatsächlich zurück?
printByte('E'); ?
Serial.println("Printer Reset"); Ausgabe Serielle Schnittstelle Log?
}
void printMessage() {
digitalWrite(13, HIGH);
for(int line = 0; line < num_lines; line++) { legt die Zeile 1 als Zeile 0 fest und gibt die Addition der nächsten Zeilen vor?
for(int cursorPosition = 0; cursorPosition < charsPerLine; cursorPosition++) {
byte character = message[line][cursorPosition]; Variable "message" wird aufgerufen
printByte(character);
delay(1);
}
printByte(10); // new line ?
printByte(13); // carriage return ?
}
digitalWrite(13,LOW);
}
void printStartupMessage() {
Serial.println("Print start-up mssage"); Ausgabe der Seriellen Schnittstelle, als Log?
digitalWrite(13, HIGH);
for(int line = 0; line < startup_num_lines; line++) {
for(int cursorPosition = 0; cursorPosition < startup_charsPerLine; cursorPosition++) { was bedeutet das cursorPosition?
byte character = startup_message[line][cursorPosition]; Variable "startup_message" wird aufgerufen
printByte(character);
// delay(1);
}
printByte(10); // new line
printByte(13); // carriage return
Serial.print("Line "); Ausgabe Serielle Schnittstelle Log, Line ist der Text der ausgegeben wird
Serial.print(line); Ausgabe Serielle Schnittstelle Log, "line" die Zahl der Zeile?
Serial.println(" printed."); Ausgabe Serielle Schnittstelle Log?
}
Serial.println("Startup message printed"); Ausgabe Serielle Schnittstelle Log?
digitalWrite(13,LOW);
}
------------------------------------------------------------------------------------
Ich habe mal versucht den Code/Sketch zu kommentieren, mit dem was ich zum Teil meine wofür das gut sein soll.
@andreas6:
Ich bin dafür glaub echt zu doof, bzw. einfach noch zu weit weg von dem ganzen Thema,
ich habe das vorhin einfach mal versucht. Das einzige was ich hinbekommen habe war,
dass vor meinem Text eine Zahl/Buchstabe vorne angestellt wurde.
Kannst du mir sagen wo ich das einfügen müsste und wie es genau aussehen müsste?
Jetzt geht´s erstmal mit dem Sohnemann spazieren, so kann man nicht arbeiten mit einem schreiendem Baby
Gruß Pascal
Re: Beschimpfungsdrucker nachbauen?
Setzt den Code bitte in die Code Tags
Code: Alles auswählen
Beispiel
Re: Beschimpfungsdrucker nachbauen?
Davon abgesehen, ist das ein Beispielprogramm. Es soll zeigen, was dort möglich ist und wie man es macht. So etwas passt man behutsam an und vermerkt sich auch die Änderungen, erzeugt sozusagen neue Versionen und testet die aus. Eigene Kommentare sind ganz wichtig, damit man Jahre später auch noch was damit anfangen kann. Wesentlich leichter fällt der Umgang damit, wenn man einen Editor für Programmierer benutzt, der auch mit Einrückungen und Schlüsselworten umgehen kann. Ich nutze gewöhnlich Programmers Notepad und selten mal Notepad++ (das kann auch hex). Das Verstehen des Programms wird Dir keiner abnehmen können, da musst Du selber durch. Dann werden Dir auch Änderungen leichter fallen.
MfG. Andreas
MfG. Andreas
-
- Beiträge: 1063
- Registriert: Di 22. Aug 2017, 05:19
- Wohnort: Berlin
Re: Beschimpfungsdrucker nachbauen?
Wenn Dich der Gilb stört, such mal nach retrobrite, da gibts jede Menge dazu im Netz.
TL;DR: H2O2 + UV
Kein Problem, dafür gibt es wahlweise EEPROMs oder SD-Karten-Module:Ich muss mal schauen, wir ich am sinnvollsten die Textdatei einbinde......
256kB:
https://www.aliexpress.com/item/32837253262.html
Datasheet: http://ww1.microchip.com/downloads/en/d ... oc0670.pdf
SD:
https://www.aliexpress.com/item/2046499166.html
Re: Beschimpfungsdrucker nachbauen?
Hallo zusammen,
SD-Karte wäre glaub das richtige, dann kann ich einfach die Funktion austauschen,
mal Beschimpfungen, mal Komplimente, mal Trinksprüche, etc.
Aber dafür es ist noch zu früh.
Gestern Abend habe ich noch mit dem printByte Befehlen gespielt,
der Drucker hat doch tatsächlich geschnitten.
Der Text wird noch abgeschnitten (erster Buchstabe und das Ende) und seltsam formatiert,
aber er druckt und schneidet, dass freut mich schonmal .
Code gesamt:
Das passiert im Seriellen Monitor:
Diese 3 printByte Befehle haben den Drucker zum schneiden gebracht:
Leider wird der Text nicht richtig gedruckt:
Kann mir jemand die genaue Funktion (steht am Anfang des Codes) dieses Schnipsels erklären?
const int, sind nach meinem Verständnis feste Werte, was aber ja in meinem Fall falsch ist, da die Werte nicht feststehen?
Es könnte ja ein kürzerer oder längerer Text kommen?
Hier stehe ich auf auf dem Schlauch:
Gruß Pascal
SD-Karte wäre glaub das richtige, dann kann ich einfach die Funktion austauschen,
mal Beschimpfungen, mal Komplimente, mal Trinksprüche, etc.
Aber dafür es ist noch zu früh.
Gestern Abend habe ich noch mit dem printByte Befehlen gespielt,
der Drucker hat doch tatsächlich geschnitten.
Der Text wird noch abgeschnitten (erster Buchstabe und das Ende) und seltsam formatiert,
aber er druckt und schneidet, dass freut mich schonmal .
Code gesamt:
Code: Alles auswählen
const int charsPerLine = 80; // this is the max # of chars per line
const int num_lines = 1;
byte message[num_lines][charsPerLine] = {
// " ", // blank line
" Als Kind hat dir doch Deine Mutter ein Kotelett umgehängt, damit wenigstens der Hund mit dir spielt!",
// " ", // blank line
//"------------------------------------------------------------------------------", // a spiffy line
};
// parallel port pin# = arduino pin#
const int nStrobe = 2;
const int data_0 = 3;
const int data_1 = 4;
const int data_2 = 5;
const int data_3 = 6;
const int data_4 = 7;
const int data_5 = 8;
const int data_6 = 9;
const int data_7 = 10;
const int nAck = 11;
const int busy = 12;
const int strobeWait = 2; // microseconds to strobe for
void setup() {
Serial.begin(9600);
pinMode(nStrobe, OUTPUT); // is active LOW
digitalWrite(nStrobe, HIGH); // set HIGH
pinMode(data_0, OUTPUT);
pinMode(data_1, OUTPUT);
pinMode(data_2, OUTPUT);
pinMode(data_3, OUTPUT);
pinMode(data_4, OUTPUT);
pinMode(data_5, OUTPUT);
pinMode(data_6, OUTPUT);
pinMode(data_7, OUTPUT);
pinMode(nAck, INPUT); // is active LOW
pinMode(busy, INPUT);
pinMode(13, OUTPUT);
pinMode(14, INPUT); // analog pin 0 on duemilanove and uno
digitalWrite(14, HIGH); // enable pull-up
delay(1000);
resetPrinter();
Serial.println("Delay for 5 sec");
delay(5000);
Serial.println("Startup complete");
}
void loop() {
while(digitalRead(14) == HIGH) {
// wait
}
resetPrinter();
printMessage(); // Druckausgabe aktiv
delay(1000);
resetPrinter();
}
void printByte(byte inByte) {
while(digitalRead(busy) == HIGH) {
// wait for busy to go low
}
int b0 = bitRead(inByte, 0);
int b1 = bitRead(inByte, 1);
int b2 = bitRead(inByte, 2);
int b3 = bitRead(inByte, 3);
int b4 = bitRead(inByte, 4);
int b5 = bitRead(inByte, 5);
int b6 = bitRead(inByte, 6);
int b7 = bitRead(inByte, 7);
digitalWrite(data_0, b0); // set data bit pins
digitalWrite(data_1, b1);
digitalWrite(data_2, b2);
digitalWrite(data_3, b3);
digitalWrite(data_4, b4);
digitalWrite(data_5, b5);
digitalWrite(data_6, b6);
digitalWrite(data_7, b7);
digitalWrite(nStrobe, LOW); // strobe nStrobe to input data bits
delayMicroseconds(strobeWait);
digitalWrite(nStrobe, HIGH);
while(digitalRead(busy) == HIGH) {
// wait for busy line to go low
}
}
void resetPrinter() {
Serial.println("Reseting printer...");
printByte(27); // reset printer
Serial.println("Printer Reset");
}
void printMessage() {
digitalWrite(13, HIGH);
for(int line = 0; line < num_lines; line++) {
for(int cursorPosition = 0; cursorPosition < charsPerLine; cursorPosition++) {
byte character = message[line][cursorPosition];
printByte(character);
delay(1);
}
printByte(10); // new line
printByte(13); // carriage return
printByte(0x1D); // cut befehl = 29 als Zahl
printByte('V'); // cut befehl
printByte(66); // cut befehl
}
digitalWrite(13,LOW);
}
Code: Alles auswählen
09:37:18.082 -> Reseting printer...
09:37:18.082 -> Printer Reset
09:37:18.082 -> Delay for 5 sec
09:37:23.055 -> Startup complete
09:37:30.363 -> Reseting printer... --> A0 auf GND gezogen
09:37:30.363 -> Printer Reset
09:37:31.448 -> Reseting printer...
09:37:31.448 -> Printer Reset
Diese 3 printByte Befehle haben den Drucker zum schneiden gebracht:
Code: Alles auswählen
printByte(0x1D); // cut befehl = 29 als Zahl
printByte('V'); // cut befehl
printByte(66); // cut befehl
Leider wird der Text nicht richtig gedruckt:
Kann mir jemand die genaue Funktion (steht am Anfang des Codes) dieses Schnipsels erklären?
const int, sind nach meinem Verständnis feste Werte, was aber ja in meinem Fall falsch ist, da die Werte nicht feststehen?
Es könnte ja ein kürzerer oder längerer Text kommen?
Code: Alles auswählen
const int charsPerLine = 80; // this is the max # of chars per line
const int num_lines = 1;
byte message[num_lines][charsPerLine] = {
Code: Alles auswählen
void printMessage() {
digitalWrite(13, HIGH);
for(int line = 0; line < num_lines; line++) {
for(int cursorPosition = 0; cursorPosition < charsPerLine; cursorPosition++) {
byte character = message[line][cursorPosition];
printByte(character);
Gruß Pascal
Re: Beschimpfungsdrucker nachbauen?
printByte sieht nach Paralleldrucker aus, ebenso wie der Centronics-Stecker an deinem Spielzeug - aber das nur am Rande.
Strings in C (C++) sind null-terminiert.
Das Ganze erst mal für eine Message:
Würde ich aber in eine Funktion packen, z.B. printString und den Pointer übergeben ...
lässt sich zusammenfassen zu
Edith meinte: Centronics schreibt sich so ...
FYI: https://www.c64-wiki.de/wiki/Centronics-Schnittstelle - mal was aus "der guten alten Zeit".
HANDSHAKE: https://www.cfd.tu-berlin.de/Lehre/EDV1 ... de164.html
Strings in C (C++) sind null-terminiert.
Das Ganze erst mal für eine Message:
Code: Alles auswählen
char * message = "Hello World!";
byte character;
int i = 0;
while ((character = message[i]) != '\0') {
i++;
printf("%c", character);
}
Code: Alles auswählen
while ((character = message[i]) != '\0') {
i++;
....
}
Code: Alles auswählen
while ((character = message[i++]) != '\0') {
....
}
FYI: https://www.c64-wiki.de/wiki/Centronics-Schnittstelle - mal was aus "der guten alten Zeit".
HANDSHAKE: https://www.cfd.tu-berlin.de/Lehre/EDV1 ... de164.html
Re: Beschimpfungsdrucker nachbauen?
Nachdem ich hier dauernd von so Druckern lesen muss, habe ich mal meinen Thermopapierdrucker rausgekramt, den ich im Winter auf nem Flohmarkt gekauft hatte. Jetzt muss ich auch mal damit was bauen.
Mein Drucker RS232, Ethernet und USB. Auf der Unterseite sind noch ein paar Dip-Schalter hinter einer Abdeckung. Typenbezeichnung - öh ja, die steht hoffentlich unter dem Aufkleber, nicht auf dem fehlenden Gehäuseteil.
Hinten hat der so einen Stecker, wie die Metcal PS-900 für den Lötkolben:
https://res.cloudinary.com/iwh/image/up ... PS-900.jpg
Irgendwas mit 24V/5A habe ich dazu im Kopf. Kennt jemand die Typenbezeichnung und eine Bezugsquelle (außer Lötkolben abschneiden)?
Mein Drucker RS232, Ethernet und USB. Auf der Unterseite sind noch ein paar Dip-Schalter hinter einer Abdeckung. Typenbezeichnung - öh ja, die steht hoffentlich unter dem Aufkleber, nicht auf dem fehlenden Gehäuseteil.
Hinten hat der so einen Stecker, wie die Metcal PS-900 für den Lötkolben:
https://res.cloudinary.com/iwh/image/up ... PS-900.jpg
Irgendwas mit 24V/5A habe ich dazu im Kopf. Kennt jemand die Typenbezeichnung und eine Bezugsquelle (außer Lötkolben abschneiden)?
Re: Beschimpfungsdrucker nachbauen?
hmmm, kann man dafür irgendwie einen (USB...)-Dymo Labelwriter 400 benutzen?
dann könnt man sogar Beschimpfungsaufkleber drucken (und ich hab hier so ein Teil stehen,
das ist der Hauptgrund... ähem. )
jemand ne Idee?
dann könnt man sogar Beschimpfungsaufkleber drucken (und ich hab hier so ein Teil stehen,
das ist der Hauptgrund... ähem. )
jemand ne Idee?
-
- Beiträge: 1063
- Registriert: Di 22. Aug 2017, 05:19
- Wohnort: Berlin
Re: Beschimpfungsdrucker nachbauen?
Das wird unverhältnismäßig sportlich, USB-host aufm Mikrocontroller. Am ehesten würde sich da wohl ein olles smartphone eignen, aber es gibt natürlich auch muskulösere Mikro-Controller, die das können.
Ich würd' das Ding aufmachen und gucken, wo aus dem USB2serial-chip das serielle Signal rausfällt und da einen Arduino anflanschen.
Als nächstes musst Du dann noch die Geschwindigkeit rausfinden (9600-19200 sind gute Kandidaten, entweder mit XON/XOFF oder hardware handshake), das Protokoll herausfinden (ausprobieren (einfach mal ASCII draufschmeißen), Doku auftreiben oder logic-Analyser während Du vom Computer drauf druckst).
Ich würd' das Ding aufmachen und gucken, wo aus dem USB2serial-chip das serielle Signal rausfällt und da einen Arduino anflanschen.
Als nächstes musst Du dann noch die Geschwindigkeit rausfinden (9600-19200 sind gute Kandidaten, entweder mit XON/XOFF oder hardware handshake), das Protokoll herausfinden (ausprobieren (einfach mal ASCII draufschmeißen), Doku auftreiben oder logic-Analyser während Du vom Computer drauf druckst).
- Fritzler
- Beiträge: 12603
- Registriert: So 11. Aug 2013, 19:42
- Wohnort: D:/Berlin/Adlershof/Technologiepark
- Kontaktdaten:
Re: Beschimpfungsdrucker nachbauen?
Nö, STM32 haben das eingebaut.berlinerbaer hat geschrieben: ↑So 7. Jun 2020, 01:13 Das wird unverhältnismäßig sportlich, USB-host aufm Mikrocontroller.
Nur der ST Cube HAL Treiber ist maximal besch*ssen.
Meine E-Last kann daher aufn USB Stick loggen
Re: Beschimpfungsdrucker nachbauen?
Hallo zusammen,
mittlerweile habe ich es (mit Hilfe, vielen Dank nochmals!) hinbekommen,
dass der Drucker einen Text (steht alleine und fest im Code) druckt und den Zettel abschneidet.
Das Problem mit den vielen Leerzeichen beim ausdrucken, kann ich mir nicht erklären,
als ich die Verkabelung nochmals nachgesteckt habe, sahen die Ausdrucke gut aus:
(vermutlich hat das Breadboard eine Macke )
aktueller Code:
Wegen der SD-karte habe ich nun das hier bestellt, auf China mag ich jetzt nicht warten:
https://www.amazon.de/gp/product/B06XHJTGGC/
Nächste Schritte:
- versuchen mehr Texte einzubinden und einen davon zufällig auszudrucken, wenn der Taster gedrückt wird
Schritte danach:
- SD-Karten Modul verdrahten und Karte einbinden (geht das überhaupt noch, digitale Pins belegt D2-D12?)
-- Texte darauf ablegen und im Code verarbeiten
- Layout für Bons erzeugen (Überschrift, Formatierung)
- ggf. Statistik (Anzahl, Uhrzeit, Datum, etc.)
Wenn das alles klappt, bin ich schon dermaßen zufrieden, dass der Benzinkanister und die Streichhölzer wohl nicht mehr zum Einsatz kommen .
Gruß Pascal
mittlerweile habe ich es (mit Hilfe, vielen Dank nochmals!) hinbekommen,
dass der Drucker einen Text (steht alleine und fest im Code) druckt und den Zettel abschneidet.
Das Problem mit den vielen Leerzeichen beim ausdrucken, kann ich mir nicht erklären,
als ich die Verkabelung nochmals nachgesteckt habe, sahen die Ausdrucke gut aus:
(vermutlich hat das Breadboard eine Macke )
aktueller Code:
Code: Alles auswählen
const int charsPerLine = 800; // this is the max # of chars per line
const int num_lines = 1;
byte message[num_lines][charsPerLine] = {
"Wenn mein Hund Dein Gesicht haette wuerde ich ihm den Arsch rasieren und ihm beibringen rueckwaerts zu laufen !!!!"
};
// parallel port pin# = arduino pin#
const int nStrobe = 2;
const int data_0 = 3;
const int data_1 = 4;
const int data_2 = 5;
const int data_3 = 6;
const int data_4 = 7;
const int data_5 = 8;
const int data_6 = 9;
const int data_7 = 10;
const int nAck = 11;
const int busy = 12;
const int strobeWait = 2; // microseconds to strobe for
void setup() {
Serial.begin(9600);
pinMode(nStrobe, OUTPUT); // is active LOW
digitalWrite(nStrobe, HIGH); // set HIGH
pinMode(data_0, OUTPUT);
pinMode(data_1, OUTPUT);
pinMode(data_2, OUTPUT);
pinMode(data_3, OUTPUT);
pinMode(data_4, OUTPUT);
pinMode(data_5, OUTPUT);
pinMode(data_6, OUTPUT);
pinMode(data_7, OUTPUT);
pinMode(nAck, INPUT); // is active LOW
pinMode(busy, INPUT);
pinMode(13, OUTPUT);
pinMode(14, INPUT); // analog pin 0 on duemilanove and uno
digitalWrite(14, HIGH); // enable pull-up
delay(1000);
}
void loop() {
while(digitalRead(14) == HIGH) {}
printMessage(); // Druckausgabe aktiv
abschneiden(); // aktiviert cutter
delay(500);
}
void printByte(byte inByte) {
while(digitalRead(busy) == HIGH) {
// wait for busy to go low
}
int b0 = bitRead(inByte, 0);
int b1 = bitRead(inByte, 1);
int b2 = bitRead(inByte, 2);
int b3 = bitRead(inByte, 3);
int b4 = bitRead(inByte, 4);
int b5 = bitRead(inByte, 5);
int b6 = bitRead(inByte, 6);
int b7 = bitRead(inByte, 7);
digitalWrite(data_0, b0); // set data bit pins
digitalWrite(data_1, b1);
digitalWrite(data_2, b2);
digitalWrite(data_3, b3);
digitalWrite(data_4, b4);
digitalWrite(data_5, b5);
digitalWrite(data_6, b6);
digitalWrite(data_7, b7);
digitalWrite(nStrobe, LOW); // strobe nStrobe to input data bits
delayMicroseconds(strobeWait);
digitalWrite(nStrobe, HIGH);
while(digitalRead(busy) == HIGH) {
// wait for busy line to go low
}
}
void printMessage() {
digitalWrite(13, HIGH);
for(int line = 0; line < num_lines; line++) {
for(int cursorPosition = 0; cursorPosition < charsPerLine; cursorPosition++) {
byte character = message[line][cursorPosition];
printByte(character);
delay(1);
}
}
digitalWrite(13,LOW);
}
void abschneiden()
{
// const char schnipp = "\n\r\x1dVB" ;
// printByte(schnipp);
printByte(10); // new line
printByte(13); // carriage return
printByte(10); // new line
printByte(0x1D); // cut befehl = 29 als Zahl
printByte('V'); // cut befehl
printByte(66); // cut befehl
printByte(27); // reset printer
}
https://www.amazon.de/gp/product/B06XHJTGGC/
Nächste Schritte:
- versuchen mehr Texte einzubinden und einen davon zufällig auszudrucken, wenn der Taster gedrückt wird
Schritte danach:
- SD-Karten Modul verdrahten und Karte einbinden (geht das überhaupt noch, digitale Pins belegt D2-D12?)
-- Texte darauf ablegen und im Code verarbeiten
- Layout für Bons erzeugen (Überschrift, Formatierung)
- ggf. Statistik (Anzahl, Uhrzeit, Datum, etc.)
Wenn das alles klappt, bin ich schon dermaßen zufrieden, dass der Benzinkanister und die Streichhölzer wohl nicht mehr zum Einsatz kommen .
Gruß Pascal
- Fritzler
- Beiträge: 12603
- Registriert: So 11. Aug 2013, 19:42
- Wohnort: D:/Berlin/Adlershof/Technologiepark
- Kontaktdaten:
Re: Beschimpfungsdrucker nachbauen?
War glaube son USB Host IC von FTDI.
Aber diese Firma sollte man nach deren Treibergebahren eh nicht mehr verbauen.
Re: Beschimpfungsdrucker nachbauen?
Fast.
CH376S
Und wer bei Amazon bestellt kann auch FTDI verbauen (gehört aber nicht hier her...).
CH376S
Und wer bei Amazon bestellt kann auch FTDI verbauen (gehört aber nicht hier her...).
Re: Beschimpfungsdrucker nachbauen?
Howdy!
Hansele hat geschrieben: ↑So 7. Jun 2020, 21:06 - SD-Karten Modul verdrahten und Karte einbinden (geht das überhaupt noch, digitale Pins belegt D2-D12?)
[/quote
A0 .. A5 sind noch frei?
SD-Karten werden imho per SPI angeschlossen. Das belegt:
MOSI - pin 11 on Arduino Uno
MISO - pin 12
CLK - pin 13
CS - da tuts glaub irgendwas
Mach halt mal eine Aufstellung was womit belegt ist.
Im Notfall: Ein etwas größerer Arduino kostet nich die Welt
Grüße
-J
Zuletzt geändert von j.o.e am Di 9. Jun 2020, 20:00, insgesamt 1-mal geändert.
- Fritzler
- Beiträge: 12603
- Registriert: So 11. Aug 2013, 19:42
- Wohnort: D:/Berlin/Adlershof/Technologiepark
- Kontaktdaten:
Re: Beschimpfungsdrucker nachbauen?
Durchaus interessant was die Chinesen da wieder fabrizieren.
Hatte ich ja eigentlich auch nicht nicht vor
Oder wo bekomme ich noch nen raaco 8x4 und die Einlagen extra?