INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
USBhost mit keyboard gefunden, funktioniert aber nicht wie's soll
05.08.2015, 14:26 (Dieser Beitrag wurde zuletzt bearbeitet: 05.08.2015 14:27 von HaWe.)
Beitrag #1
USBhost mit keyboard gefunden, funktioniert aber nicht wie's soll
habe jetzt eine halbwegs funktonierende USBhost lib mit keyboard gefunden,
https://github.com/arduino-libraries/USBHost
es funktioniert aber nicht wie's soll:
Die Funktionen und Klassen und ihre Funktionsweise sind für mich absolut undurschschaubar.

Was fehlt, sind Funktionen wie
kbhit()
getch()
getche()
getchar()
gets()

ich habe es hier versucht, aber ich kann nicht feststellen, wann das Keyboard genau gedrückt wurde, um erst dann eine Taste auszulesen, und außerdem zeigt er ständig unendlich oft die zuletzt gedrückte Taste an, und außerdem arbeitet er bei nicht gedrückter Taste nicht ununterbrochen weiter (sondern macht öfters 1 sec. lang Pause!). Hier ist mein Versuch:

Code:
/*
USBkeyboard Controller Example
// modified by HaWe 05-July-2015

Shows the output of a USB USBkeyboard connected to
the Native USB port on an Arduino Due Board.

created 8 Oct 2012
by Cristian Maglie

http://www.arduino.cc/en/Tutorial/USBkeyboardController

This sample code is part of the public domain.
*/


// Require USBkeyboard control library
#include <Scheduler.h>;
#include <KeyboardController.h>
USBHost usb;                         // Initialize USB Controller
KeyboardController keyboard(usb);    // Attach USBkeyboard controller to USB


#define ENTER  40


//================================================================================​=====

int  keyPressed() {
  int key =  keyboard.getKey();
  if(key) return 1;
  else return 0;
}  

int  keyReleased() {
  int key =  keyboard.getKey();
  if(key) return 1;
  else return 0;
}

//================================================================================​=====

int getche_() {
  static int16_t oemkey=0, modkey=0, currkey=0, lastkey=0;

  currkey=-1;
  oemkey=keyboard.getOemKey();
  modkey=keyboard.getModifiers();
  if(oemkey==88) oemkey=40; // ENTER, ENTERnum

  // ESC   = 41
  // Enter = 40, 88
  // Space = 44
  // Tab   = 43
  // TabBack   = mod 2 + 43
  // Backspace = 42
  // F1    = 58
  // F5    = 62
  // F9    = 66
  // F12   = 69
  // INS   = 73
  // HOME  = 74
  // PgUp  = 75
  // DEL   = 76
  // END   = 77
  // PgDn  = 78
  // RIGHT = 79
  // LEFT  = 80
  // DN    = 81
  // UP    = 82  

  if(oemkey==ENTER)     currkey='\n';    // ENTER
  else  if(oemkey==42)  currkey= 8;      // BACKSPACE
  else  if(oemkey==43)  currkey='\t';    // TAB
  else  if( oemkey==41) currkey=27;      // ESC key
  else  if((modkey==0)&&(oemkey== 50)) currkey='\\';   // BACKSLASH
  else  if((modkey==0)&&(oemkey==100)) currkey='\\';
  else  if((modkey==2)&&(oemkey==50))  currkey='|';    // PIPELINE
  else  if((modkey==2)&&(oemkey==100)) currkey='|';
  else  if((modkey==32)&&(oemkey==50)) currkey='|';
  else  if((modkey==32)&&(oemkey==100)) currkey='|';  

  else  if((oemkey>=58)&&(oemkey<=69)) {;} // Function key F1-F12
  else  if((oemkey>=73)&&(oemkey<=82)) {;} // CURS key INS-PgDn, RIGHT-UP  

  else  currkey=keyboard.getKey();                     // normal letter

  if(currkey>27) Serial.write(currkey);
  while(!keyReleased());

  return currkey;


}

//================================================================================​=====

char * gets_(char * USBstr) {
  static  int16_t  currkey=0, lastkey=0;
  static  char     chbuf[3];
  char  * strptr = USBstr;

  currkey = getchar();

  if(currkey==8) {                         // BACKSPACE
      if(strlen(USBstr)>0)  USBstr[strlen(USBstr)-1]='\0';
      else strcpy(USBstr,"");
  }
  else { sprintf(chbuf, "%c", currkey); strcat(USBstr, chbuf); }  

  return strptr;
}  

//================================================================================​=====

void setup()
{
  Serial.begin(115200);
  Serial.println("Program started");
  Scheduler.startLoop(USBloop);
  delay(200);
}

//================================================================================​=====

void loop() {
   char USBkey;
   static int32_t i;

   if(keyPressed()) USBkey=getche_();   // failure: unlimited outputs last key repeatedly !!

   // if no  keypress: just proceed...
   Serial.println(i++);                 // failure: program blocks intermediately !!

   yield();

}  

//================================================================================​=====

void USBloop()
{
  // Process USB tasks
  usb.Task();  // strangely seems to call keyPressed() and keyReleased() in background
               // but how and when ???
               // and why don't they return anything ???
               // why are they no methods of USB (USB.keyPressed(), USB.keyReleased()) ???
               // and why isn't usb.Task() implemented as a task of Scheduler ???
  delay(5);

}


//================================================================================​=====
//================================================================================​=====
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  LCD geht nicht - keine Ahnung warum?? DL1AKP 12 317 15.05.2017 13:17
Letzter Beitrag: DL1AKP
  [Mega2560 und Marlin]Was soll diese Fehlermeldung? ManniP 3 174 11.05.2017 14:03
Letzter Beitrag: Tommy56
  433mHz Funkmodule senden/empfangen nicht metzgefa 2 317 06.05.2017 13:30
Letzter Beitrag: metzgefa
  Can-Bus Shield ok, aber keine Daten Clubsport 54 3.449 02.04.2017 22:28
Letzter Beitrag: Bitklopfer
  SD Karte wird nicht erkannt Maxi290997 6 237 31.03.2017 06:05
Letzter Beitrag: Bitklopfer
Sad Sketch funktioniert auf dem Mega 2560 nicht Frank1234 16 641 26.03.2017 14:15
Letzter Beitrag: oOSpikeOo
  Mein Skript macht nicht das was es soll ;( DerMatze79 4 293 16.03.2017 22:19
Letzter Beitrag: MicroBahner
  Programmablauf macht nicht das was ich möchte !! ESP + Blynk b3ta 3 226 01.03.2017 14:29
Letzter Beitrag: Tommy56
Rainbow File geht nicht zum compilieren!!!! Jocky 7 335 19.02.2017 20:01
Letzter Beitrag: Binatone
  IRremote bringe ich nicht zum laufen Franz54 5 264 19.02.2017 11:56
Letzter Beitrag: Tommy56

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste