Also PC ist ja mehr oder weniger ein Synonym für Computer mit Windows.
Ich frage jetzt mal explizit nach:
Kommst du ohne Geld auszugeben an einen WINDOWS-PC dran?
Damit wird die Sache sehr viel einfacher.
Oder könntest du ca. 50 Euro für einen gebrauchten mini PC mit Windows 10 ausgeben?
Im Prinzip tut es da jeder "olle" PC oder ein olles Notebook mit Windows 10.
Bild-Dateien drucken bekommt so ein oller Rechner auch hin.
Die Idee mit Cmd-Fenster ist gut.
Da könnte der Arduino auch gleich direkt den Druckbefehl reinschreiben.
Wenn man es über Batch-Dateien macht dann hat man die Flexibilität dass man den Dateinamen und Dateipfad in der Batch-Datei anpassen kann.
Windows hat das Pixeml-Malprogramm mspaint mit dabei.
Das kann man mit Parametern aufrufen so das eine Bilddatei gedruckt wird
Hier mal ein Demo-Code für eine Taste
getestet auf einem Arduino pro Micro (Arduino Leonardo)
Ich habe mir vor längerer Zeit mal die standard keybger-library erweitert, dass sie wirklich alle Umlaute und Sonderzeichen der deutschen Tastatur richtig ausgibt.
Daher die Library KeyboardGER2.h
KeyboardGER2.zip (6.7 KB)
Wann immer ich Strings benutze nehme ich die SafeString-library
die kann man sich über den Library-Manager der Arduino-IDE installieren
Hier der Demo-Code. Ganz simpel "entprellen" über ein delay(5000);
#include <KeyboardGER2.h>
#include <SafeString.h>
KeyboardGER2 myKeyBoard;
createSafeString(Befehl1_SS ,256);
createSafeString(Befehl2_SS ,256);
createSafeString(Befehl3_SS ,256);
const byte button1_Pin = 4;
const byte button2_Pin = 5;
const byte button3_Pin = 6;
const byte heartbeatLED_Pin = 13;
const byte lowValLimit = 31;
unsigned long MyTimer = 0;
unsigned long MyPeriod = 500; // 500 milliseconds ON and OFF result: 1 blink per second
void PrintFileNameDateTime() {
Serial.println( F("Code running comes from file ") );
Serial.println(__FILE__);
Serial.print( F(" compiled ") );
Serial.print(__DATE__);
Serial.print( F(" ") );
Serial.println(__TIME__);
}
boolean TimePeriodIsOver (unsigned long &periodStartTime, unsigned long TimePeriod) {
unsigned long currentMillis = millis();
if ( currentMillis - periodStartTime >= TimePeriod ) {
periodStartTime = currentMillis; // set new expireTime
return true; // more time than TimePeriod) has elapsed since last time if-condition was true
}
else return false; // not expired
}
void BlinkHeartBeatLED(int IO_Pin, int BlinkPeriod) {
static unsigned long MyBlinkTimer;
pinMode(IO_Pin, OUTPUT);
if ( TimePeriodIsOver(MyBlinkTimer, BlinkPeriod) ) {
digitalWrite(IO_Pin, !digitalRead(IO_Pin) );
}
}
void setup() {
pinMode(button1_Pin, INPUT_PULLUP);
pinMode(button2_Pin, INPUT_PULLUP);
pinMode(button3_Pin, INPUT_PULLUP);
delay(1000);
Serial.begin(115200);
delay(1000);
Serial.println( F("Setup-Start") );
Serial1.begin(115200);
Serial.println( F("Serial1.begin(115200) done") );
PrintFileNameDateTime();
myKeyBoard.begin();
}
void loop() {
BlinkHeartBeatLED(heartbeatLED_Pin, 250);
if (digitalRead(button1_Pin) == LOW) {
digitalWrite(heartbeatLED_Pin, HIGH);
Befehl1_SS = "mspaint /pt F:\\Downloads\\Software\\Arduino\\Arduino-Quick-Downloads\\DM452T.JPG";
Serial.println(Befehl1_SS);
myKeyBoard.typeText(Befehl1_SS.c_str() );
myKeyBoard.SendReturn();
Serial.println("myKeyBoard.typeText(Befehl1_SS.c_str() done");
Serial.println("delay(5000);");
delay(5000);
digitalWrite(heartbeatLED_Pin, LOW);
}
}
Wenn man dann ein DOSen-Fenster geöffnet hat (CMD)
und da der Cursor blinkt.
Dann tut das Progrämmchen so als ob es eine Tastatur wäre und hämmert die Befehlszeile
mspaint /pt F:\Downloads\Software\Arduino\Arduino-Quick-Downloads\DM452T.JPG
rein
Und schwups wird die angegeben Bilddatei gedruckt.
Wenn du jetzt noch spezielle Einstellungen haben willst wie bestimmte Bildgröße. Querformat usw. Dann muss man sich mal mit den Parametern von mspaint auseinander setzen oder auf ein Autohotkey-script umsteigen.
Mit Autohotkey-scripten kann man dann Kapriolen drehen ohne Ende.
vgs