Commit a8659e11 authored by Luca Contessa's avatar Luca Contessa

Usare arduino come una tastiera USB

parents
# Corsi Arduino 2017
## Arduino as Keyboard
![POuL logo](lib/img/logo-text-white.svg)
Contessa Luca
`{ ifdevurandom@gmail.com }`
---
# Spyrja
### Che in islandese significa Domandate
#### Almeno secondo google translate
non abbiate paura di fare domande perchè:
1. Nessuno vi sta né valutando né giudicando (siamo stati tutti principianti)
2. L'argomento è particolarmente tosto e non di facile comprensione
---
### Canali utili
- [Il canale youtube del POuL!](https://www.youtube.com/user/POuLpolimi)
- [GreatScott!](https://www.youtube.com/user/greatscottlab)
Una volta create le basi vi consiglio caldamente di dare un'occhiata anche a loro:
- [Andreas Spiess](https://www.youtube.com/channel/UCu7_D0o48KbfhpEohoP7YSQ)
- [AdaFruit industries](https://www.youtube.com/user/adafruit)
- [SparkFun Electronics](https://www.youtube.com/user/sparkfun)
---
### cosa faremo oggi
1. Scrivere con la seriale
2. Trasformare Arduino in una tastiera USB
----
## di che strumenti necessitiamo
- Un Arduino (duh)
- Cavo per collegare arduino al PC
- Il PC (Possibilmente con una distro linux)
---
## Andiamo ad (RI) analizzare un protocollo che utilizzeremo
----
## Serial
- Altresì chiamata UART, comunica tramite due pin: TX e RX
1. TX: Pin attraverso cui invio i dati
2. RX: Pin attraverso cui ricevo i dati
- Può essere utilizzata per comunicare con il PC
----
### Comandi importanti
```C
Serial.available() //riceve un dato se la seriale è attiva
Serial.read() //Legge dalla seriale
Serial.print("stuff") //Scrive sulla seriale
Serial.println("stuff") //Scrive e va a capo
```
---
## Keyboard
- è una libreria ufficiale di arduino
- Funziona su Arduino Leonardo, Due e Micro
- Permette ad arduino di emulare una tastiera USB e mandare pressione di tasti al PC
- State attenti quando giocate con questa libreria
----
### Parliamo un attimo della libreria
```C
#define KEY_LEFT_CTRL 0x80
#define KEY_LEFT_SHIFT 0x81
#define KEY_LEFT_ALT 0x82
..........
public:
Keyboard_(void);
void begin(void);
void end(void);
size_t write(uint8_t k);
size_t press(uint8_t k);
size_t release(uint8_t k);
void releaseAll(void);
```
----
### Piccolo disclamer sulla libreria
- Se la libreria vi dà problemi prendete solo i file keyboard.cpp e keyboard.h, metteteli nello stesso folder del codice e eseguite questa piccola modifica a keyboard.h
Versione originale
```cpp
#include "HID.h"
```
Versione funzionante
```cpp
//#include "HID.h"
```
----
#### Quello che facciamo essenzialmente è:
1. Stabilisco un handshake tra arduino e PC (con il comando keyboard.begin() )
2. Associo il tasto al suo valore esadecimale (anche i tasti funzione)
3. L'arduino riceve il segnale di invio e la libreria controlla se il tasto è valido e/o se è applicato un modificatore (letteralmente fa un check comparativo con la tabella ASCII)
4. Tramite la seriale invia i dati al PC sulla porta USB
----
### Come inizializzare la libreria
```C
#include 'keyboard.h'
void setup(){
Keyboard.begin();
}
```
----
### Comandi importanti della libreria
```C
Keyboard.print() // scrive tutto ciò che date in input
Keyboard.press() // "preme e mantiene premuto il tasto"
Keyboard.println() // come la print ma alla fine va a capo
Keyboard.release() // Rilascia un tasto premuto precedentemente
Keyboard.releaseAll() //Rilascia tutti i tasti premuti
```
----
### MouseKeyboard
Esiste anche una libreria che racchiude le funzionalità per emulare un mouse, però per oggi ci limiteremo alla tastiera
[MouseKeyboard](https://www.arduino.cc/en/Reference/MouseKeyboard)
---
## Ricordatevi ovviamente di scaricare l'IDE di Arduino (che useremo per programmare la scheda)
```Bash
sudo apt-get install arduino //Per Ubuntu/Debian
```
- Per gli altri user linux cambiate sintassi per adattarvi al vostro gestore di pacchetti
- [Per tutti gli altri utilizzate il sito ufficiale di arduino](https://www.arduino.cc)
---
### Proviamo a dire qualcosa al PC
Provate ora a realizzare un piccolo programmino che, dato un comando sulla seriale ( o la pressione di un tasto collegato all'arduino se preferite) scrive qualcosa
#### Avete 15-20 minuti di tempo per provarci!
----
### Questo è lo schema elettrico per chi volesse usare il pulsante
![Pushbutton](lib/img/pushbutton)
----
#### Il codice è il seguente (versione seriale)
```C
#include 'keyboard.h'
void setup(){
Keyboard.begin();
Serial.begin(9600);
}
void loop(){
if(Serial.aviable()> 0){
char val = Serial.read();
Keyboard.println((int)val);
}
}
```
----
#### Il codice è il seguente (versione con pulsante)
```C
#include 'keyboard.h'
#define pulsante 8
void setup(){
Keyboard.begin();
pinMode(pulsante, OUTPUT);
}
void loop(){
if(digitalRead(pulsante)){
Keyboard.println("premuto");
}
}
```
---
## Macro che potete usare: Linux
- ctrl + alt + l = Blocca schermo
- Alt + F1 = aprite il menù di sistema
- ctrl + alt + F1,F2...,F7 = Apre il tty scelto (F7 è quello con il DE attivato)
- alt + tab = cambia applicazione in primo piano
- ctrl + shift + q = Chiude l'applicazione corrente
----
### Macro che potete usare: Windows e Mac
#### Win
- Windows Logo + l = Bloccate il PC
- alt + tab = cambia applicazione in primo piano
- Windows Logo + d = visualizzate il desktop
#### Mac
- Comando + q = chiude l'applicazione corrente
- Comando + tab = Cambia applicazione in primo piano
- Opzione + Maiuscole + Comando + q = Slogga l'utente senza chiedere il permesso
---
# ninau?
### Che significa "domande" in Hawaiano
---
# Thank you!
![POuL logo](lib/img/logo-text-white.svg)
![Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International](lib/img/creativecommons-by-nc-sa.svg)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment