Stránka 1 z 2

Arduino jako klávesnice 2

Napsal: 12 čer 2019, 17:31
od Vejv-cz
Opět zdravím,
už jsem si konečně obstaral Arduino micro a trápím se s češtinou. https://www.arduino-forum.cz/viewtopic.php?f=40&t=1711
Potřebuji psát česky s diakritikou, čísly, speciálními znaky, ale vůbec se mi nedaří posílat znaky s háčky, čárky atd.

Napadlo mně zmáčknout klávesu alt a číslo znaku. To mělo fungovat stejně, jako na normální klávesnici, ale nezdařilo se.
Nyní skouším neelegantní metodu zmáčknutí čárky nebo háčku a napsání písmene, ale to se opět nedaří.

Jak doporučujete posílat české klávesy?

Toto je kód, který jsem zatím splácal:

Kód: Vybrat vše

#include "Keyboard.h"

int cisla[]= {234, 225, 226, 227, 228, 229, 230, 231, 232, 233};

void setup() {
  Serial.begin(115200);
  Keyboard.begin();
}

void dalsi(){
  Serial.println("OK");
  loop();
}

void loop() {
  String vstup;
  if(Serial.available()){
    vstup = Serial.readStringUntil('\n');
    int data= vstup.toInt();    

    if (data>=65 && data<=90){
      Keyboard.write(data);
      dalsi();
    }else if (data>=97 && data<=122){
      Keyboard.write(data);
      dalsi();
    }else if (data>=48 && data<=57){
      Keyboard.write(cisla[data-48]);
      dalsi();
    }
  }
}

Re: Arduino jako klávesnice 2

Napsal: 12 čer 2019, 20:56
od AstroMiK
Tady je ukázkový program pro psaní speciálních znaků pomocí Alt+číslo

Důležité je, že musí být zapnutý NumLock.
Bohužel nevím, jak by se dalo zjistit, jestli je aktuálně zapnutý, nebo vypnutý.
Přepnutí jeho stavu je pomocí: Keyboard.press(219);

Kódování numerické klávesnice je popsáno tu:
https://forum.arduino.cc/index.php?topic=179548.0

Video činnosti ukázkového kódu je tady:
https://youtu.be/ojqt8ydiVak

Kód: Vybrat vše

#include "Keyboard.h"

void setup()
 {
    
    delay(5000);
    Keyboard.begin();
    
   //  Keyboard.press(219);         // pripadne zapnuti NumLock
    
 }



void loop(void)
  {
    //  velka omega  (Alt + 937)
    Keyboard.press(KEY_LEFT_ALT);
    Keyboard.write(233);              //  = 9
    Keyboard.write(227);              //  = 3
    Keyboard.write(231);              //  = 7
    Keyboard.releaseAll();

    delay(1000);

   // ruske velke "JA"  (ALT + 1071)
    Keyboard.press(KEY_LEFT_ALT);
    Keyboard.write(225);              //  = 1
    Keyboard.write(234);              //  = 0
    Keyboard.write(231);              //  = 7
    Keyboard.write(225);              //  = 1
    Keyboard.releaseAll();

    delay(1000);
 
  }

Re: Arduino jako klávesnice 2

Napsal: 12 čer 2019, 22:10
od gilhad
Tady je dobré uvědomit si, že klávesnice vlastně neví, co je na ní napsané a co si uživatel nainstaloval, takže odesílá to, co namačkal (s tím, že ví co jsou modifikátory a co normální klávesy). Takže namačkání nějakých kláves je vlastně akce naslepo a záleží na tom, co si o tom myslí OS.

Re: Arduino jako klávesnice 2

Napsal: 13 čer 2019, 08:24
od AstroMiK
Gilhad:
Přesně tak.
V tom původním vlákně jsem to napsal do příspěvku červeně: "Vždycky záleží na nastavení klávesnice v PC".

Myslím (ale nemám to na 100% ověřené), že u těch kombinací Alt+číslo už nezáleží na přepnutí jazyka.
Třeba ta Omega se pomocí Alt+937 dá napsat na české i arabské klávesnici.

Re: Arduino jako klávesnice 2

Napsal: 13 čer 2019, 11:30
od gilhad
AstroMiK píše:
Gilhad:
I tak záleží na tom, co si myslí OS - mě to při české klávesnici s numlockem a s pravým alt skáče na 9., 3. a 7. záložku , na anglické se to chová jinak a ještě jinak se to chová, pokud mám vypnutý numlock, ale Omegu to nenapíše ani při jedné z těch kombinací (a to to ťukám prstama na skutečné klávesnici)

Re: Arduino jako klávesnice 2

Napsal: 13 čer 2019, 11:43
od commar
Musíte používat levý ALT a vyzkoušejte na numerické 937 a také 0937...

Re: Arduino jako klávesnice 2

Napsal: 13 čer 2019, 12:41
od gilhad
commar píše:
13 čer 2019, 11:43
Musíte používat levý ALT a vyzkoušejte na numerické 937 a také 0937...
Ano, ani s levým altem a sekvencemi 937, resp 0937 to nevygeneruje ani Omegu, ani jiný viditelný znak, bez ohledu na stav NumLock a bez ohledu na to, zda používám českou či anglickou klávesnici.

(OS: Gentoo linux, fluxbox)
--------------------
Jinými slovy - klávesnice odesílá která tlačítka byla zmáčknuta. OS vyhodnocuje, co to doopravdy znamená v závislosti na tom, jak má nastavené svoje záležitosti (zvolený jazyk, konvence atd.)

Například Atl+F4 nezavírá okno, ale přepíná na 4. virtuální plochu. Ctrl+Alt+F4 přepíná na čtvrtý textový terminál. FN+F4 (multimediální tlačítko [sleep] podle popisu na klávesnici) vyvolá dva (naskriptované) zápisy zápis do logu (

Kód: Vybrat vše

Jun 13 12:58:25 merle root: ACPI event get: button/sleep PNP0C0E:00 00000080 0000000b
Jun 13 12:58:25 merle root: ACPI event unhandled: button/sleep PNP0C0E:00 00000080 0000000b
), ale počítač neuspí (a šlo by na to pověsit libovolnou další akci kromě/místo logování)

Prostě klávesnice odešle, co bylo stisknuto, co se následkem toho stane si rozhoduje OS

Re: Arduino jako klávesnice 2

Napsal: 13 čer 2019, 16:07
od Vejv-cz
Díky za odpovědi, ale u mně se to chová velmi zvláštně.

Když na fyzické klávesnici zkouším levý alt+937 vypíše se toto: ę
Pokud před to napíšu nulu(alt+0937 ): ©
U mně vůbec nezáleží jakou mám klávesnici(českou/anglickou) a ani nezáleží jestli je zapnutý num lock.

Arduino s vaším kódem napíše neviditelný znak.

Re: Arduino jako klávesnice 2

Napsal: 14 čer 2019, 15:57
od Vejv-cz
Jak doporučujete tedy řešit můj problém.
Mám se spíše zajímat jak vyřešit problém s alt+kód znaku, nebo mi doporučíte jinou metodu, jak problém vyřešit?

Re: Arduino jako klávesnice 2

Napsal: 14 čer 2019, 16:20
od AstroMiK
Tak jsem zkoušel ten svůj program spustit tak, aby odesílal klávesy místo do původního "PS Padu" do "MS Wordu".
A začalo se to chovat tak, jak píšeš.
Z toho teda vyplývá, že nejenom operační systém, ale i cílová apikace má vliv na to, co se bude zobrazovat.

Já už teda dál nevím.

Do jakého programu vlastně chceš ty stisky kláves posílat?