Go Down

Topic: Programm auf Computer starten (Read 1 time) previous topic - next topic

ElEspanol

#60
Aug 31, 2019, 10:09 pm Last Edit: Aug 31, 2019, 10:10 pm by ElEspanol
Chapeau!

Das ist ein Karma Wert

uxomm

Always decouple electronic circuitry.

zwieblum

-->So funktioniert das gleich gar nicht ;)
Ja wie denn dann? Hätte der TO einmal eine Suchmaschine seiner Wahl mit den magischen Worten "windows programm auf tastendruck ausführen" gefüttert, dann hätte ihn so ziemlich der erste Link da hin geführt https://www.tippscout.de/windows-programme-mit-tastenkombination-starten.html. Oder da hin https://www.t-online.de/digital/software/windows/id_85848460/windows-tipp-des-tages-wie-sie-programme-bequem-per-tastendruck-starten.html. Oder https://www.netzwelt.de/anleitung/166273-windows-10-so-startet-programme-per-tastenkombination.html da hin ...  *seufz* ... beliebige Tastatur aus der Restekiste schlachten und gut ist's ...

togoze

Ja wie denn dann? Hätte der TO einmal eine Suchmaschine seiner Wahl mit den magischen Worten "windows programm auf tastendruck ausführen" gefüttert, dann hätte ihn so ziemlich der erste Link da hin geführt https://www.tippscout.de/windows-programme-mit-tastenkombination-starten.html. Oder da hin https://www.t-online.de/digital/software/windows/id_85848460/windows-tipp-des-tages-wie-sie-programme-bequem-per-tastendruck-starten.html. Oder https://www.netzwelt.de/anleitung/166273-windows-10-so-startet-programme-per-tastenkombination.html da hin ...  *seufz* ... beliebige Tastatur aus der Restekiste schlachten und gut ist's ...
Hi,

das haben wir schon probiert. Fazit 2 Kaputte Tastaturen :)

zwieblum

Kaupt vorher oder nacher? DIe Tastatur ist eine Matrix, du musst den schalter nur zwischen die richtigen Leitungen löten, da gibt's eigendlich nix zum falsch amachen. Man sollte allerdings vor Entnahme der Spenderorgane testen, welchen 2 Letungen die gewünschte Taste ergeben :)

togoze

Um eine Datei auf einem (Windows-) PC mithilfe eines Arduino Micro (oder Leonardo), der sich als HID (Tastatur) "ausgibt" zu starten gibt es mehrere Möglichkeiten. Hier 2 davon:

1. Dateiname mit Arduino übertragen
Eine (zum Beispiel) Bat-Datei kann über die "Windows-Run-Anweisung" (WinTaste + R) direkt aufgerufen werden. Allerdings stößt man beim Übergeben eines Dateipfades auf ein paar kleine Hindernisse.
Aufgerufen werden soll zum Beispiel: C:\meineBatDateien\start.bat

Der Backslash ist in C++ ein Escape-Zeichen und müsste deshalb verdoppelt werden.
Ein Versuch mit folgendem Code funktioniert aber (noch) nicht:
Code: [Select]
#include <Keyboard.h>
const byte tasterPin = 6;

void setup() {
  Keyboard.begin();
  pinMode(tasterPin, INPUT_PULLUP);
}

void loop() {
  if (!digitalRead(tasterPin)) {           // Taster wurde gedrückt
    Keyboard.press(KEY_LEFT_GUI);     // Windows-Taste
    Keyboard.press('r');
    delay(100);
    Keyboard.releaseAll();
    delay(200);
    Keyboard.print("C:\\meineBatDateien\\start.bat");
    Keyboard.write(KEY_RETURN);
  }
}

Die Probleme im Dateipfad sind Doppelpunkt und Backslash. Arduino Micro/Leonardo gehen von einem Englischen Tastatur-Layout aus. Wenn aber bei deinem System ein Deutsches Tastatur-Layout eingestellt ist, dann werden weder Doppelpunkt noch Backslasch übertragen sondern andere Zeichen:
CÖ#meineBatDateien#start.bat

(Hintergrund: Eine Tastatur überträgt ja keine Buchstaben oder Zeichen wie "a, b, c" sondern - vereinfacht ausgedrückt - nur welche Taste gedrückt oder losgelassen wurde. Also etwa "Dritte Taste in der zweiten Reihe wurde hinuntergedrückt". Dein Betriebsystem interpretiert das dann in Verbindung mit dem eingestellten Tastatur-Layout als bestimmtes Zeichen. Im konkreten Fall könnte das ein "Z" sein, bei Layout EN oder ein "Y" bei Layout DE).

Der Doppelpunkt kann bei DE-Tastatur ersetzt werden durch > oder \u003E.
Beim Backslash geht das leider nicht so einfach.
Zwar gibt es Möglichkeiten den Backslash zu erzeugen, aber es geht viel einfacher, denn der Backslash ist gar nicht nötig.
Windows akzeptiert (zumindest seit Windows 8 schon ziemlich lange) statt dem Backslash auch den „normalen" Schrägstrich ( / ) in Dateipfaden. Aber auch dieser Schrägstrich braucht einen Workaround.
Der Schrägstrich kann bei einer DE-Tastatur-Layout ersetzt werden durch  & oder \u0026.
Folgendes sollte also funktionieren:

Code: [Select]

...
Keyboard.press(KEY_LEFT_GUI);   // Windows-Taste
Keyboard.press('r');
delay(100);
Keyboard.releaseAll();
delay(200);
Keyboard.print("C\u003E\u0026meineBatDateien\u0026start.bat");  // Variante a)
// Keyboard.print("C>&meineBatDateien&start.bat");                 // Variante b)
Keyboard.write(KEY_RETURN);
...


Aber es geht noch viel einfacher…
Denn die „Windows-Run-Anweisung" startet im „Home-Verzeichnis". Wenn der angemeldetet User etwa „Hans" heißt, so ist es folgender Pfad:
C:\Users\Hans
Wenn also die zu startende Datei in diesem Verzeichnis liegt, so ist eine "ausführliche" Pfadangabe nicht nötig und die Datei kann einfach gestartet werden mit
start.bat


2. Verknüpfungsoption (Windows Boardmittel)
  •   Den Leonardo/Micro so programmieren, dass eine Tastenkombination erzeugt wird, die von (voraussichtlich) keinem anderen Programm verwendet wird (z.B. Ctrl + Alt + Shift + F1).
  •   Eine Verknüpfung der auszuführenden Datei (z.B. eine Bat-Datei) erstellen: Rechtsklick, Verknüpfung erstellen.
  •   Rechtsklick auf die Verknüpfung: Eigenschaften wählen.
  •   Im Reiter „Verknüpfung" zum Feld „Tastenkombination" gehen.
  •   Die gewünschte Tastenkombination ausführen.
  •   Bestätigen mit Klick auf OK.

siehe: Physical Button press to kick off bat file.

Hi uxomm,

super vielen vielen Dank für diesen Tipp.
Mit deinem Sketch funktioniert das nun so wie wir das uns vorstellen.

Danke Danke danke....


Gruß,
Tobias

togoze

Hallo zusammen,

das Sketch wie im Beitrag oben drüber erwähnt funktioniert Einwandfrei.

Allerdings möchten wir nun die erwähnten LED's je nach Inhalt der mit den .bat Datei in die .txt geschriebene wird leuchten zu lassen.

Ich habe hierzu schon einmal die Suchmaschine meines Vertrauens gefragt allerdings noch nicht richtiges Gefunden.

Daher meine Frage ist es möglich mit dem Arduino eine Datei zu überwachen?


Gruß,

Tobias

Tommy56

Du meinst eine Datei auf dem PC? Direkt nicht, Du müsstest den Dateiinhalt laufend zum Aeduino übertragen. Da kannst Du einfacher ein Programm auf dem PC aufsetzen, das die Datei überwacht und bei Bedarf Steueranweisungen für LED an den Arduino schicken.

Oder meinst Du etwas ganz Anderes? Dann musst Du das genauer beschreiben.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

togoze

Du meinst eine Datei auf dem PC? Direkt nicht, Du müsstest den Dateiinhalt laufend zum Aeduino übertragen. Da kannst Du einfacher ein Programm auf dem PC aufsetzen, das die Datei überwacht und bei Bedarf Steueranweisungen für LED an den Arduino schicken.

Oder meinst Du etwas ganz Anderes? Dann musst Du das genauer beschreiben.

Gruß Tommy
Hi,

nein so wie du das beschrieben hast ist das komplett richtig.

Gibt es so ein Programm schon wo man Steueranweisungen auf den Arduino schicken kann?

Gruß,

ElEspanol

#69
Oct 12, 2019, 11:27 am Last Edit: Oct 12, 2019, 11:29 am by ElEspanol
Unter der cli sollte doch sowas wie copy datei.txt com2 gehen? Hab da schon länger nichts mehr gemacht mit.
Das dann in einen Cron job

Tommy56

#70
Oct 12, 2019, 03:49 pm Last Edit: Oct 12, 2019, 03:59 pm by Tommy56
Gibt es so ein Programm schon wo man Steueranweisungen auf den Arduino schicken kann?
Ist mir nicht bekannt. Das wirst Du wohl selbst schreiben müssen. Das hängt ja auch stark davon ab, worauf de Datei überwacht werden soll.

Ob sie geändert wurde, egal wie
bestimmte Änderungen usw.

Gruß Tommy

Edit: Welches Betriebssystem?
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

togoze

Ist mir nicht bekannt. Das wirst Du wohl selbst schreiben müssen. Das hängt ja auch stark davon ab, worauf de Datei überwacht werden soll.

Ob sie geändert wurde, egal wie
bestimmte Änderungen usw.

Gruß Tommy

Edit: Welches Betriebssystem?
Hi,

schonmal danke für die Info.
Das Schreit mir nach sehr viel Arbeit (für einen Anfänger) :)

Auf dem PC nutzen wird das Betriebssystem Windows 10.


Es soll eine Datei (.txt) überwacht werden.
Wenn in dieser Datei Wert/Wort X steht soll LED 1 leuchten
und wenn in Wert/Wort Y steht soll LED 2 leuchten.

Gruß,


zwieblum

Batch-Datei machen und da so was reinschreiben:
Code: [Select]

: loop
type absoluter/pfad/zur/date > COM1
sleep 5
goto loop

Und dann nach dem Wort am Arduino suchen, sofern der auf COM1 hängt.

Tommy56

Ja, das ist einiges an Arbeit. In unixoiden Systemen könnte man das mit Mitteln der Shell+awk machen. Die muss man aber auch erst mal beherrschen.

Es steht immer nur die eine Zeile drin? Wieviele Varianten? Was soll WortX sein (Beispiel).

Dann schau Dir mal die Powershell an, damit sollte das machbar sein. Mit Regexp sollte sich da was bauen lassen. Zur Powershell gibt es viele Beispiele (englisch) im Netz, die man dann entsprechend kombinieren muss. Die lassen sich mit Google gut finden.

Du kannst natürlich auch mit Codeblocks in C(++) programmieren, da dürfte es aber noch etwas schwieriger werden.

Wo kommt denn die Textdatei her? Evtl. gibt es einen besseren Weg.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

Tommy56

#74
Oct 12, 2019, 07:48 pm Last Edit: Oct 12, 2019, 07:50 pm by Tommy56
Und dann nach dem Wort am Arduino suchen, sofern der auf COM1 hängt.
Wenn der Aufbau einfach genug ist, ist das ein gangbarer Weg. In Puffer einlesen und mit strtok zerlegen.
COM1 wird es nie sein.

Gruß Tommy

Edit: Evtl. könnte man das noch mit der Powershell kombinieren, dass nur gesendet wird, wenn die Datei gespeichert wurde.
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

Go Up