"invalid conversion from 'char' to 'char*' [-fpermissive]"

Bonjour, dans un programme qui a pour but de transcrire des lettres en morse à l'aide d'un buzzer j’utilise la librairie MorseCode.h qui possède une fonction : transmit.

void transmit(int pin, char *s, int wpm, int frequency = 0)

En utilisant le code suivant j'obtiens une erreur de type "invalid conversion from 'char' to 'char*' [-fpermissive]" :

#include <MorseCode.h>
char caractere[26]  = { 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};

void setup() {
  // put your setup code here, to run once:

}

void loop() {
//  for (int f = 0; f <= 26; f++) {
//   MorseCode::transmit( 12, caractere[f] , 15, NOTE_C4);
//  }
MorseCode::transmit( 12, caractere[7] , 15, NOTE_C4);
//MorseCode::transmit( 12, "g" , 15, NOTE_C4);

}

MorseCode::transmit( 12, "g" , 15, NOTE_C4); fonctionne...
Le code tourne sur un ESP8266.
Mon tableau de char bloque au niveau de cette fonction transmit. J'ai bien été lire le tuto de J-M-L sur les pointeurs mais je n'ai pas tout compris.

Merci pour votre aide.

Bonjour,

Il faudrait voir ce que fait transmit, mais si comme on peut le supposer ça transmet un caractère, la définition devrait être
void transmit(int pin, char c, int wpm, int frequency = 0)

C'est pourtant clair. La méthode réclame une chaîne de caractères (un char *, ou un char [ ]), forcément terminée par '\0', puisque la longueur n'est pas précisée.

Remarque récurrente : un lien sur la librairie en question aurait été le bienvenu.

transmit transmet les informations nécessaires à la "traduction" des lettres en morse sur le buzzer :

void transmit(int pin, char *s, int wpm, int frequency = 0)
    {
        if ( wpm < 1 ) {
            wpm = 8;
        }

        // The word PARIS is standard for defining code speed
        // It has 50 elements
        // so it is 1 minute divided by wpm*words, wich will be dot speed
        wpm = (60 * 1000L) / (50 * wpm);

        if ( frequency == 0 ) {
            pinMode(pin, OUTPUT);
        }

        while ( *s ) {
            switch ( *s ) {
                case 'a':
                case 'A':
                    play(pin, wpm, frequency, ".-");
                    break;

                case 'b':
                case 'B':
                    play(pin, wpm, frequency, "-...");
                    break;

J'ai déjà essayé de modifier la librairie avec char c mais ça ne fonctionne pas.

Donc s est une chaîne de caractère, et non pas un caractère.

Oui, parce que transmit demande une chaine de caractères.
Si tu veux transmettre un seul caractère il faut soit modifier transmit, soit créer une chaine de caractères avec un seul caractère

char str[2];
str[0]=caractere[7];
str[1]=0; // fin de la chaine
MorseCode::transmit( 12, str , 15, NOTE_C4);

j'ai essayé :

String caractere[]  = { "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V"};

erreur : cannot convert 'String' to 'char*'

pourtant ce code fonctionne :

#include <MorseCode.h>
char Les_caracteres[20]; 
int i=0;

void setup()
{
 Serial.begin(9600);   
}

void loop()

{
    
   
 while (Serial.available() !=0) {
    
        char Cmd = Serial.read();
        Les_caracteres[i] = Cmd;
        i++;
  }
 

    MorseCode::transmit( 12, Les_caracteres, 15, NOTE_C4);
    memset(Les_caracteres,0,20);
    i=0;
    
}

J'ai déjà modifié transmit sans succès

Ben, oui. C'est la même chose que ce que je t'avais proposé: créer une chaine de caractères à envoyer.

Qu'est ce que tu veux faire exactement?

C'est vrai désolé

MorseCode.h (9,4 Ko)

char caractere[]  = { 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
char str[2];

void setup() {
  // put your setup code here, to run once:

}

void loop() {
//  for (int f = 0; f <= 25; f++) {
//   str[0]=caractere[f];
//   str[1]=0;
//   MorseCode::transmit( 12, str , 15, NOTE_C4);
//  }
str[0]= caractere[7];
str[1]=0;
MorseCode::transmit( 12, str , 15, NOTE_C4);
delay(1000);
}

ça fonctionne parfaitement.
Désolé je pensais que caractere[10] était une chaîne de caractère à un seul caractère dans un tableau de caractères !

Merci à tous.

Je veux créer un site web (ESP8266) pour apprendre le morse (le buzzer sera remplacé par des fichiers sonores) mais ça commence mal :sunglasses:

Merci.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.