Digispark als Eingabegerät - AZ-Delivery

Hallo zusammen,

viele von Ihnen erinnern sich bestimmt an den Beitrag: Screenshots mit Digispark auf Tastendruck. Da jedoch bei uns im Support regelmäßig Anfragen zur Verwendung des Digisparks eingehen, eine neuere Version der Digispark-Definitionen verfügbar sind und der verwendete Code zwar einsteiger-freundlich, für die Praxis allerdings verbesserungswürdig ist möchte ich Ihnen heute den verbesserten Rework eines Bloggers vorstellen:

 

Eingesetzte Hardware:

Es kommt die unter der Arduino IDE programmierbare 1 Euro Stück große Digispark Platine und ein Taster zum Auslösen des Screenshots zum Einsatz.

Die Digispark Platine besteht im Wesentlichen aus einem attiny85 MCU von dessen 6 Digitalausgänge 2 Digitalpins über die Bootloader Software einen USB Port simulieren. Das USB Protokoll wird komplett in der Software abgebildet.

Von den Digital Ports werden daher 2 Ports (Port 4 und 3) für die USB Schnittstelle zum Programmieren und bei Nutzung der USB Schnittstelle im Anwenderprogramm benötigt.

Es bleiben somit nur noch 4 Ports für die eigene Applikation nutzbar. In unserem Projekt nutzen wir den Port 0 für den Taster.

Abbildung: Kompletter Aufbau, es ist keine externe Spannungsversorgung mehr notwendig.

 

Der Taster wird als Schließer zwischen die beschrifteten Anschlüsse des Digisparks GND und Port 0 geschaltet. Der normalerweise notwendige Pullup Wiederstand kann entfallen, da wir einen internen schaltbaren Pullupwiederstand des Attinys nutzen. Dieser wird später in der Software aktiviert.

IDE Vorbereitungen:

Um unseren Digispark mithilfe der Arduino IDE programmieren zu können, sind einige Vorarbeiten zu erledigen, da das Board nicht nativ von der DIE unterstützt wird, bzw. programmiert werden kann.

Zuallererst muss die ArduinoIDE selbst in der aktuellsten Version funktionsfähig installiert sein.

In der gestarteten IDE tragt unter Datei > Voreinstellungen > Zusätzliche Boardverwalter URLS bitte die URL:

http://digistump.com/package_digistump_index.json

ein. Die Stelle ist gelb markiert.

Mit diesem Schritt werden die Digistump Ressourcen im Boardverwalter später auswählbar.

Startet nun den Boardverwalter über Werkzeuge > Board > Boarverwalter und wählt als Typ „Beigetragen“ aus.

Wählt aus der Liste den Eintrag „Digistump AVR Boards by Digistump“ mit der Maus aus und klickt auf den Button „Installieren“.

Es werden die Werkzeuge und Tools heruntergeladen und installiert.

Überprüft nun, ob das Paket richtig installiert wurde. Dies ist an dem türkisenen Schriftzug „INSTALLED“ erkennbar. Achtet darauf, dass mindestens Version 1.6.7 installiert wurde.

Installation der USB Treiber für den Digispark:

Ladet euch auf der Seite: https://github.com/digistump/digiStumparduino/releases die Datei Digistump.Drivers.zip herunter und entpackt sie im Ordner „Digistump Drivers“ Führt die Datei DPinst64.exe (Windows 64 Bit) oder DPinst.exe (Windows 32 Bit) aus.

Während der Installation bitte die Abfrage bestätigen.

Während der Installation bitte die Abfrage bestätigen.

Erst jetzt wird der Digispark das erste Mal an den Rechner angeschlossen. Öffnet dazu den Gerätemanager, schließt den Digispark an eine freie USB Schnittstelle an und überprüft, ob der Digispark korrekt als unter „libusb-win32 devices“ als Digispark Bootloader erkannt wird.

Nach Neustart der Arduino IDE unter Werkzeuge > Board > Board Digispark Default 16.5 mhz auswählen.


Hier der Code:

 

// Digispark Code zur Erstellung eines Screenshots per Taster an P0.
// Getestet unter Windows 10 Version 1803

#include "DigiKeyboard.h"
#define KEY_Print 0x46 

const byte SwitchPin = 0;             // PinNummer (P0) wird als Konstante definiert, um Speicherplatz zu optimieren.
const byte BuildInLed = 1;            // Buildin LED
byte SwitchBufferState = HIGH;           // Deklaration SpeicherVariable für Tastenstatus

void setup() 
{
  pinMode(SwitchPin, INPUT_PULLUP);   // Pin 0 des DigiSparks wird auf Digitaleingang mit internem Pullup definiert.
  digitalWrite (BuildInLed,LOW);      // Interne LED ausschalten
}

void loop() 
{
  if (digitalRead(SwitchPin)== LOW  &&  SwitchBufferState == HIGH)
   {
    digitalWrite (BuildInLed,HIGH);  // Interne LED einschalten, Screenshot wird erstellt
    delay(80);                       // Taster Entprellen 80 ms
    SwitchBufferState = LOW;
    DigiKeyboard.sendKeyStroke(KEY_Print,MOD_GUI_LEFT);  // Simulation des Tastendrucks zur Anfertigung des Bildschirmfotos 
                                                                                                             //  (windows Logo key + Drucktaste)
    DigiKeyboard.delay(50); 
   } 
  if (digitalRead(SwitchPin)== HIGH &&  SwitchBufferState == LOW)
   {
    digitalWrite (BuildInLed,LOW);   // Interne LED ausschalten
    delay(80);                       // Taster Entprellen 80 ms
    SwitchBufferState = HIGH;
   }
  delay(100);
}

 

Port 0 wird als Eingang mit internen Pullup Wiederstand aktiviert und ist somit logisch LOW aktiv. (HIGH inaktiv) Ein Taster verbindet bei Betätigung diesen Port gegen GND. In der Haupt Endlosschleife „loop“ wird der logische Zustand des Port 0 alle 100 ms abgefragt. Wenn dieser auf logisch LOW durch den Taster wechselt und vorher im Zustand HIGH war dann wird nach einer Wartezeit von 80 ms zur Tasterentprellung über die USB Schnittstelle die Tastenkombination Windows Logo und Druck zum PC gesendet. Diese veranlasst das Betriebssystem einen Screenshot anzufertigen und diesen im Bildschirmfotos Order abzulegen.

Damit nun nicht endlos Bildschirmfotos angefertigt werden solange der Taster gedrückt ist, wird die Merker-Variable „Switchbufferstate“ auf LOW gesetzt, um beim nächsten Schleifendurchlauf zu erkennen das der Taster noch gedrückt ist und nicht erneut gedrückt wurde. Solange der Taster gedrückt ist, leuchtet die interne LED des Digisparks auf. Sobald der Taster losgelassen wird, erlischt die interne LED und die Merker-Variable wird zurückgesetzt.

Danach ist das System wieder im Ausgangszustand und es kann erneut ein Screenshot durch Drücken der Taste angefertigt werden.

 

Bis zum nächsten Beitrag :) 

 

Projekte für fortgeschrittene

3 comments

Michael

Michael

Bei mir hat das auch nicht funktioniert, es fehlt eine zusätzliche Kommandozeile um das Problem zu lösen. Als allererste Zeile in der Void Loop, vor dem ersten if, muss noch folgendes rein, dann läuft es:

DigiKeyboard.sendKeyStroke(0);

Savas kuzu

Savas kuzu

Leider werden an meinem Laptop keines der 5 Digisparks erkannt. Habe alles genau so ausgeführt wie es hier drinnen steht. Sind die MC vielleicht alle defekt? Bitte um Hilfe.

Thomas

Thomas

Nun möchte ich mal einen Kommentar schreiben.
Und zwar habe ich eine Bitte. Ich finde eure Bastelarbeiten wirklich spannend und anregend, weiter so ! Aber beginnt bei euren Artikeln immer damit, was das Ziel ist und welche Funktionen (grob) damit möglich sind. Das gilt für alle Artikel von euch. Ich kann verstehen , dass ihr sofort mit der Anleitung zum Bauen anfangen wollt, aber für mich (als Semi-Bastler) ist nicht immer ersichtlich, was ihr bauen wollt.
Schöne Grüße
Thomas

Leave a comment

All comments are moderated before being published

Recommended blog posts

  1. ESP32 jetzt über den Boardverwalter installieren - AZ-Delivery
  2. Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1 - AZ-Delivery
  4. ESP32 - das Multitalent - AZ-Delivery