Keyboard CopyPaste DIY atau keyboard sempurna di dunia tempat setiap baris kode sudah ditulis

Banyak orang yang baru mulai belajar pemrograman mengajukan pertanyaan - apakah boleh menyalin-menempelkan kode orang lain? Mengingat bahwa seseorang adalah makhluk malas, dan waktu programmer membutuhkan uang - jawabannya, menurut saya, sudah jelas - ya. Tetapi bagi orang-orang yang membawa prinsip ini ke titik absurditas, yang menyalin tanpa berpikir atau memahami , dan juga kepada mereka yang menulis ijazah, esai ini didedikasikan untuk keyboard dan artikel ini. Dan ya, keyboard ini persis mengandung dua tombol - salin dan tempel.

gambar

Di bawah potongan akan ada cerita tentang perakitan dan firmware - kita bahkan akan melihat pantulan penganalisis logis

Jadi, saya memutuskan untuk memasang keyboard ini. Saya memutuskan untuk memulai dengan komponen - digispark (syal kecil dengan attiny85 dan pengikat usb yang dapat dimasukkan langsung ke komputer) membiarkannya menangkap penekanan tombol dan meniru keyboard. Sekarang saya tidak punya tombol - saya tidak punya tombol mekanis normal untuk keyboard, tapi saya tidak ingin menunggu, jadi mari kita ambil tombol smd. Seperti yang ini:

Tombol


Setelah memutuskan komponen, sekarang kita akan menggambar panel depan untuk mencetaknya di printer di masa depan. Dimensi 45mm * 21mm, ukuran pad untuk tombol 10mm * 10mm
Tulis sesuatu di bagian atas dan bawah.

Ternyata seperti ini:



Masalah selanjutnya adalah tombol smd, jadi mereka perlu disolder ke beberapa jenis papan. Karena meracuni papan demi hal semacam itu tidak masuk akal - kami menggaruk textolite dengan huruf T:



Jarak antara pusat tombol adalah 15mm. Solder mereka ke papan improvisasi.

Kami menyolder tiga kabel. Ketika tombol ditekan, itu akan menutup salah satu kabel terluar ke yang terpusat.



Selanjutnya, ambil potongan plastik PVC pertama yang muncul dan tempelkan panel depan kami di atasnya, dan rekatkan nozelnya pada tombol. Satu-satunya hal yang tidak saya perhitungkan adalah bahwa bagian itu sendiri yang menekan membran berputar pada tombol kebijaksanaan. Jika Anda ingin meningkatkan desain - gunakan sakelar normal .

Hasilnya harus apa yang Anda lihat di awal artikel. Sudut lain.



Jadi, dengan bantuan perangkat sederhana Anda dapat membuat keyboard dengan dua tombol, TAPI MENGAPA?


Kami menghubungkan tiga kabel di digispark.



Skema "keyboard"



Selanjutnya, kita perlu membuat digispark berpura-pura menjadi keyboard dan mengirim CTRL + C / CTRL + V dengan menekan tombol.

Jadi, kita perlu menangkap klik. Untuk memulainya, jika Anda menghubungkan kabel sentral ke + 5V dan menghubungkan kabel samping ke pin yang dikonfigurasi untuk input, maka ketika tombol ditekan, ya, akan ada 1 pada pin, tetapi ketika pin tidak ditekan, itu akan menangkap gangguan dan gagal melacak apa yang ada. menekan, dan halangan apa. Masalah ini diselesaikan dengan sangat sederhana - Anda harus menarik pin ke tanah melalui resistor besar (puluhan ohm). Membuka lembar data pada mikrokontroler, Anda dapat melihat bahwa di dalamnya Anda dapat menyalakan lift, tetapi hanya untuk VCC (daya +). Sebenarnya, ini bukan masalah - Anda hanya perlu menghubungkan pin pusat ke GND (ground) dan membalikkan logika kerja.

Anda dapat membayangkannya seperti ini:



Tetapi ada masalah lain. Kita hidup di dunia yang tidak sempurna di mana tombol memiliki kontak mekanis.
Dan dia tidak sempurna. Dan pengontrol kami cepat - dan ternyata pada saat mengganti tombol tidak langsung menutup, tetapi ketahanannya melonjak selama beberapa milidetik - ini disebut bouncing. Karena pantulannya, pengontrol dapat memutuskan bahwa tombol ditekan lebih dari sekali, tetapi, misalnya, 10. Berikut adalah ilustrasi fenomena ini dari Internet:



Tetapi juga tidak menarik! Mungkin kita tidak punya bouncing. Untuk mengetahuinya, saya menemukan penganalisis logika. Sekarang mari kita lihat ... Kami sedang merakit pengaturan uji - lift 10-com, 16 juta pengukuran per detik

Instalasi


Kami melihat bahwa menekan berlangsung 0,1176 ms. Kami mendekati



saat pelepasan tombol (disorot dalam warna merah).



Di samping ada beberapa pengukuran "emisi", dan dalam semua bounce berlangsung sekitar 0.1435ms. Ya, saya tahu ini tidak cukup, tetapi perlu mempertimbangkan bahwa saya hanya memiliki tombol dari kaset itu, kontak belum punya waktu untuk mengoksidasi atau mengubah bentuk. Dan seiring waktu, situasinya hanya akan memburuk. Bagaimana cara menghadapi bouncing? Ada tiga cara utama:

  1. Pemicu Schmidt + sirkuit RC - memungkinkan Anda untuk mendapatkan sinyal yang sempurna
  2. RC-circuit - memungkinkan Anda untuk mengeluarkan emisi (sinyal meningkat dengan lancar)

Tetapi kami memiliki seluruh mikrokontroler - dan oleh karena itu kami memiliki 3 metode yang tersedia: penundaan
Salah satu cara untuk menangani bouncing adalah dengan memeriksa apakah tombol masih ditekan setelah jumlah bouncing tertentu. Jika diimplementasikan melalui penundaan, kode akan diblokir, tetapi cara melakukannya dengan benar dapat ditemukan di ratusan artikel tentang memerangi bouncing dan arduino.

Jadi, kami menyadari bahwa tombolnya ditekan - selanjutnya apa? Beri tahu komputer bahwa CTRL + C / V ditekan.

Ini dilakukan dengan menggunakan perpustakaan standar untuk digispark.

Kode yang dihasilkan keluar seperti ini:

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

Ini proyek dalam 3 jam saya mendapatkannya. Jangan takut menyalin kode orang lain!

Menyalin dan Menempel dari Stack Overflow


All Articles