Arduino et VS1000D via UART - décoder le serial monitor

Bonjour,
je cherche a faire marcher un lecteur audio :

avec un arduino Uno via une connexion UART
j’utilise des boutons pour envoyer des commandes au VS1000D
1:play, 2:stop, 3:vol+, 4:vol-

La doc concernant l’UART du constructeur est là :
www.vlsi.fi/fileadmin/software/VS1000/uartcontrol030.zip
il y a un fichier uartcontrol.txt qui liste les commandes

J’ai connecté l’arduino et la carte avec ce code

#define DEBOUNCE 10
byte buttons[] = {
  14, 15, 16, 17, 18, 19}; 
#define NUMBUTTONS sizeof(buttons)
byte pressed[NUMBUTTONS], justpressed[NUMBUTTONS], justreleased[NUMBUTTONS];


#include <SoftwareSerial.h>
#define rxPin 5
#define txPin 6
int incomingByte = 0;
// set up a new serial port
SoftwareSerial mySerial =  SoftwareSerial(rxPin, txPin);


void setup() {

  // define pin modes for tx, rx:
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
  // set the data rate for the SoftwareSerial port
  mySerial.begin(115200);
  Serial.begin(9600);
  
    // Power on VS1000
  digitalWrite(3, HIGH);
  delay(100);
  digitalWrite(3, LOW);

  byte i;

  // set up serial port
  Serial.begin(9600);
  Serial.print("Button checker with ");
  Serial.print(NUMBUTTONS, DEC);
  Serial.println(" buttons");

  // Make input & enable pull-up resistors on switch pins
  for (i=0; i< NUMBUTTONS; i++) {
    pinMode(buttons[i], INPUT);
    digitalWrite(buttons[i], HIGH);
  }
}

void check_switches()
{
  static byte previousstate[NUMBUTTONS];
  static byte currentstate[NUMBUTTONS];
  static long lasttime;
  byte index;

  if (millis() < lasttime) {
    lasttime = millis();
  }

  if ((lasttime + DEBOUNCE) > millis()) {
    return; 
  }

  lasttime = millis();

  for (index = 0; index < NUMBUTTONS; index++) {
    justpressed[index] = 0;       // when we start, we clear out the "just" indicators
    justreleased[index] = 0;

    currentstate[index] = digitalRead(buttons[index]);   // read the button

    if (currentstate[index] == previousstate[index]) {
      if ((pressed[index] == LOW) && (currentstate[index] == LOW)) {
        // just pressed
        justpressed[index] = 1;
      }
      else if ((pressed[index] == HIGH) && (currentstate[index] == HIGH)) {
        // just released
        justreleased[index] = 1;
      }
      pressed[index] = !currentstate[index];  // remember, digital HIGH means NOT pressed
    }
    //Serial.println(pressed[index], DEC);
    previousstate[index] = currentstate[index];   // keep a running tally of the buttons
  }
}


void loop() {
  
  check_switches();      // when we check the switches we'll get the current state

  for (byte i = 0; i < NUMBUTTONS; i++) {
    if (justpressed[1]) {
      mySerial.write("p1\n");
    }
    //STOP
    if (justpressed[2]) {
      mySerial.write("C");
    }
    if (justpressed[3]) {
      mySerial.write("+");
    }
    if (justpressed[4]) {
      mySerial.write("-");
    }

  }

  // envoie des données seulement quand vous recevez des données :
  if (mySerial.available() > 0) { // si des données entrantes sont présentes
    // lit le 1er octet arrivé 
    incomingByte = mySerial.read();

    // dit ce que vous obtenez
    Serial.println(incomingByte, DEC);
  }

}

La partie boutons fonctionne tres bien.
La connexion UART semble fonctionner, mais je n’arrive pas à lire les données renvoyées par la carte
par exemple pour

mySerial.write("C");

la carte me renvoie

99
99
99
99
141
255
99
99
99
99
99
99
99
99
99
99
99
99
107
141
99
99
177
99
99
99
99
99
99
99
99
99
99
99
99
99
99
99
99
99
99
99
99
141
255
99
99
119
133

comment dois-je faire pour lire ces données sous forme ASCII ?
j’ai essayé des recherches “DEC to ASCII arduino” sans succès…
Quel est la manip ?

Bonjour,

Pour un caractère seul il faut utiliser des simples quote (') et non des doubles (") !

Sinon pour l'affichage ascii, si le module renvoi déja de l'ascii :

Serial.println(incomingByte, DEC); // Avant
Serial.write(incomingByte); // Aprés

Merci pour ta réponse ! Pour l'ASCII, j'ai résolu le problème en changeant

incomingByte = mySerial.read();
    Serial.print(incomingByte, DEC)

en

char incomingByte = mySerial.read();
    Serial.print(incomingByte)

pour ce qui est des " ou ', je ne saisis pas bien, " est pour envoyer une chaine de caractères et ' pour un caractère seul ? Pourquoi ?

Serial.print(char) revient à faire un Serial.write(char) ;)

jeremixogg: pour ce qui est des " ou ', je ne saisis pas bien, " est pour envoyer une chaine de caractères et ' pour un caractère seul ? Pourquoi ?

Parce que. C'est le langage C/C++ qui veut ça. "blabla" = chaine de caractères 'a' = caractère seul

'blabla' = erreur (ça compilera mais ça ferait pas ce que tu souhaites)

Serial.write() = envoi d'un caractère seul ou d'un octet Serial.print() = envoi d'une chaine de caractère ou d'un nombre avec formatage