Traduire C++ en C pour Arduino

Résolu/Fermé
Gaga1717 Messages postés 3 Date d'inscription mercredi 9 novembre 2022 Statut Membre Dernière intervention 9 novembre 2022 - Modifié le 9 nov. 2022 à 09:47
Gaga1717 Messages postés 3 Date d'inscription mercredi 9 novembre 2022 Statut Membre Dernière intervention 9 novembre 2022 - 9 nov. 2022 à 13:51

Bonjour,

Je ne sais pas comment traduire ce programme C++ en langage C pour Arduino. Quelqu'un aurait-il la gentillesse de traduire ce programme en C ?

Voici le programme en question:

#include <iostream>
#include <sstream>
#include <string>
#include <cstdlib>
#include <cmath>
#include <ctime>

using namespace std;

// Headers
string toString (double);
int toInt (string);
double toDouble (string);
int chiffrer(int m, int e);
string mA1();
string mA2(string x);
void mA2bis();
string mA3();
string mA4();
string mA5(string x);
int modexp(int a, int e, int n);

int main() {
    string x, résultat1, résultat2, résultat3, résultat4, résultat5;
    
    cout << "Entrez votre nom" << endl;
    cin >> x;
    if (x == "A") {
        mA1();
        mA2(x);
        mA3();
        mA5(x);
        résultat1 = "correct";
        résultat2 = "correct";
        résultat3 = "correct";
        résultat5 = "correct";
        cout << "Vous avez accés au coffre" << endl;
    } else {
        if (x == "B") {
            mA1();
            mA2(x);
            mA3();
            mA5(x);
            résultat1 = "correct";
            résultat2 = "correct";
            résultat3 = "correct";
            résultat5 = "correct";
            cout << "Vous avez accés au coffre" << endl;
        } else {
            if (x == "C") {
                mA1();
                mA2(x);
                mA3();
                mA5(x);
                résultat1 = "correct";
                résultat2 = "correct";
                résultat3 = "correct";
                résultat5 = "correct";
                cout << "Vous avez accés au coffre" << endl;
            } else {
                if (x == "D") {
                    mA2(x);
                    mA5(x);
                    résultat2 = "correct";
                    résultat5 = "correct";
                } else {
                    if (x == "E") {
                        mA2(x);
                        mA5(x);
                        résultat2 = "correct";
                        résultat5 = "correct";
                    } else {
                        if (x == "F") {
                            mA1();
                            mA3();
                            résultat1 = "correct";
                            résultat3 = "correct";
                        } else {
                            if (x == "H") {
                                mA1();
                                mA3();
                                résultat1 = "correct";
                                résultat3 = "correct";
                            } else {
                                if (x == "I") {
                                    mA1();
                                    mA4();
                                    résultat1 = "correct";
                                    résultat4 = "correct";
                                } else {
                                    if (x == "J") {
                                        mA2(x);
                                        mA5(x);
                                        résultat2 = "correct";
                                        résultat5 = "correct";
                                    } else {
                                        if (x == "K") {
                                            mA2(x);
                                            mA3();
                                            mA4();
                                            résultat2 = "correct";
                                            résultat3 = "correct";
                                            résultat4 = "correct";
                                        } else {
                                            if (x == "L") {
                                                mA1();
                                                mA3();
                                                résultat1 = "correct";
                                                résultat3 = "correct";
                                            } else {
                                                if (x == "M") {
                                                    mA1();
                                                    mA4();
                                                    résultat1 = "correct";
                                                    résultat4 = "correct";
                                                } else {
                                                    if (x == "N") {
                                                        mA1();
                                                        mA4();
                                                        résultat1 = "correct";
                                                        résultat4 = "correct";
                                                    } else {
                                                        if (x == "O") {
                                                            mA1();
                                                            mA3();
                                                            résultat1 = "correct";
                                                            résultat3 = "correct";
                                                        } else {
                                                            if (x == "P") {
                                                                mA1();
                                                                mA4();
                                                                résultat1 = "correct";
                                                                résultat4 = "correct";
                                                            } else {
                                                                if (x == "Q") {
                                                                    mA2(x);
                                                                    mA5(x);
                                                                    résultat2 = "correct";
                                                                    résultat5 = "correct";
                                                                } else {
                                                                    cout << "Qui êtes-vous ???" << endl;
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    return 0;
}

int chiffrer(int m, int e) {
    int c, n;
    
    n = 43 * 67;
    c = modexp(m, e, n);
    
    return c;
}

string mA1() {
    string résultat1;
    string réponse;
    
    cout << "En quelle année a été crée CESI ?" << endl;
    cout << "Réponse A : 1972 ; Réponse B : 1958 ; Réponse C : 1986" << endl;
    cout << "entrez la bonne lettre" << endl;
    cin >> réponse;
    if (réponse == "B") {
        cout << "Question 1 validée" << endl;
    } else {
        cout << "Question 1 non validé" << endl;
    }
    cout << "Qui est le président actuel de la République française ?" << endl;
    cout << "Réponse A : Donald Trump ; Réponse B : François Hollande ; Réponse C : Emmanuel Macron" << endl;
    cout << "Entrez la bonne lettre" << endl;
    cin >> réponse;
    if (réponse == "C") {
        cout << "Question 2 validée" << endl;
    } else {
        cout << "Question 2 non validé" << endl;
    }
    cout << "Combien y a-t-il de campus CESI en France ?" << endl;
    cout << "Réponse A : 27 ; Réponse B : 25 ; Réponse C : 30" << endl;
    cout << "Entrez la bonne lettre" << endl;
    cin >> réponse;
    if (réponse == "B") {
        cout << "Question 3 validée" << endl;
        cout << "Mécanisme 1 validé" << endl;
        résultat1 = "correct";
    } else {
        cout << "Question 3 non validé" << endl;
    }
    
    return résultat1;
}

string mA2(string x) {
    string résultat2;
    int e, m, mp, c;
    
    if (x == "A") {
        e = 601;
    } else {
        if (x == "B") {
            e = 619;
        } else {
            if (x == "C") {
                e = 631;
            } else {
                if (x == "D") {
                    e = 641;
                } else {
                    if (x == "E") {
                        e = 647;
                    } else {
                        if (x == "F") {
                            e = 653;
                        } else {
                            if (x == "H") {
                                e = 661;
                            } else {
                                if (x == "I") {
                                    e = 673;
                                } else {
                                    if (x == "J") {
                                        e = 691;
                                    } else {
                                        if (x == "K") {
                                            e = 701;
                                        } else {
                                            if (x == "L") {
                                                e = 733;
                                            } else {
                                                if (x == "M") {
                                                    e = 739;
                                                } else {
                                                    if (x == "N") {
                                                        e = 751;
                                                    } else {
                                                        if (x == "O") {
                                                            e = 797;
                                                        } else {
                                                            if (x == "P") {
                                                                e = 809;
                                                            } else {
                                                                if (x == "Q") {
                                                                    e = 811;
                                                                } else {
                                                                    cout << "Vous n'êtes pas reconnu" << endl;
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    m = rand() % 2881;
    c = chiffrer(m, e);
    cout << "Message à déchiffrer :" << c << endl;
    cin >> mp;
    if (m == mp) {
        cout << "Vous êtes authentifié ! Bienvenue agent" << x << endl;
        résultat2 = "correct";
        cout << "Mécanisme 2 validé" << endl;
    } else {
        cout << "Erreur d'authentification. Le processus de sécurité se déclenchera dans 5 secondes" << endl;
        résultat2 = "incorrect";
    }
    
    return résultat2;
}

void mA2bis() {
}

string mA3() {
    string résultat3;
    string rétine;
    
    cout << "Veuillez scaner votre rétine" << endl;
    cin >> rétine;
    if (rétine == "rétine") {
        résultat3 = "correct";
        cout << "Mécanisme 3 validé" << endl;
    } else {
        résultat3 = "incorrect";
    }
    
    return résultat3;
}

string mA4() {
    string résultat4;
    string digit;
    
    cout << "Scannez votre empreinte" << endl;
    cin >> digit;
    if (digit == "doigt") {
        résultat4 = "correct";
        cout << "Mécanisme 4 validé" << endl;
    } else {
        résultat4 = "incorrect";
    }
    
    return résultat4;
}

string mA5(string x) {
    string résultat5;
    int carteID;
    
    cout << "Veuillez entrer votre Carte ID" << endl;
    cin >> carteID;
    if (x == "A" && carteID == 1) {
        cout << "Bonjour, agent A" << endl;
        résultat5 = "correct";
    } else {
        if (x == "B" && carteID == 2) {
            cout << "Bonjour, agent B" << endl;
            résultat5 = "correct";
        } else {
            if (x == "C" && carteID == 3) {
                cout << "Bonjour, agent C" << endl;
                résultat5 = "correct";
            } else {
                if (x == "D" && carteID == 4) {
                    cout << "Bonjour, agent D" << endl;
                    résultat5 = "correct";
                } else {
                    if (x == "E" && carteID == 5) {
                        cout << "Bonjour, agent E" << endl;
                        résultat5 = "correct";
                    } else {
                        if (x == "F" && carteID == 6) {
                            cout << "Bonjour, agent F" << endl;
                            résultat5 = "correct";
                        } else {
                            if (x == "G" && carteID == 7) {
                                cout << "Bonjour, agent F" << endl;
                                résultat5 = "correct";
                            } else {
                                if (x == "H" && carteID == 8) {
                                    cout << "Bonjour, agent H" << endl;
                                    résultat5 = "correct";
                                } else {
                                    if (x == "I" && carteID == 9) {
                                        cout << "Bonjour, agent I" << endl;
                                        résultat5 = "correct";
                                    } else {
                                        if (x == "J" && carteID == 10) {
                                            cout << "Bonjour, agent J" << endl;
                                            résultat5 = "correct";
                                        } else {
                                            if (x == "K" && carteID == 11) {
                                                cout << "Bonjour, agent K" << endl;
                                                résultat5 = "correct";
                                            } else {
                                                if (x == "L" && carteID == 12) {
                                                    cout << "Bonjour, agent L" << endl;
                                                    résultat5 = "correct";
                                                } else {
                                                    if (x == "M" && carteID == 13) {
                                                        cout << "Bonjour, agent M" << endl;
                                                        résultat5 = "correct";
                                                    } else {
                                                        if (x == "N" && carteID == 14) {
                                                            cout << "Bonjour, agent N" << endl;
                                                            résultat5 = "correct";
                                                        } else {
                                                            if (x == "O" && carteID == 15) {
                                                                cout << "Bonjour, agent O" << endl;
                                                                résultat5 = "correct";
                                                            } else {
                                                                if (x == "P" && carteID == 16) {
                                                                    cout << "Bonjour, agent P" << endl;
                                                                    résultat5 = "correct";
                                                                } else {
                                                                    cout << "Vous n'êtes pas reconnu." << endl;
                                                                    résultat5 = "incorrect";
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    
    return résultat5;
}

int modexp(int a, int e, int n) {
    int r;
    
    if (e < 0) {
        cout << "Unhandled case" << endl;
        exit(-1);
    }
    if (a == 0 || n == 1) {
        r = 0;
    } else {
        r = 1;
        while (e > 0) {
            r = r * (a % n) % n;
            e = e - 1;
        }
    }
    
    return r;
}

// The following implements type conversion functions.
string toString (double value) { //int also
    stringstream temp;
    temp << value;
    return temp.str();
}

int toInt (string text) {
    return atoi(text.c_str());
}

double toDouble (string text) {
    return atof(text.c_str());
}

Merci à vous.

3 réponses

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 9 nov. 2022 à 11:34

Salut Gaga1717,

Le "langage Arduino" est basé sur C++.

https://www.arduino.cc/reference/en/

Par exemple, ils ont une classe "String" qui permet de faire des choses similaires à ce que ton code fait avec string.

https://www.arduino.cc/reference/en/language/variables/data-types/stringobject/

avec une méthode .c_str() comme celle utilisée en ligne 447 de ton code

https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/c_str/

Les affichages avec cout et demandes de saisies avec cin devront être adaptés avec du code qui ait un sens dans le contexte embarqué de l'Arduino...

... mais je ne vois pas pourquoi tu devrais traduire ton code en C.

0
Gaga1717 Messages postés 3 Date d'inscription mercredi 9 novembre 2022 Statut Membre Dernière intervention 9 novembre 2022
9 nov. 2022 à 11:40

Merci pour votre réponse. Donc vous voulez dire que je peux garder mon langage C++ pour mon programme ?

Le problème, c'est qu'Arduino me renvoie ce message d'erreur:

Je ne sais pas ce que cela signifie... 

0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 9 nov. 2022 à 12:09

Comme je l'ai dit, les parties du code responsables des affichages avec cout et demandes de saisies avec cin devront être adaptés avec du code qui ait un sens dans le contexte embarqué de l'Arduino. Un Arduino n'est pas un ordinateur avec un système d'exploitation où tu as une sortie standard et une entrée standard. L'entête iostream qui permet d'utiliser cout et cin n'a pas de sens dans le contexte d'un Arduino (et il n'existe donc pas).

Par exemple, pour afficher quelque chose tu pourrais utiliser quelque chose connecté au port série de l'Arduino et la méthode Serial.println()

https://www.arduino.cc/reference/en/language/functions/communication/serial/println/

Pour gérer une entrée de texte, il faudrait déjà savoir comment tu prévois de le faire d'un point de vue matériel dans le contexte de ton Arduino. Quelqu'un a fait ceci par exemple avec un clavier USB compatible PS/2

https://create.arduino.cc/projecthub/michalin70/connect-a-usb-keyboard-with-an-arduino-50c077

Le texte pourrait aussi être envoyé par un PC communiquant avec l'Arduino, etc.

0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083 > [Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024
Modifié le 9 nov. 2022 à 13:37

En gros tu peux supprimer tous les #include, voir là où la compilation coince et adapter le code au contexte Arduino.

Tu verras qu'il y aura d'autres légères adaptations à faire aussi.

Par exemple, l'entête standard <cstdlib> permet d'accéder à la fonction C standard rand que ton code utilise en ligne 276. Arduino utilise ses propres fonctions pour générer des nombres aléatoires :

https://www.arduino.cc/reference/en/language/functions/random-numbers/random/

(random() avec la fonction Arduino randomSeed() à appeler une fois au début du programme pour initialiser au préalable le générateur, cette dernière fonction étant l'équivalent de srand() en C ... que ton code oublie d'ailleurs d'appeler ce qu'il fait qu'il génère toujours la même séquence aléatoire dans sa forme actuelle...)

Tu devrais faire ce travail en ayant avec toi la documentation de référence du "langage Arduino" :

https://www.arduino.cc/reference/en/

Si tu bloques quelque part, n'hésite pas à poser tes questions.

0
Gaga1717 Messages postés 3 Date d'inscription mercredi 9 novembre 2022 Statut Membre Dernière intervention 9 novembre 2022
9 nov. 2022 à 13:51

D'accord, je vais essayer d'améliorer tout ça. Merci beaucoup et si j'ai des questions, je les poserai :)

0