Enregistrer une chaine de caractère dans une variable.

Bonjour a tous,

Dans le cadre d'un projet de prépa je dois créer un coffre fort simulant un scan digital. Pour cela il nous est demandé de poser une question.

Ici, se que je fais, je demande le prénom(que je stock dans scan_info, et si le prénom est le même que celui de la variable scanner alors le arduino doit renvoyer "coffre ouvert".

Ma question est qu'elle est l’équivalent du "scanf" sur C pour arduino.

Ici, la partie qui a un problème :

void scan(){
  Serial.print("Qui est la ?\n");
  while (Serial.available()==0){}
      info_scan[3] = Serial.parseInt();
      Serial.println(info_scan);   
    if (strcmp(info_scan,scanner)==0){
    ouverture = 1;

Ici, le code entier pour ceux qui veulent s'amuser :wink: :

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>


int voltage;  //Valeur de la tension en entrée de l'arduino
int niveau;   //Valeur du niveau de sécurité (qui va changer dans tension() )
int ouverture;  //Si ouverture est égale à 1 alors le coffre s'ouvrira
int reponse;  //Prend la valeur de la réponse pour l'analyser
int aleatoire;    //Prend une valeur aléatoire
int retour_random;    //Stock le code rentré par l'utilisateur
char  info_scan[3] = {3};//Stock le nom rentré par l'utilisateur
const char  scanner [3]= {'l','e','o'};

// Analyse la tension d'entrée et l'assimile à un niveau
void tension(){
  
  if (voltage>=1){
    niveau = 0; 
  }
  if (voltage>=2){
    niveau = 1; 
  }
  if (voltage>=3){
    niveau = 2; 
  }
  if (voltage>=4){
    niveau = 3; 
  }
  if (voltage>=5){
    niveau = 4; 
  }
  if (voltage>=6){
    niveau = 5;
  }
  if (voltage>=7){
    niveau = 6; 
  }
  if (voltage>=8){
    niveau = 7; 
  }
}

// Analyse le niveau et envoie la fonction qui correspond à une action
void securite(){
  if (niveau == 0){
    ouverture = 1;  
  } 
  if (niveau == 1){
    question(); 
  }
  if (niveau == 2){
    code();
  }
  if (niveau == 3){
    question(); 
  }
  if (niveau == 4){
    scan(); 
  }
  if (niveau == 5){
    question(); 
  }
  if (niveau == 6){
    code(); 
  }
  if (niveau == 7){
    question(); 
  }
}

// Pose la première question de la série
void question(){
    Serial.print("Combien y a t il d'equipe d'espionnage ? \n 1.28  2.30  3.40  4.55 \n");
    while (Serial.available()==0){}
      reponse = Serial.parseInt(); 
      Serial.println(reponse); 
  if (reponse == 1){
    question1();
  }
  
  else{
    Serial.print("Erreur 100");
  }
}

// Pose la seconde question de la série
void question1(){
  Serial.print("Combien avons nous de base ? \n 1.40  2.30  3.15  4.55 \n");
  while (Serial.available()==0){}
  reponse = Serial.parseInt();
  Serial.println(reponse); 
  if (reponse == 3){
    question2();
  }
  
  else{
    Serial.print("Erreur 100");
  }
}

// Pose la troisème question de la série
void question2(){
  Serial.print("Combien y a t il de pays où se situe l agence ? \n 1.0  2.62  3.101 4.78 \n");
  while (Serial.available()==0){}
  reponse = Serial.parseInt();
  Serial.println(reponse);
  if (reponse == 2){
    question3();
  }
  
  else{
    Serial.print("Erreur 100");
  }
}

// Pose la quatrième question de la série
void question3(){
  Serial.print("MI7 ? \n 1.0  2.7865  3.1111  4.1391 \n");
  while (Serial.available()==0){}
    reponse = Serial.parseInt();
    Serial.println(reponse);
  if (reponse == 4){
    if (niveau == 3){
      code();
    }
    if (niveau == 7){
      code();
    }
    if (niveau == 5){
      scan();
    } 
    
    else {
    ouverture = 1;
    }
  }
  
  else{
    Serial.print("Erreur 100");
  }
}

// Demande un code généré aléatroiement
 void code(){
  retour_random = random();
  Serial.print("Le code est il ");
  Serial.println(retour_random);
  
while (Serial.available()==0){}
    aleatoire = Serial.parseInt();
    Serial.print("reponse = ");
    Serial.println(aleatoire);

    if(retour_random==aleatoire){
    if (niveau == 6){
      scan();
      }
    if (niveau == 7){
      scan();
      }
      
    else {
    ouverture = 1;
    }
  }

  else{
    Serial.print("Erreur 100");
  }
}

// Effectue le scan en demandant "Qui est la ?"
void scan(){
  Serial.print("Qui est la ?\n");
  while (Serial.available()==0){}
      info_scan[3] = Serial.parseInt();
      Serial.println(info_scan);   
    if (strcmp(info_scan,scanner)==0){
    ouverture = 1;
  }
  }

// Analyse si l'ouverture est égale a 1 (si c'est le cas la porte s'ouvre)
void Open_Close(){
  if ( ouverture == 1 ){
  Serial.print("Coffre ouvert");
  digitalWrite(13,HIGH);
 
  }
  
  else{
  Serial.print("Fermer");
  }
}

// Demande la valeur de la tension et fait appelle aux fonctions nécéssaire 
void setup(void){
  Serial.begin(9600);
  pinMode(13, OUTPUT);
  Serial.print("Quelle est la tension ?\n");
  while (Serial.available()==0){}
    voltage = Serial.parseInt();
    Serial.print("voltage = ");
    Serial.println(voltage);
  tension();
  Serial.print("Le niveau est :");
  Serial.println(niveau);
  securite();
  Open_Close();
}
 void loop(){
  
}

Bonsoir,

Ma question est qu'elle est l'équivalent du "scanf" sur C pour arduino.

Oui.

Serial.readString()

Exemple :

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

void loop(){
  while(Serial.available() > 0 ){
    String str = Serial.readString();
    if(str.substring(0) == "send\r\n"){
      Serial.println("identified");} 
    else{
      Serial.println("unknown");
    }
  }
}

Source

Bonsoir,
Merci beaucoup c'est bon tout fonctionne !
Pour ceux que ça pourrait intéresser voila la modification :

void scan(){
  Serial.print("Qui est la ?\n");
  while (Serial.available()==0){}
      String info_scan = Serial.readString();
      Serial.println(info_scan);   
    if(info_scan.substring(0) == "leo"){
    ouverture = 1;
  }
  }

Bonjour,

while (Serial.available()==0){}

Ne sert à rien, ou du moins bloque ton algo jusqu’à avoir envoyé des données.

Si vous voulez comprendre comment bien écouter le port série (ou gérer un flux asynchrone genre keypad) vous pouvez jeter un oeil à mon petit tuto sur le sujet