// Programme d'exemples sur la programmation Arduino
// Ce programme illustre les concepts suivants :
// - Instructions et blocs d'instructions
// - Structures de contrôle de flot (if, else if, else; for; while)
// - Déclaration de variables (int, float) et arithmétique de base
// - Déclaration et appel de fonctions simples
// - Utilisation de Serial.print() pour afficher des chaînes de caractères ou des variables
// - Utilisation de millis() et delay() pour la gestion du temps



// Déclaration et initialisation de variables globales
int counter = 0;          // Une variable entière
float temperature = 25.5; // Une variable flottante, par exemple une température en °C




// Déclaration de la fonction setup(): exécutée une seule fois au démarrage
void setup() {
  // Initialisation de la communication série à 115200 bauds
  Serial.begin(115200);
  // Affichage d'un message de bienvenue
  Serial.println("Programme de démonstration Arduino démarré !");
}



// Déclaration de la fonction loop(), exécutée en boucle indéfiniment
void loop() {
  // Affichage de la valeur actuelle de counter
  Serial.print("Counter: "); // affiche une chaîne de caractères
  Serial.println(counter);  // affiche la valeur de la variable

  // Affichage de la valeur actuelle de temperature
  Serial.print("Temperature: ");
  Serial.println(temperature);

  // Exemple d'appel de fonction
  int result = addNumbers(counter, 5);
  Serial.print("Result of adding 5 to counter: ");
  Serial.println(result);

  // Exemple d'utilisation de la structure de contrôle if, else if, else
  if (counter < 10) { // si counter < 10
    Serial.println("Counter is less than 10.");
  } else if (counter < 20) { // si 10 <= counter < 20
    Serial.println("Counter is between 10 and 19.");
  } else { // si counter > 20
    Serial.println("Counter is 20 or more.");
  }

  // Utilisation d'une boucle for pour afficher les nombres de 0 à 4
  Serial.println("Numbers from 0 to 4:");
  for (int i = 0; i < 5; i++) {
    Serial.println(i);
  }

  // Utilisation d'une boucle while pour attendre jusqu'à ce que millis() soit multiple de 1000
  Serial.println("Waiting for millis() to be a multiple of 1000...");
  while (millis() % 1000 != 0) {
    // Rien à faire ici, juste attendre
  }
  Serial.println("Millis() is now a multiple of 1000!");

  // Incrémentation de counter
  counter++;

  // Simuler une variation de la température
  temperature += 0.1;

  // Pause de 500 millisecondes
  delay(500);
}


// Déclaration d'une fonction simple qui additionne deux nombres
int addNumbers(int a, int b) {
  // Retourne la somme de a et b
  int res = a + b;
  return res;
}