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
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?