Conversion string > unsigned char

Bonjour à tous
J'ai le désir de modifier un programme standard du tm1637 simulant une horloge.
A savoir, pouvoir modifier l'heure par le biais de l'écran de saisie.
Mon problème est de convertir un String en unsigned char.
Au début du programme minute et hour sont déclarés "unsigned char".

unsigned char minute = 0;
unsigned char hour = 0;

après avoir saisi la nouvelle heure sous la forme hh:mm, j'en extrait deux string
"hh" et "mm" mais je n'arrive pas à modifier les variables hour et minute.

Voici la partie qui pose problème:

void saisiHeure()
{
 while (Serial.available() > 0)
 {
   char inChar = Serial.read();
   heure += inChar;
 }
 String _minute = heure.substring(0,2);
 String _hour =  heure.substring(3,5);
 if (heure!=NULL)
 {
   Serial.println(heure[0]);
   Serial.println(heure[1]);
   Serial.println(heure[3]);
   Serial.println(heure[4]);
   Serial.println(_minute);
   Serial.println(_hour);
   minute = char(_minute);
   hour = char(_hour);
 }

J'ai le message d'erreur suivant:
exit status 1
invalid cast from type 'String' to type 'char'

Quelqu'un peut-il m'aider SVP

Salut

Je ne vois pas la déclaration de la variable heure.
En supposant un String :

void saisiHeure()
{
  String heure;
  while (Serial.available() > 0)
  {
    char inChar = Serial.read();
    heure += inChar;
  }
  String _minute = heure.substring(0,2);
  String _hour =  heure.substring(3,5);
  if (heure!=NULL)
  {
    Serial.println(heure[0]);
    Serial.println(heure[1]);
    Serial.println(heure[3]);
    Serial.println(heure[4]);
    Serial.println(_minute);
    Serial.println(_hour);
    minute = _minute.toInt();
    hour = _hour.toInt();
    Serial.println(minute);
    Serial.println(hour);
  }
}

@+

Merci à hbachetti

la variable heure est déclarée unsigned char

Mon problème est de modifier cette variable par code

J'ai trouvé la solution
Il faut d'abord transformer le String en Entier puis le copier dans la variable unsigned char

    int minute_ = (_minute.toInt());
    int hour_ = (_hour.toInt());
    minute = minute_;
    hour = hour_;

Mon problème est résolu :slight_smile: :slight_smile: :slight_smile:

Merci à vous

ClaudeAzoulai:
la variable heure est déclarée unsigned char

Ca m'étonnerait vraiment que ça marche avec ça !
Ca doit même pas compiler !

Bonjour biggil

Et pourtant je te garanti que ça marche.
Si tu as une autre solution plus conventionnelle, je suis preneur

Non désolé, si heure est un unsigned char,
heure.substring(0,2); ne peut pas compiler !
Si ça compile, c'est que heure est de type String.
De plus si heure est un unsigned char, la ligneheure += inChar; ne fait qu'additionner des nombres, et le résultat (la date ) est perdue.

Tant mieux pour toi si ça marche, mais faut pas raconter des craques.

Désolé, tu as raison, en regardant de nouveau, j'avais déclaré heure comme String.
Arduino est tout nouveau pour moi, ce qui explique peut-être cela.
Je te présente mes excuses.
En tous les cas, cela fonctionne parfaitement.
Il me reste un petit problème
tm1637.set(0); n'éteint pas complètement l'afficheur ce qui consomme pas mal de courant.