Copie el teclado DIY o el teclado perfecto en un mundo donde cada línea de código ya está escrita

Muchas personas que recién comienzan a aprender programación hacen la pregunta: ¿está bien copiar y pegar el código de otra persona? Dado que una persona es una criatura perezosa, y el tiempo de un programador cuesta dinero; la respuesta, en mi opinión, es obvia: sí. Pero para las personas que llevan este principio al punto de lo absurdo, que copian sin pensar ni comprender , y también para quienes escriben un diploma, este ensayo está dedicado a este teclado y artículo. Y sí, este teclado contiene exactamente dos botones: copiar y pegar.

imagen

Debajo del corte habrá una historia sobre ensamblaje y firmware: incluso veremos el rebote de un analizador lógico

Entonces, decidí armar este teclado. Decidí comenzar con los componentes: digispark (una pequeña bufanda con attiny85 y un enlace USB que se puede insertar directamente en la computadora) le permite capturar las pulsaciones del teclado y emular el teclado. Ahora no tengo botones: no tengo botones mecánicos normales para el teclado, pero no tengo ganas de esperar, así que tomemos los botones smd. Como estos:

Botones


Habiendo decidido los componentes, ahora dibujaremos el panel frontal para imprimirlo en una impresora en el futuro. Dimensiones 45 mm * 21 mm, tamaños de almohadilla para botones 10 mm * 10 mm
Escriba algo en la parte superior e inferior.

Resultó algo como esto:



el siguiente problema son los botones smd, por lo que deben soldarse a algún tipo de placa. Como envenenar el tablero por algo así no tiene sentido, rascamos la textolita con la letra T:



la distancia entre los centros de los botones es de 15 mm. Sueldelos a una tabla improvisada.

Soldamos tres alambres. Cuando se presiona el botón, cerrará uno de los cables más externos al central.



Luego, tome la primera pieza de plástico de PVC que se encuentre y pegue nuestro panel frontal sobre él, y pegue sus boquillas en los botones. Lo único que no tuve en cuenta fue que la parte misma que presiona la membrana gira sobre los botones táctiles. Si desea mejorar el diseño, use los interruptores normales .

El resultado debería ser lo que viste al principio del artículo. Otro ángulo.



Entonces, con la ayuda de dispositivos simples, puede hacer un teclado con dos botones, ¿PERO POR QUÉ?


Conectamos tres cables en digispark.



Esquema del "teclado"



A continuación, debemos hacer que digispark pretenda ser un teclado y enviar CTRL + C / CTRL + V presionando el botón.

Entonces, necesitamos atrapar el clic. Para comenzar, si conecta el cable central a + 5V y conecta los cables laterales a los pines configurados para la entrada, entonces, cuando se presiona el botón, sí, habrá 1 en el pin, pero cuando no se presiona el pin, detectará interferencia y no rastreará lo que está presionando, y qué obstáculo. Este problema se resuelve sorprendentemente simple: debe tirar de los pines al suelo a través de una resistencia grande (decenas de ohmios). Al abrir la hoja de datos en el microcontrolador, puede ver que dentro de él puede encender el elevador, pero solo a VCC (+ alimentación). En realidad, esto no es un problema: solo necesita conectar el pin central a GND (tierra) e invertir la lógica del trabajo.

Puedes imaginarlo de esta manera:



Pero hay un problema más. Vivimos en un mundo imperfecto donde los botones tienen contacto mecánico.
Y él es imperfecto. Y el controlador es rápido, y resulta que al momento de cambiar el botón no se cierra instantáneamente, pero su resistencia salta por unos pocos milisegundos, esto se llama rebote. Debido al rebote, el controlador puede decidir que se presione el botón más de una vez, pero, por ejemplo, 10. Aquí hay una ilustración de este fenómeno en Internet: ¡



pero tampoco es interesante! Quizás no tengamos ningún rebote. Para averiguarlo, descubrí un analizador lógico. Ahora veamos ... Estamos armando una configuración de prueba: un ascensor de 10 com, 16 millones de mediciones por segundo

Instalación


Vemos que la presión duró 0.1176 ms. Nos aproximamos al



momento de soltar el botón (resaltado en rojo).



En el lateral hay algunas mediciones de "emisiones", y en total el rebote duró aproximadamente 0.1435ms. Sí, sé que esto no es suficiente, pero vale la pena considerar que solo tengo botones de la cinta, los contactos aún no han tenido tiempo de oxidarse o cambiar de forma. Y con el tiempo, la situación solo empeorará. ¿Cómo lidiar con el rebote? Hay tres formas principales:

  1. Gatillo Schmidt + circuito RC: le permite obtener la señal perfecta
  2. Circuito RC: le permite deslizar las emisiones (señal que aumenta suavemente)

Pero tenemos un microcontrolador completo y, por lo tanto, tenemos 3 métodos disponibles: retrasos.
Una de las formas de lidiar con el rebote es verificar si el botón sigue presionado después de una cierta cantidad de rebote. Si se implementa a través de retrasos, el código se bloqueará, pero la forma de hacerlo correctamente se puede ver en cientos de artículos sobre cómo combatir el rebote y el arduino.

Entonces, nos dimos cuenta de que el botón está presionado, ¿qué sigue? Dígale a la computadora que CTRL + C / V está presionado.

Esto se hace usando la biblioteca estándar para digispark.

El código resultante salió así:

#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);
    }
  }
}

Aquí hay un proyecto en 3 horas. Lo tengo. ¡No tengas miedo de copiar el código de otra persona!

Copiar y pegar desde el desbordamiento de pila


All Articles