Go Down

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

zwieblum

Ich kapier' noch immer nicht, warum der TO den kompliziertesten Weg wählt.

uxomm

#46
Aug 29, 2019, 01:40 am Last Edit: Aug 29, 2019, 01:41 am by uxomm
Gibt es zu den Attiny85 eine Alternative?
Ich würde das nicht unbedingt "Alternative" nennen, aber ich würde zu einem Arduino Micro oder Leonardo raten. Die sind für Kommunikation via USB mit entsprechender Hardware ausgestattet.

Ein ATtiny85 ist ja eigentlich nicht für USB-Kommunikation gedacht. Dementsprechend unzuverlässig kann das funktionieren - vor allem mit "neuerer" Hardware.

Als ich von einigen Jahren die Möglichkeit entdeckt habe ATtinys als HID-Hardware "auszugeben" war ich begeistert und habe das für einige Projekte eingesetzt. Das hat damals auch ziemlich gut funktioniert. Allerdings habe ich mit aktuelleren Rechnern immer öfter Probleme und verwende deshalb eher "echte" USBfähige Mikrocontroller (Arduino Leonardo, Micro oder Teensy), damit funktionier die Kommunikation über USB deutlich zuverlässiger.
Always decouple electronic circuitry.

togoze

Ich würde das nicht unbedingt "Alternative" nennen, aber ich würde zu einem Arduino Micro oder Leonardo raten. Die sind für Kommunikation via USB mit entsprechender Hardware ausgestattet.

Ein ATtiny85 ist ja eigentlich nicht für USB-Kommunikation gedacht. Dementsprechend unzuverlässig kann das funktionieren - vor allem mit "neuerer" Hardware.

Als ich von einigen Jahren die Möglichkeit entdeckt habe ATtinys als HID-Hardware "auszugeben" war ich begeistert und habe das für einige Projekte eingesetzt. Das hat damals auch ziemlich gut funktioniert. Allerdings habe ich mit aktuelleren Rechnern immer öfter Probleme und verwende deshalb eher "echte" USBfähige Mikrocontroller (Arduino Leonardo, Micro oder Teensy), damit funktionier die Kommunikation über USB deutlich zuverlässiger.

Das wäre dann dieser hier oder?
https://rover.ebay.com/rover/0/0/0?mpre=https%3A%2F%2Fwww.ebay.de%2Fulk%2Fitm%2F253050640080

Gruß Tobias

HotSystems

Das wäre dann dieser hier oder?
https://rover.ebay.com/rover/0/0/0?mpre=https%3A%2F%2Fwww.ebay.de%2Fulk%2Fitm%2F253050640080

Gruß Tobias

Ist das immer noch so, dass du unsere Beiträge nicht liest ?
Ich hatte dir schon einen Link einer Alternative gepostet.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

zwieblum

... Und es ist mir noch immer nicht klar, warum der TO nicht einen einfachen funktionierenden Weg nimmt. Aber mei, ich muss nicht alles verstehen ...

togoze

Meint ihr dieses Modul?
https://rover.ebay.com/rover/0/0/0?mpre=https%3A%2F%2Fwww.ebay.de%2Fulk%2Fitm%2F252041519737

Das aus dem Link mit dem Touchscreen.

Gruß Tobias

zwieblum

*seufz*
Code: [Select]
cat /dev/ttyACM0 | while read a; do
  if [ "$a" = "tu-was" ]; then
    /starte/das/programm &
  fi
done

Das geht sogar unter Windoof 10, nur die Schnittstelle heißt anders. Alles, was der Ardunio tun muss, ist "tu-was" über die Serielle schicken.

uxomm

Wenn ich das richtig verstanden habe, dann ist man im Ausgangszustand _nicht_ auf dem Computer eingeloggt.
Always decouple electronic circuitry.

HotSystems

Ich gebe es auf.
schönen Tag noch.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

togoze

Wenn ich das richtig verstanden habe, dann ist man im Ausgangszustand _nicht_ auf dem Computer eingeloggt.
Doch eingeloggt ist man immer, der Pc ist so eingestellt das er sich nicht Sperrt.

zwieblum

@togoze: Kannst du mir hier mal bitte erklären, warum du nicht einfach die Windows Bordmittel hernimmst um das Problem zu lösen? Warum willst du auf biegen und brechen eine "Lösung", die dich a) überfordert, b) nicht garantiert ist, dass sie funktioniert und c) extra kostet? Einfach weil's so eine lustige Sache ist (das kann ich verstehen, aber dann geht's gar nicht um das vorgeschobene Problem)?

togoze

@togoze: Kannst du mir hier mal bitte erklären, warum du nicht einfach die Windows Bordmittel hernimmst um das Problem zu lösen? Warum willst du auf biegen und brechen eine "Lösung", die dich a) überfordert, b) nicht garantiert ist, dass sie funktioniert und c) extra kostet? Einfach weil's so eine lustige Sache ist (das kann ich verstehen, aber dann geht's gar nicht um das vorgeschobene Problem)?
Hallo Zwieblum,

wie genau meinst du das?
Meinst du man soll die Serielle Schnittstelle überwachen ob eine 0 oder 1 ausgegeben wird?
Wenn ja mit welchen Programmen ist das möglich, ich habe leider noch nichts gefunden.


Ich habe jetzt auch wie im Verlauf vorgeschlagen mir das Pro Micro Board gekauft.
Ich habe auch mal ein anders Sketch probiert dieses die "enter" Taste Simuliert (zum Testen):

Code: [Select]

1 //Enter-Tasten Sketch:
2
3 //Einbinden der Keyboard Bibliothek
4 #include <Keyboard.h>
5
6
7 // Einen Taster mit dem Pin 9 verbinden
8 int enter = 9;
9
10 void setup()
11 {
12 // Den Taster als Active-Low verschalten, als INPUT konfigurieren und
13 // das ausgehende Signal bei ungedruecktem Taster ueber einen Pull-up
14 // Widerstand auf VCC leiten
15 pinMode(enter, INPUT_PULLUP);
16 Keyboard.begin();
17 }
18
19 void loop()
20 {
21 // Wenn der Taster gedrueckt wird
22 if (digitalRead(enter) == 0)
23 {
24 // Dem Computer das Enter senden. Die Zahl 176 entspricht
25 // dabei der Enter-Taste in der ASCII-Tabelle
26 Keyboard.write(176);
27 // Kurze Pause, um Wiederholungen zu vermeiden
28 delay(500);
29 }
30 }


Das funktioniert auch ohne Probleme.

Jetzt habe ich mir Sketch mit dem DigiKeyboard genommen.
Es auf die Pins angepasst die tatsächlich angeschlossen sind (siehe Bild)



Leider funktioniert dies irgendwie nicht.
Liegt dies an mir oder an den Sketch.

Code: [Select]
#include "DigiKeyboard.h"
int buttonPin = 9;

void setup() {
pinMode(buttonPin, INPUT);
digitalWrite(buttonPin, HIGH);
}

void loop() {
DigiKeyboard.sendKeyStroke(0);
if (digitalRead(buttonPin) == LOW){
DigiKeyboard.sendKeyStroke(KEY_R , MOD_GUI_LEFT);
DigiKeyboard.delay(100);
DigiKeyboard.println("‪C:\\Users\\tobia\\Desktop\\test\\Unwetter.bat");
DigiKeyboard.delay(1000);
}
}


Gruß Tobias

zwieblum


DerLehmi

Quote
ich gebs auf ...
-->So funktioniert das gleich gar nicht ;)

Quote
Leider funktioniert dies irgendwie nicht.
Liegt dies an mir oder an den Sketch.
-->Ist nicht sehr aussagekräftig.

Auf Anhieb vermisse ich da "Keyboard.begin();"

uxomm

#59
Aug 31, 2019, 08:21 pm Last Edit: Sep 02, 2019, 07:44 pm by uxomm Reason: Ergänzung: Verknüpfung am Desktop
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.
    Edit: Und auf den Desktop verschieben.
  •   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.
Always decouple electronic circuitry.

Go Up