printAsciiEx[ln](...)

Parent Previous Next


Fonctions:

printAsciiEx[ln]( char c )        

printAsciiEx[ln]( char tableau[] )

printAsciiEx[ln]( String s )

       printAsciiEx[ln]( F("chaîne) )          // F() copie la chaîne de caractères en mémoire flash


       print[ln]( Valeur numérique )        // Une valeur numérique compris entre  -2147483648 et 4294967295, valeurs limites comprises.


Description:

       Permet d'envoyer une séquence de frappe correspondant à la chaîne de caractère encodée au format ASCII étendu

       L'extension [ln] des fonctions ajoute le renvoi à la ligne en fin de chaîne


Arguments:

       Un char, un tableau de char ou une chaîne de caractères String

       Utilisation de la macro F() possible


Valeur de retour ( size_t ):

Retourne le nombre de caractères de la chaîne qui est égale au nombre d'octets ou 0 en cas d'erreur

ou dans le cas d'une valeur numérique renvoie 1 si réussi et sinon 0



Exemple:

       KeyboardEx.printAsciiExln("Arduino");



Code:


#include "Adafruit_TinyUSB.h"

#include "KeyboardEx.h"


// Report ID

enum

{

 RID_KEYBOARD = 1,

 // RID_MOUSE,

 RID_CONSUMER_CONTROL, // Media, volume etc ..

};


// HID report descriptor using TinyUSB's template

uint8_t const desc_hid_report[] =

{

 //TUD_HID_REPORT_DESC_KEYBOARD(),

 TUD_HID_REPORT_DESC_KEYBOARD( HID_REPORT_ID(RID_KEYBOARD) ),

 //TUD_HID_REPORT_DESC_MOUSE   ( HID_REPORT_ID(RID_MOUSE) ),

 TUD_HID_REPORT_DESC_CONSUMER( HID_REPORT_ID(RID_CONSUMER_CONTROL) )

};


Adafruit_USBD_HID usb_hid;

// --------------------------------------------------------------------------


// Tableau de caractères de la Table ASCII étendue

// ne comprend que des caractères sur 1 octet

//                      A    ^      À     Ñ     ?     @

const byte texte[] = {0x41, 0x5E, 0xC0, 0xD1, 0x3F, 0x40, 0}; // 0 caractère null de fin de chaîne



void setup() {

 usb_hid.setPollInterval(2);

 usb_hid.setReportDescriptor(desc_hid_report, sizeof(desc_hid_report));

 usb_hid.setReportCallback(get_report_callback , hid_report_callback);


 usb_hid.begin();

 KeyboardEx.begin(usb_hid, RID_KEYBOARD);


 KeyboardEx.setOS(Windows); // Si vous êtes sur Windows, permet l'utilisation des Alt Codes.

 // KeyboardEx.setDelay(5); // valeur par défaut, si problème augmenter la valeur à 10.


 // Commenter ces lignes si vous n'utilisez oas le port série

 Serial.begin(115200);

 while (!Serial) {

   ; // wait for serial port to connect. Needed for native USB

 }

 delay(6000);

}


void loop() {

 static int oneloop = 0;

 int a;


 // n'aime pas le while(1)

 if (!oneloop) {

   oneloop = 1;


   // ******************************************************************************************************

   //  Test de la fonction printAsciiEx(ln)(...)

   // ******************************************************************************************************

   KeyboardEx.printAsciiExln(F("*** Test de la fonction printAsciiEx(ln)(...) ***")); // fonctionne directement avec la chaine (char)

   KeyboardEx.printAsciiExln();                                                       // car caractère < 128


   unsigned int totalCaractere = KeyboardEx.printAsciiExln((char *)texte);

   KeyboardEx.print("Nombre de caractères :");

   KeyboardEx.printAsciiExln(totalCaractere);

   KeyboardEx.printAsciiExln();

   KeyboardEx.printAsciiExln();


   // Création d'un tableau de caractères au format ASCII étendu

   // les valeurs suivantes ne correpondent pas à des caractères:

   // 127, 129, 141, 143 144, 157

   a = 32;

   byte chaineAsciiEx[218 + 1]; // + 1 pour le caractère nul

   for (unsigned int i = 0; i < 218; ++i) {

     if (a == 127 || a == 129 || a == 141 || a == 143 || a == 157) {

       a += 1;

       if (a == 144) {

         a += 1;

       }

     }

     chaineAsciiEx[i] = a ;

     a += 1;

   }

   chaineAsciiEx[218] = '\0'; // important!!!


   totalCaractere = KeyboardEx.printAsciiExln((char *)chaineAsciiEx);

   KeyboardEx.print("Nombre de caractères :");

   KeyboardEx.printAsciiExln(totalCaractere);

   KeyboardEx.printAsciiExln();

   KeyboardEx.printAsciiExln();



   // Création d'un objet String au format ASCII étendu

   // les valeurs suivantes ne correpondent pas à des caractères:

   // 127, 129, 141, 143 144, 157

   a = 32;

   String chaine;

   for (unsigned int i = 0; i < 218; ++i) {

     if (a == 127 || a == 129 || a == 141 || a == 143 || a == 157) {

       a += 1;

       if (a == 144) {

         a += 1;

       }

     }

     chaine = chaine + String((char)a) ;

     a += 1;

   }


   totalCaractere = KeyboardEx.printAsciiExln(chaine);

   KeyboardEx.print("Nombre de caractères :");

   KeyboardEx.printAsciiExln(totalCaractere);

   KeyboardEx.printAsciiExln();

   KeyboardEx.printAsciiExln();


   KeyboardEx.printAsciiExln((char)164); // -> ¤


   char c = 165;

   KeyboardEx.printAsciiExln(c); // -> ¥ Alt Code nécessaire pour afficher ce caractère

   // car en dehors de la table (Le clavier Fr ne le gère pas)


   KeyboardEx.printAsciiExln();

   KeyboardEx.printAsciiExln(11222); // Affiche une valeur numérique


   KeyboardEx.printAsciiExln();


   KeyboardEx.end();

 }

}



uint16_t get_report_callback (uint8_t report_id, hid_report_type_t report_type, uint8_t* buffer, uint16_t reqlen)

{

 // Mettre Null à la place de get_report_callback dans cette fonction ci- dessous déclarée plus haut

 // si vous souhaitez supprmer cette procédure

 // usb_hid.setReportCallback(get_report_callback , hid_report_callback) -> usb_hid.setReportCallback(Null , hid_report_callback);


 // not used in this example

 return 0;

}


// Output report callback for LED indicator such as Caplocks

void hid_report_callback(uint8_t report_id, hid_report_type_t report_type, uint8_t const* buffer, uint16_t bufsize)

{

 uint8_t ledIndicator;


 // LED indicator is output report with only 1 byte length

 if ( report_type != HID_REPORT_TYPE_OUTPUT ) return;

 // KEYBOARD_LED_KANA (8) | KEYBOARD_LED_COMPOSE (3) | KEYBOARD_LED_SCROLLLOCK (4) | KEYBOARD_LED_CAPSLOCK (2) | KEYBOARD_LED_NUMLOCK (1)


 // buffer[0] si clavier seul

 // ou buffer[1] si plusieurs reports

 if (bufsize == 2) {

   ledIndicator = buffer[1];

 } else {

   ledIndicator = buffer[0];

 }

 // Allumer la led de la carte si CAPSLOCK (verrouillage des majuscule) est activé

 // La led ne s'allumera pas sur Adafruit QT py car c'est une Neopixel

 // mais sur un Seeeduino XIAO ok

 digitalWrite(LED_BUILTIN, !(ledIndicator & KEYBOARD_LED_CAPSLOCK));

}