Skip to content

Version 1.1.29-alpha

Note

Version capable de reconnaitre un début, une fin, et quel type de boutton casier appuyer. Mais également la fermeture et l'envoie d'un mot de passe

WARNING

Ce code n'est pas encore capable de reconnaitre ou ce situe le mot de passe dans le tampon

Code

c++
/**
   * @file bras.cpp
   * @brief Communication entre l'afficheur STONE HMI, Arduino MEGA et action des casiers du B.R.A.S
   * documentation : https://docs.ks-infinite.fr/bras/
   * @author Lucas W.
   * @author Florian V.
   * @author Jessy K.
   * @version a1.1.30
   * @date 07/02/2024
   * @copyright Copyright - B.R.A.S, Kerogs Infinite, Lycée Condorcet - Stiring-Wendel
   */

#include <Bonezegei_Search.h>
Bonezegei_Search search;

#define led 2

char tampon[30];
int tamponPos = 0;
String tamponStr;

char incomingByte;

// Casier Action
int casierActionNumber;

int casier1Password;
int casier2Password;
int casier3Password;
int casier4Password;
int casier5Password;
int casier6Password;


void setup() {
  configset();

  Serial3.print("ST<{\"cmd_code\":\"set_buzzer\",\"type\":\"system\",\"time\":1000}>ET");
}

void loop() {
  // éteint la led à la fin d'une trame
  digitalWrite(led, LOW);

  // Début de trame
  if (searchArray(tampon, "ST<", 3)) {
    Serial.println("[DEBUT DE TRAME]");


    // Bouton Casier appuyer
    if (searchArray(tampon, "Casier", 6)) {
      Serial.println("[CASIER]");
      for (int i = 0; i <= 5; i++) {
        String casierNumber = "Casier" + String(i);
        if (searchArray(tampon, casierNumber.c_str(), 7)) {
          Serial.println("[NUMERO " + String(i) + "]");
          casierActionNumber = i;
          break;
        }
      }
    }

    // MDP set Casier
    if (casierActionNumber != 0 && searchArray(tampon, "PC", 2)) {
      Serial.println("[CASIER PASSWORD [MDP]");
      // if valeur casier === 4
    }

    // Password popup up close
    if (casierActionNumber != 0 && searchArray(tampon, "FermerPopup", 11)) {
      Serial.println("[PASSWORD POPUP FERMEE]");

      casierActionNumber = NULL;
    }
  }

  tamponReset();
}

void serialEvent3() {
  while (Serial3.available() > 0) {
    digitalWrite(led, HIGH);
    incomingByte = Serial3.read();
    tampon[tamponPos] = incomingByte;
    tamponPos++;
  }

  // Afficher la trame en ASCII
  Serial.println("+=======================+");
  Serial.print("|> ASCII : ");
  for (int i = 0; i < tamponPos; i++) {
    Serial.print(tampon[i]);
  }
  Serial.println("");

  // Afficher la trame en HEX
  Serial.print("|> HEX : ");
  for (int i = 0; i < tamponPos; i++) {
    Serial.print(tampon[i], HEX);
    Serial.print(" ");
  }
  Serial.println("");

  Serial.println("+=======================+");

  // En attente d'un autre
  Serial.println("En attente...");
}


// configset
void configset() {
  // PC
  while (!Serial) Serial.print(".");
  Serial.begin(9600);
  Serial.print(".");

  // HMI
  while (!Serial3) Serial.print(".");
  Serial3.begin(9600);
  Serial.print(".");

  // LED
  pinMode(led, OUTPUT);
  Serial.print(".");

  // Fin chargement (ne pas supprimer)
  delay(200);
  Serial.println("Fin");
}

// Fonction pour rechercher une chaîne de caractères dans un tableau
bool searchArray(char array[], char arraySearch[], int numberCSearch) {
  bool sequenceFound = false;

  for (int i = 0; i < 30 - numberCSearch + 1; i++) {
    bool match = true;
    for (int j = 0; j < numberCSearch; j++) {
      if (tampon[i + j] != arraySearch[j]) {
        match = false;
        break;
      }
    }
    if (match) {
      sequenceFound = true;
      break;
    }
  }
  return sequenceFound;
}

void tamponReset() {
  // fin de trame
  if (searchArray(tampon, ">ET", 3)) {
    Serial.println("[FIN DE TRAME]");
    for (int i = 0; i < sizeof(tampon); i++) {
      tampon[i] = 0;
    }
    tamponPos = 0;
  }
}

Documentation/code du Projet B.R.A.S présent sur ce site sous license CC BY 4.0. (pour en savoir plus rdv dans la section LICENSE)