Arduino jako klávesnice

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Odpovědět
Vejv-cz
Příspěvky: 8
Registrován: 26 dub 2019, 20:53
Reputation: 0

Arduino jako klávesnice

Příspěvek od Vejv-cz » 27 dub 2019, 11:33

Zdravím,
mohly byste mi prosím poradit s tímto problémem:

Potřebuji emulovat zmáčknutí klávesy tak, aby se to ve Windows tvářilo, jako by k němu byla připojená klávesnice a přímo zmáčkla daný znak.
Normální programy pro vkládání textu můj problém neřeší, protože je text vkládán a nepřichází přímo z klávesnice. Napadlo mě proto použít Arduino, ovšem narazil jsem na řadu komplikací:

1) Zjistil jsem, že pro knihovnu Keyboard.h budu potřebovat jen některé vybrané Arduina s USB převodníkem v čipu. Aktuálně mám nano a mega, přičemž bych preferoval využít nano, ale v případě že by to jinak nešlo, koupil bych si i jiné.

2) Potřebuji psát česky (to znamená i s diakritikou) a obávám se, že většina metod bude podporovat pouze ASCI.


Ideálně něco takového, jen s češtinou: https://www.youtube.com/watch?v=wTbjmul ... L&index=28
Taky bych potřeboval, aby bylo Arduino připojeno jako klávesnice, ale abych do něj mohl posílat skrz Serial linku text.



Děkuji všem, kteří mi poradí, či nasměrování na nějaký zdroj, kde je problém řešen. Já jsem bohužel nic nenašel, nebo jsem to nepochopil :|
Středně pokročilý nováček.

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Arduino jako klávesnice

Příspěvek od AstroMiK » 27 dub 2019, 12:52

Jak píšeš, simulace klávesnice (nebo třeba i myši) je možná pouze s procesory ATmega32U. Takže například "Arduino Micro".

Při použití knihovny "Keyboard.h" záleží na tom, jak máš nastavenou klávesnici v PC.
Diakritiku je možné zobrazovat stejně, jako když mačkáš klávesy na klávesnici.

Takže třeba pro českou klávesnici, když zmáčneš klávesu [6], tak se zobrazí "ž".

Některé diakritické znaky se musí tvořit kombinací Shift a klávesy [+], nebo [=] (klávesa vedle BackSpace).

Například "ň" je stejně jako při normálním zápisu na klávesnici složeno ze sekvence:
- Shift dolů
- stisknout a uvolnit [+] (příprava na háček)
- uvolnit Shift
- stisknout [n]

Podobně třeba velké "Ó" se vytvoří sekvencí:
- stisknout a uvolnit klávesu [=] (přípava na čárku)
- stisknout [O] (kombinace shift + O)



VŽDYCKY ALE ZÁLEŽÍ NA NASTAVENÍ KLÁVESNICE V PC.
Při přepnutí třeba na anglickou klávesnici to už fungovat nebude.
Pozor taky na prohození "Y" a "Z" při nastavení QWERTY, nebo QWERTZ rozložení.


Příklad pro odeslání textu: "příliš ň Ó"

Kód: Vybrat vše


#include "Keyboard.h"

void setup(void)
  {

    delay(5000);              // chvili pauza na spusteni textoveho editoru
    Keyboard.begin();


    // "příliš    ň    Ó"
    Keyboard.write('p');                // klavesa [p]
    Keyboard.write('5');                // klavesa [5] = (r s hackem)
    Keyboard.write('9');                // klavesa [9] = (i s carkou)
    Keyboard.print("li");               // klavesy [l] a [i]
    Keyboard.write('3');                // klavesa [3] = (s s hackem)

    Keyboard.print("    ");             // mezery

    Keyboard.press(KEY_LEFT_SHIFT);     // stisknout SHIFT
    Keyboard.write('+');                // klavesa s hackem
    Keyboard.releaseAll();              // uvolneni shiftu
    Keyboard.write('n');                // klavesa [n] => male n s hackem   

    Keyboard.print("    ");             // mezery

    Keyboard.print('=');                // klavesa s carkou
    Keyboard.write('O');                // klavesa [O] => velke O s carkou   

  }


void loop(void)
  {
  }

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Arduino jako klávesnice

Příspěvek od AstroMiK » 27 dub 2019, 13:18

... a samozřejmě zůstává zachovaná i běžná sériová linka pro obousměrnou komunikaci, takže se dá vytvořit třeba tohle:

Kód: Vybrat vše



#include "Keyboard.h"

void setup(void)
  {
    Serial.begin(9600);
  }


void loop(void)
  {
    if (Serial.available())
      {
        while (Serial.available())
          {
            char znak = Serial.read();
            Serial.write(znak+1);          // vraci znak posunuty o 1 ASCII pozici (z 'A' udela 'B')
            Keyboard.write(znak+1);        // a ten posunuty znak zaroven zapise do vstupniho pole serioveho monitoru
          }
      }
    
  }


Pak stačí zadat do sériového terminálu jedno písmeno a už jen mačkat ENTER.
Arduino si přečte znak přijatý sériovou linkou, zvetší jeho ASCII kód o 1 a pomocí simulace klávesnice ten zvětšený znak zapíše zpátky do vstupního políčka sériového terminálu.

Video:
https://youtu.be/B0GQnfS9Ut4

Vejv-cz
Příspěvky: 8
Registrován: 26 dub 2019, 20:53
Reputation: 0

Re: Arduino jako klávesnice

Příspěvek od Vejv-cz » 27 dub 2019, 13:32

Mooc děkuji za odpověď.

Ještě se se zeptám, jakým způsobem se bude Arduino hlásit v počítači?
Bude potřeba nahrát speciální ovladač, aby se Arduino ukazovalo jako klávesnice, nebo zadávání funguje jinak?
Středně pokročilý nováček.

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Arduino jako klávesnice

Příspěvek od AstroMiK » 27 dub 2019, 13:48

Ve windows 8.1 se hlásí takhle:
winsys.gif
Myslím, že ovladače si to našlo automaticky při prvním zasunutí do USB portu - ale to už si nepamatuju.

Vejv-cz
Příspěvky: 8
Registrován: 26 dub 2019, 20:53
Reputation: 0

Re: Arduino jako klávesnice

Příspěvek od Vejv-cz » 27 dub 2019, 14:07

Super, ještě jednou moc díky.
Středně pokročilý nováček.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 13 hostů