Leonardo, problema mappatura caratteri speciali tastiera

Ciao, ho un problema utilizzando una leonardo come tastiera USB, nello specifico ho problemi con caratteri come /- probabiolmente anche altri caratteri di punteggiatura e simili hanno lo stesso problema, ma il - e / sono quelli che mi interessano ora. Uso il seguente sketch

#include <IRremote.h>

int RECV_PIN = 11;

long codice = 0;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  delay(3000);
  Keyboard.begin();
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
    codice = results.value;
    Serial.println(codice);
   

  }
   [b]if (codice == 776834192) {
      Serial.println("click");
      Keyboard.print("audacious /p ");
      Keyboard.write(47);
      Keyboard.print("home");
      Keyboard.write(47);
      Keyboard.print("io");
      Keyboard.write(47);
      Keyboard.print("Musica");
      Keyboard.write(47);
      Keyboard.println("canzone1.mp3");
    }
    if (codice == 6140016) {
      Keyboard.println("audacious -p /home/zut/Musica/canzone2.mp3");
    }[/b]
    delay(1000);
    codice = 0;
}

che dovrebbe leggere il segnale proveniente dal telecomando e avviare la riproduzione di un file mp3 usando un programma sul pc, in questo caso audacious su linux.
Stando a quanto riportato da asciitable.com e dalla documentazione entrambe le soluzioni adottate per trasmettere i caratteri come tastiera dovrebbero funzionare, in realta’ tutte le / vengono trasmesse come - e il - viene trasmesso come ’
Da quello che ho capito devo usare il valore decimale dalla tabella ascii, ma i codoci riportati dalla tabella vanno benissimo per le lettere normali, ma sbagliano con i caratteri speciali.
Qualcuno sa dirmi dove sbaglio?
Ha a che vedere con la mappatura della tastiera?

risolto!
ho stampato con Keyboard.write tutti i codici ascii da 0 a 126 questo e' il risultato

 !°£$%/à)=(^,'.-0123456789çò;ì:_"ABCDEFGHIJKLMNOPQRSTUVWXYZèù+&?\abcdefghijklmnopqrstuvwxyzé§*|

il primo carattere stampato e' uno spazio che equivale al valore decimale 32, il ! e' 33 e cosi' via, quindi / e' risultato essere 38 anziche' 47 come riportato nelle tabelle ascii e - e' risultato essere 47.
Ora funziona tutto, ma mi resta un dubbio, a cosa sono dovute le differenze tra la tabella dei caratteri ascii ufficiale e quello che stampa arduino?

Molto probabilmente alla codifica utilizzata. Ma tu che SO usi? Potresti pubblicare il codice, sarei curioso di provarlo.

Ciao, uso linux mint, il codice che uso e’ questo

#include <IRremote.h>

int RECV_PIN = 11;

long codice = 0;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  delay(3000);
  Keyboard.begin();
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value);// residuo di codice che ho usato per scoprire i valori trasmessi dal telecomando
    irrecv.resume(); // Receive the next value
    codice = results.value;
    Serial.println(codice);
   

  }
   if (codice == 776834192) {
      Serial.println("click");
      Keyboard.print("audacious /p "); //questa parte di codice e' quella che funziona come dovrebbe
      Keyboard.write(38);
      Keyboard.print("home");
      Keyboard.write(38);
      Keyboard.print("zut");
      Keyboard.write(38);
      Keyboard.print("Musica");
      Keyboard.write(38);
      Keyboard.println("tnt.mp3");
    }
    if (codice == 6140016) {
      Serial.println("click");
      Keyboard.println("audacious -p /home/zut/Musica/004superMarioCoin.mp3"); //questo non funziona sostituisce "/ "e "-" con "-"  e "  ' "
    }
    delay(1000);
    codice = 0;
}

e’ ancora parecchio pasticciato visto che ho messo insieme gli esempi per ricevere i codici dal telecomando e quello sulla tastiera usb e ci sono ancora le parti che ho usato per mappare i tasti del telecomando.
Essendo alle prime armi con linux (in realta’ lo uso da un anno, ma ho usato pochissimo il terminale) pensavo che passando una serie di comandi tramite terminale il pc li eseguisse tutti, in realta’ il pc esegue il primo comando che riceve, poi non riesco a passare altri comandi al terminale perche’ si “blocca” durante la riproduzione del file, quindi ho scartato l’opzione di usare il terminale per far partire la ripdroduzione degli mp3.
In passato avevo provato ad installare le librerie necessarie per la riproduzione degli mp3 con python e processing, ma in entrambi i casi non ero riuscito a farle funzionare, quindi avevo pensato di usare direttamente dei comandi da terminale.
A questo punto o riprovo ad installare le librerie necessarie a python o processing, oppure mi cerco un programma tipo “soundboard” che associ la riproduzione di un mp3 alla pressione di un tasto della tastiera.

Peccato, non sono più a casa per provarlo.
Però non capisco una cosa: che intendi per <<non riesco a passare altri comandi al terminale perche’ si “blocca”>>?
Se passi un comando in quel modo, il terminale lo esegue e finché non l’ha terminato non rende il controllo all’utente. Per far sì di eseguirlo in background, devi terminare il comando con “&”: il simbolo dell’e commerciale dice al terminale di eseguire il comando in background e di rendere il controllo immediatamente all’utente.
Quindi prova con:

audacious -p /home/zut/Musica/004superMarioCoin.mp3 &

Ricordati che il terminale stampa in output l’ID del processo in esecuzione (casomail lo volessi terminare con kill) e che se chiudi il terminale il programma si interrompe lo stesso perché chiudi il processo genitore che lo ha lanciato.

:slight_smile: :slight_smile: :slight_smile: :slight_smile:
grazie mille, con la & mi hai risolto tutto, stavo pensando di fare uno script shell a cui fare gestire i vari IF e usare arduino semplicemente per spedire i codici ricevuti dal telecomando al pc.
Ho scaricato anche giada che dovrebbe permettermi di associare una lettere della tastiera ad ogni mp3, purtroppo non supporta il formato mp3.
Oggi faccio un po' di prove, appena ho qualcosa di realmente utilizzabile lo posto.

Non conosco Giada né i formati che supporta però potresti semplicemente convertire i tuoi MP3 in qualcosa di leggibile da quel software (es. OGG o altro).