CopyPaste DIY-Tastatur oder die perfekte Tastatur in einer Welt, in der jede Codezeile bereits geschrieben ist

Viele Leute, die gerade erst anfangen, Programmieren zu lernen, stellen die Frage: Ist es in Ordnung, den Code eines anderen zu kopieren und einzufügen? Angesichts der Tatsache, dass eine Person eine faule Kreatur ist und die Zeit eines Programmierers Geld kostet, liegt die Antwort meiner Meinung nach auf der Hand - ja. Aber für Menschen, die dieses Prinzip auf den Punkt der Absurdität bringen, die ohne nachzudenken und nicht zu verstehen kopieren , und auch für diejenigen, die ein Diplom schreiben, ist dieser Aufsatz dieser Tastatur und diesem Artikel gewidmet. Und ja, diese Tastatur enthält genau zwei Schaltflächen - Kopieren und Einfügen.

Bild

Unter dem Schnitt wird eine Geschichte über Montage und Firmware zu sehen sein - wir werden sogar den Sprung eines logischen Analysators sehen

Also habe ich beschlossen, diese Tastatur zusammenzubauen. Ich beschloss, mit den Komponenten zu beginnen - Digispark (ein kleiner Schal mit attiny85 und einer USB-Bindung, die direkt in den Computer eingefügt werden kann), Tastenanschläge erfassen und die Tastatur emulieren zu lassen. Jetzt habe ich keine Tasten mehr - ich habe keine normalen mechanischen Tasten für die Tastatur, aber ich habe keine Lust zu warten, also nehmen wir die smd-Tasten. Wie diese:

Tasten


Nachdem wir uns für die Komponenten entschieden haben, werden wir jetzt die Frontplatte zeichnen, um sie in Zukunft auf einem Drucker zu drucken. Abmessungen 45 mm * 21 mm, Pad-Größen für Tasten 10 mm * 10 mm
Schreiben Sie oben und unten etwas.

Es stellte sich



ungefähr so heraus: Das nächste Problem sind die SMD-Tasten, daher müssen sie auf eine Art Platine gelötet werden. Da es keinen Sinn macht, das Board wegen so etwas zu vergiften, kratzen wir den Textolithen mit dem Buchstaben T:



Der Abstand zwischen den Tastenmitten beträgt 15 mm. Löten Sie sie auf eine improvisierte Platte.

Wir löten drei Drähte. Wenn die Taste gedrückt wird, wird eines der äußersten Kabel zum zentralen Kabel geschlossen.



Nehmen Sie als nächstes das erste Stück PVC-Kunststoff, das auf Sie trifft, kleben Sie unsere Frontplatte darauf und kleben Sie ihre Düsen auf die Knöpfe. Das einzige, was ich nicht berücksichtigt habe, war, dass sich der Teil selbst, der die Membran drückt, auf den Taktknöpfen dreht. Wenn Sie das Design verbessern möchten, verwenden Sie die normalen Schalter.

Das Ergebnis sollte das sein, was Sie am Anfang des Artikels gesehen haben. Ein anderer Winkel.



Mit Hilfe einfacher Geräte können Sie also eine Tastatur mit zwei Tasten erstellen, ABER WARUM?


Wir verbinden drei Drähte im Digispark.



Schema der „Tastatur“



Als nächstes müssen wir Digispark als Tastatur ausgeben und STRG + C / STRG + V durch Drücken der Taste senden.

Also müssen wir den Klick fangen. Wenn Sie zunächst das zentrale Kabel an +5 V anschließen und die seitlichen Kabel an die für den Eingang konfigurierten Pins anschließen, befindet sich beim Drücken der Taste zwar 1 auf dem Pin, aber wenn der Pin nicht gedrückt wird, werden Interferenzen abgefangen und es wird nicht verfolgt, was ist Drücken, und was für ein Hindernis. Dieses Problem ist überraschend einfach gelöst - Sie müssen die Stifte durch einen großen Widerstand (zig Ohm) zur Erde ziehen. Wenn Sie das Datenblatt auf dem Mikrocontroller öffnen, können Sie sehen, dass Sie darin den Aufzug einschalten können, jedoch nur auf VCC (+ Leistung). Eigentlich ist dies kein Problem - Sie müssen nur den zentralen Pin mit GND (Masse) verbinden und die Arbeitslogik umkehren.

Sie können es sich so vorstellen:



Aber es gibt noch ein Problem. Wir leben in einer unvollkommenen Welt, in der Knöpfe mechanischen Kontakt haben.
Und er ist unvollkommen. Und der Controller ist schnell - und so stellt sich heraus, dass der Knopf zum Zeitpunkt des Umschaltens nicht sofort schließt, sondern sein Widerstand einige Millisekunden lang springt - dies wird als Bounce bezeichnet. Aufgrund des Abpralls kann der Controller entscheiden, dass die Taste mehr als einmal gedrückt wird, z. B. 10. Hier ist eine Illustration dieses Phänomens aus dem Internet:



Aber es ist auch nicht interessant! Vielleicht haben wir keinen Sprung. Um das herauszufinden, habe ich einen Logikanalysator entdeckt. Jetzt wollen wir mal sehen ... Wir bauen einen Testaufbau zusammen - einen 10-Com-Lift mit 16 Millionen Messungen pro Sekunde

Installation


Wir sehen, dass das Drücken 0,1176 ms dauerte. Wir nähern uns dem



Moment des Loslassens der Taste (rot hervorgehoben).



Auf der Seite gibt es einige Messungen der „Emissionen“, und das gesamte Rattern dauerte ungefähr 0,1435 ms. Ja, ich weiß, dass dies nicht ausreicht, aber es lohnt sich zu bedenken, dass ich nur Knöpfe vom Band habe und die Kontakte noch keine Zeit hatten, zu oxidieren oder ihre Form zu ändern. Und im Laufe der Zeit wird sich die Situation nur verschlechtern. Wie gehe ich mit Bounce um? Es gibt drei Hauptwege:

  1. Schmidt Trigger + RC-Schaltung - ermöglicht es Ihnen, das perfekte Signal zu erhalten
  2. RC-Schaltung - ermöglicht es Ihnen, die Emissionen zu reduzieren (Signal sanft ansteigend)

Aber wir haben einen ganzen Mikrocontroller - und deshalb stehen uns drei Methoden zur Verfügung: Verzögerungen.
Eine Möglichkeit, mit dem Geschwätz „auf der Stirn“ umzugehen, besteht darin, zu überprüfen, ob der Knopf nach einer Zeit, die offensichtlich mehr als ein Geschwätz ist, noch gedrückt wird. Wenn der Code durch Verzögerungen implementiert wird, wird er blockiert. Wie dies richtig funktioniert, erfahren Sie in Hunderten von Artikeln über die Bekämpfung von Bounce und Arduino.

Also haben wir festgestellt, dass der Knopf gedrückt wird - wie geht es weiter? Teilen Sie dem Computer mit, dass STRG + C / V gedrückt ist.

Dies erfolgt mit der Standardbibliothek für Digispark.

Der resultierende Code kam folgendermaßen heraus:

#include "DigiKeyboard.h" // library for emulate keyboard
#define COPY 2 // copy button pin
#define PASTE 0// paste button pin
#define GND 1// center must be connected to ground
void setup() {
  pinMode(COPY, INPUT); // set pin to input
  digitalWrite(COPY, HIGH);// turn on pullup
  pinMode(PASTE, INPUT);
  digitalWrite(PASTE, HIGH);
  pinMode(GND, OUTPUT); // set pin to output
  digitalWrite(GND, LOW);// and set on pin GND
}


void loop() {
  // if something COPY or PASTE clicked
  if (!digitalRead(COPY) || !digitalRead(PASTE)) {
    delay(30); // wait(debounce)
    if (!digitalRead(COPY)) { // if copy still pressed send CTRL+C
      DigiKeyboard.sendKeyStroke(KEY_C , MOD_CONTROL_LEFT);
      delay(30);
    }
    else if (!digitalRead(PASTE)) {// if paste still pressed send CTRL+V
      DigiKeyboard.sendKeyStroke(KEY_V , MOD_CONTROL_LEFT);
      delay(200);
    }
  }
}

Hier ist ein Projekt in 3 Stunden, das ich bekommen habe. Haben Sie keine Angst, den Code eines anderen zu kopieren!

Kopieren und Einfügen aus dem Stapelüberlauf


All Articles