bonjours a tous
je sais pas si je post au bon endroit mais vue que c'est en français je me lance
je suis entrain de faire un projet pour faire du code morse j'ai d’ailleurs trouver un bout de code sur internet que j'ai adapter a mes besoin je suis newbi mais je me débrouille quand même bien
j'ai 2 problème mon premier est que j'ai un LCD 20x4 j'ai des valeur d’écrit sur la première ligne tout est correct sauf que je veux faire apparaître un "String" sur ma 2ieme ligne si le "String" est inférieur a 19 soit la largeur du LCD tout est beau mais le problème est que si ça dépasse 19 a la place de continuer sur la 3ieme ligne il continu sur la 4ieme ligne
il y a t-il quelque chose que j'ai loupé ? et surtout il y a t-il un moyen d’arranger ça ou c'est une question de hardware ?
mon 2ieme problème est que la variable a entrer pour le code morse est un Const Char quand je met ma variable Input qui est le résultat d'un Serial.Read() et un "String" ça me donne un erreur cannot convert String to Const Char j'ai passer la journée d'hier a essayer plein de chose mais a chaque chose que j essayais ça me créais un nouveau problème je ne sais plus quoi penser qu'es-ce que je peux faire pour corriger ce problème la
merci d'avance
Danny
voila le code:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//Define the LED Pin
#define PIN_OUT 13
//Define unit length in ms
#define UNIT_LENGTH 250
int startButton = 0;
String autoButton = "Auto Off";
int phraseDelay = 1000;
//String input = "";
String input = "";
//Build a struct with the morse code mapping
static const struct {const char letter, *code;} MorseMap[] =
{
{ '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', "--.." },
{ ' ', " " }, //Gap between word, seven units
{ '1', ".----" },
{ '2', "..---" },
{ '3', "...--" },
{ '4', "....-" },
{ '5', "....." },
{ '6', "-...." },
{ '7', "--..." },
{ '8', "---.." },
{ '9', "----." },
{ '0', "-----" },
{ '.', "·–·–·–" },
{ ',', "--..--" },
{ '?', "..--.." },
{ '!', "-.-.--" },
{ ':', "---..." },
{ ';', "-.-.-." },
{ '(', "-.--." },
{ ')', "-.--.-" },
{ '"', ".-..-." },
{ '@', ".--.-." },
{ '&', ".-..." },
};
void setup()
{
Serial.begin(9600);
pinMode( PIN_OUT, OUTPUT );
digitalWrite( PIN_OUT, LOW );
lcd.begin(20, 4);
}
void loop()
{
lcd.setCursor(0,0);
lcd.print(autoButton);
lcd.setCursor(14,0);
lcd.print("Xmit:");
while(Serial.available()>0)
{
input += (char) Serial.read();
delay(5);
}
if(input.indexOf("start") >=0)
{
delay(phraseDelay);
ActivateMorse();
input = "";
}
else if(input.indexOf("auto") >=0)
{
autoButton = "Auto On ";
input = "";
}
else if(input.indexOf("stop") >=0)
{
autoButton = "Auto Off ";
startButton = 0;
input = "";
}
else if(autoButton == "Auto On ")
{
delay(phraseDelay);
ActivateMorse();
delay(phraseDelay);
}
else if(input.indexOf("clear") >=0)
{
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,3);
lcd.print(" ");
input = "";
}
else
{
lcd.setCursor(0,1); //******************ICI MON PREMIER PROBLÈME
lcd.print(input);
input = "";
}
}
void ActivateMorse()
{
String morseWord = encode(input); //ICI MON DEUXIÈME LA VARIABLE ÉTAIT "SOS" A LA PLACE DU INPUT
for(int i=0; i<=morseWord.length(); i++)
{
switch( morseWord[i] )
{
case '.': //dit
digitalWrite( PIN_OUT, HIGH );
lcd.setCursor(19,0);
lcd.print("X");
delay( UNIT_LENGTH );
digitalWrite( PIN_OUT, LOW );
lcd.setCursor(19,0);
lcd.print(" ");
delay( UNIT_LENGTH );
break;
case '-': //dah
digitalWrite( PIN_OUT, HIGH );
lcd.setCursor(19,0);
lcd.print("X");
delay( UNIT_LENGTH*3 );
digitalWrite( PIN_OUT, LOW );
lcd.setCursor(19,0);
lcd.print(" ");
delay( UNIT_LENGTH );
break;
case ' ': //gap
delay( UNIT_LENGTH );
} } }
String encode(const char *string)
{
size_t i, j;
String morseWord = "";
for( i = 0; string[i]; ++i )
{
for( j = 0; j < sizeof MorseMap / sizeof *MorseMap; ++j )
{
if( toupper(string[i]) == MorseMap[j].letter )
{
morseWord += MorseMap[j].code;
lcd.setCursor(0,3);
lcd.print(morseWord);
break;
}
}
morseWord += " "; //Add tailing space to seperate the chars
}
return morseWord;
}
String decode(String morse)
{
String msg = "";
int lastPos = 0;
int pos = morse.indexOf(' ');
while( lastPos <= morse.lastIndexOf(' ') )
{
for( int i = 0; i < sizeof MorseMap / sizeof *MorseMap; ++i )
{
if( morse.substring(lastPos, pos) == MorseMap[i].code )
{
msg += MorseMap[i].letter;
}
}
lastPos = pos+1;
pos = morse.indexOf(' ', lastPos);
// Handle white-spaces between words (7 spaces)
while( morse[lastPos] == ' ' && morse[pos+1] == ' ' )
{
pos ++;
}
}
return msg;
}