Python - C/Arduino: les différences de syntaxe

Pour les élèves ayant appris les bases de Python, découvrir le langage C pour Arduino peut être déstabilisant au début en raison de différences syntaxiques. Dans cet article, nous allons expliquer en détail ces différences sur des aspects clés comme les déclarations de variables, les blocs de code, les conditions, les boucles et les fonctions d’affichage. À la fin, vous comprendrez comment passer de Python à C pour Arduino avec des exemples concrets.

  • Découverte

Instructions (retour à la ligne vs ;)

En python

En Python, les instructions sont séparées par un retour à la ligne:

annee_courante = 40
annee_naissance = 20

age = annee_courante - annee_naissance

En C, par contre, les instructions sont séparées par des ';' (points-virgules):

int annee_courante = 40;
int annee_naissance = 20;

int age = annee_courante - annee_naissance;

Les retours à la ligne ne sont pas obligatoires en C, même s'ils restent FORTEMENT recommandés pour raisons de lisibilité.

Blocs de code : indentations vs accolades {}

En Python

Les blocs de code sont définis par l'indentation. Aucune accolade n'est nécessaire.

Exemple :

if x > 0:
    print("x est positif")
    print("Fin du bloc")

En C pour Arduino

En C, les blocs de code sont délimités par des accolades {}. L'indentation est optionnelle mais recommandée pour améliorer la lisibilité.

Exemple équivalent en C :

if (x > 0) {
    Serial.println("x est positif");
    Serial.println("Fin du bloc");
}

Conditions (elif vs else if)

En Python

En Python, lorsqu'une condition if est fausse, vous pouvez tester une autre condition en utilisant elif. C'est une syntaxe compacte qui permet d'enchaîner plusieurs tests dans un même bloc.

Exemple :

age = 20

if age < 10:
    print("Enfant")
elif age < 18:
    print("Adolescent")
elif age < 30:
    print("Jeune adulte")
else:
    print("Adulte")

En C pour Arduino

En C, il n'existe pas de mot-clé unique équivalent à elif. Vous devez utiliser else if avec un espace. Chaque bloc else if est suivi de la condition entre parenthèses et utilise des accolades {} pour le code.

Exemple équivalent en C :

int age = 20;

if (age < 10) {
    Serial.println("Enfant");
} else if (age < 18) {
    Serial.println("Adolescent");
} else if (age < 30) {
    Serial.println("Jeune adulte");
} else {
    Serial.println("Adulte");
}

Points à noter

  • En Python, elif est plus compact, alors que le C utilise deux mots-clés séparés (else if).
  • En C, les parenthèses autour des conditions sont obligatoires.
  • Les accolades {} délimitent les blocs de code en C, tandis que l’indentation est suffisante en Python.

Afficher des informations ("à l'écran")

Les micro-contrôlleurs n'ont généralement pas d'écran. L'affichage des informations (en mode développement) se fait généralement sur l'ordinateur hôte auquel le micro-contrôlleur est connecté.

En Python

En Python, la fonction print() est utilisée pour afficher des messages ou des valeurs dans la console. Vous pouvez facilement afficher plusieurs valeurs en les séparant par des virgules.

Exemple :

temperature = 22.5
print("La température est :", temperature)

En C pour Arduino

En C pour Arduino, on utilise Serial.print() ou Serial.println() pour envoyer des messages ou des valeurs vers le moniteur série.

  • Serial.print() : Affiche le texte sans ajouter de saut de ligne à la fin.
  • Serial.println() : Affiche le texte et ajoute automatiquement un saut de ligne.

Exemple équivalent en C :

float temperature = 22.5;

void setup() {
    Serial.begin(9600); // Initialisation de la communication série
}

void loop() {
    Serial.print("La température est : ");
    Serial.println(temperature); // Affiche la température avec un saut de ligne
    delay(1000); // Pause de 1 seconde
}

Points à noter

  • En C, avant d’utiliser Serial.print() ou Serial.println(), il faut initialiser la communication série avec Serial.begin(9600) dans la fonction setup().
  • println est utile pour structurer les messages en ajoutant automatiquement un saut de ligne.

Déclaration des variables

En Python

Pas besoin de déclarer explicitement le type de la variable : Python le déduit automatiquement lors de l'assignation.

Exemple :

x = 10         # Entier
y = 22.5       # Flottant
message = "OK" # Chaîne de caractères

En C pour Arduino

En C, il faut toujours déclarer le type de chaque variable avant de l'utiliser. Cette règle permet au compilateur d'optimiser la mémoire.

Exemple équivalent en C :

int x = 10;          // Entier
float y = 22.5;      // Flottant
char message[] = "OK"; // Chaîne de caractères

Différence clé

En Python, le typage est dynamique et flexible. En C, le typage est strict et doit être spécifié à l'avance.


Opérateurs logiques : and, or vs &&, ||

En Python

Les opérateurs logiques en Python sont écrits en toutes lettres : and pour ET, or pour OU.

Exemple :

if x > 0 and y < 10:
    print("x est positif ET y est inférieur à 10")

if x > 0 or y < 10:
    print("x est positif OU y est inférieur à 10")

En C pour Arduino

En C, les opérateurs logiques sont symboliques :

  • && pour ET
  • || pour OU

Exemple équivalent en C :

if (x > 0 && y < 10) {
    Serial.println("x est positif ET y est inférieur à 10");
}

if (x > 0 || y < 10) {
    Serial.println("x est positif OU y est inférieur à 10");
}

Différence clé

Python utilise des mots-clés (and, or), alors que C utilise des symboles (&&, ||).


Boucle while

En Python

Une boucle while s'écrit simplement et utilise l'indentation pour définir le bloc de code.

Exemple :

x = 0
while x < 5:
    print(x)
    x += 1

En C pour Arduino

En C, la boucle while est similaire, mais les blocs de code sont définis par des accolades {}.

Exemple équivalent en C :

int x = 0;
while (x < 5) {
    Serial.println(x);
    x += 1;
}

Exemple complet : Robot détectant des obstacles

Version Python (pseudocode)

distance = 0

while True:
    distance = mesurer_distance()
    if distance < 10:
        print("Obstacle détecté : arrêt")
    elif distance < 30:
        print("Obstacle proche : ralentir")
    else:
        print("Pas d'obstacle : avancer")

Version C pour Arduino

int distance = 0;

void setup() {
    Serial.begin(9600); // Initialisation de la communication série
}

void loop() {
    distance = mesurer_distance(); // Simuler une mesure
    if (distance < 10) {
        Serial.println("Obstacle détecté : arrêt");
    } else if (distance < 30) {
        Serial.println("Obstacle proche : ralentir");
    } else {
        Serial.println("Pas d'obstacle : avancer");
    }
    delay(100); // Pause de 100 ms
}

int mesurer_distance() {
    // Simulation d'une distance aléatoire
    return random(5, 50);
}

Conclusion

Les différences entre Python et le C pour Arduino se situent principalement au niveau de la syntaxe. Le C est plus strict avec ses exigences sur les types, l’utilisation des accolades {} et les points-virgules ;, tandis que Python privilégie la lisibilité et la flexibilité. Cependant, une fois ces différences comprises, vous pourrez facilement adapter vos compétences en Python pour écrire des programmes robustes en C pour Arduino. La pratique régulière et des exemples concrets, comme ceux présentés ici, vous aideront à maîtriser ces deux langages.

Pour aller plus loin