Gérer lun lave linge en co-propriété

Bonjour a tous, J'ai quelques questions sur mon 2 ème projet.

Mon idée est de mettre un Arduino sur un lave linge/sèche linge pour en limiter la fréquence d'utilisation; je m'explique :

Mes parents ont mis un lave linge et un sèche linge à disposition de plusieurs locataires d'une même maison. Je voudrais réguler l'accès à ce lave linge via une carte RFID et un ARduino.

Donc, au passage de la carte RFID du locataire un relais se met en route pendant 2hrs par exemple (temps d'un cycle ou 2)... je pense que cela est possible via un relais 5v/220V et une commande de type Delay vous me confirmez ?? :cold_sweat: ??

L'autre idée est de "créditer" la carte de 10 passages par exemple, et a chaque passage celle ci se déduit... Ca c'est possible à votre avis ?? Si oui, auriez des infos,des pistes, des tuto ou je pourrais aller gratter un peu parce que pour le moment je vois pas du tout comment faire ????

C'est possible bien sûr. Il faut d'abord que tu apprennes à te servir du lecteur RFID, cherche des tutos sur le sujet, ou une bibliothèque et teste les exemples.

Ensuite tu peux créer une struct qui contient diverses informations pour chaque utilisateur. Son numéro de badge, son nom, le nombre d'utilisations de la machine, etc. Puis chaque fois qu'un utilisateur se présente avec son badge, tu mets la struct à jour (genre augmenter le nombre d'utilisations) et tu agis en conséquence : si le nombre maximum est dépassé, tu affiches un message sur un LCD, sinon tu mets le relais sur on et tu lances un chrono qui le fermera au bout de deux heures.

Il faut interdire l'accès à d'autres utilisateurs pendant ce temps. Prévois des leds (rouge, verte) pour indiquer l'état de fonctionnement et des boutons pour interagir avec ton système.

Il faut que tu prévoies un mode admin pour ton badge, afin de voir le crédit de chaque utilisateur ou des statistiques d'utilisation, et de lui ajouter du crédit lorsque c'est nécessaire.

Il faut aussi sauver les données utilisateurs dans l'EEPROM pour gérer une éventuelle panne de courant qui remettrait tout à zéro.

yohann74: Bonjour a tous, J'ai quelques questions sur mon 2 ème projet.

Mon idée est de mettre un Arduino sur un lave linge/sèche linge pour en limiter la fréquence d'utilisation; je m'explique :

Mes parents ont mis un lave linge et un sèche linge à disposition de plusieurs locataires d'une même maison. Je voudrais réguler l'accès à ce lave linge via une carte RFID et un ARduino.

Donc, au passage de la carte RFID du locataire un relais se met en route pendant 2hrs par exemple (temps d'un cycle ou 2)... je pense que cela est possible via un relais 5v/220V et une commande de type Delay vous me confirmez ?? :cold_sweat: ??

L'autre idée est de "créditer" la carte de 10 passages par exemple, et a chaque passage celle ci se déduit... Ca c'est possible à votre avis ?? Si oui, auriez des infos,des pistes, des tuto ou je pourrais aller gratter un peu parce que pour le moment je vois pas du tout comment faire ????

bonjour Tu a une belle base de travail avec ta "résidence etudiant" de 10 locataires :grin:

le panel est un suffisamment important pour penser modulaire et pas trop pour ne pas rentrer dans de la reflexion de grande masse.

pour ce point particulier "lave linge" avec une base MFRC22 : 1 seul lecteur/encodeur ~10 tag

çà reste jouable assez facilement en mode "prépayé" décrémentation du credit à chaque présntation.

Ha oui ! un point particulier à pendre en compte : selon les études poursuivies par tes étudiants (ou leurs relations 8) )

tes systèmes risquent d'être trés rapidement "hacké" :smiling_imp:

@lesept : merci beaucoup pour ta réponse c'est top je crois que tu as bien fait le tour de la question et des problèmes potentiels c'est op !!

Par contre j'ai pas fini de passer des nuits blanches avec ce projet moi :grin: :grin: . Parce que je pars de loin quand même...

Pour le badge,les leds et l'écran LCD j'ai reussi à refaire le montage à la maison en suivant les tuto et ca marche même si j ai pas tout compris.

Je vais bûcher, certainement en essayant de trouver une struct de base la plus proche de mon projet et de mon matériel; mais je me permettrai de revenir vers vous pour les problèmes rencontrés . Merci en tout cas.

@artouste je vois que certains font le rapprochement de posts je me suis fait pisté :D :D :stuck_out_tongue: ;) J'ai commandé un lecteur WIEGAN je ne sais pas si je peux augmenter les tags mais de toutes facon tous ne seront pas intéressé par la laverie certains ramènent leur linge à maman le week end ;)

Pour les pirates une bonne vieille caméra de surveillance dans un coin de la laverie devrait m'aider

Pour un programme comme celui ci, je te conseille de le diviser en petites fonctions simples, faisant un minimum de choses et donc faciles à valider une par une. Puis tu construis le squelette du code dans la loop en appelant les fonctions une par une. Ça tournera probablement autour de la lecture de la pin du lecteur RFID et du suivi du chrono. On t'aidera, pas de souci!

Il faudra prendre des relais (sur)dimensionné à la puissance/intensité des appareils, sachant qu’ils ne doivent sûrement pas répondre à la directive des machines.

@+

Attention à l’aspect légal de la caméra

@J4l13n : je pense agir sur un contacteur de puissance ca me permettra de pas avoir un relais 20A ou 36A à gérer depuis mon Arduino.

@lesept : Merci de tes conseils, je t’ai lu sur quelques post qui ont étés instructifs

@tout le monde :slight_smile:

Ca y est j’ai commencé a griffonner un code pour mon lave linge il fonctionne(sauf la décrémentation) mais avant de persévérer j’aimerai avoir votre avis si je continue la dessus ou il me faut une autre base … (ca reste de la compil de code trouvés à droite à gauche ::slight_smile: :slight_smile:

#include <SPI.h>
#include <MFRC522.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

#define SS_PIN 10    //Arduino Uno
#define RST_PIN 9

MFRC522 mfrc522(SS_PIN, RST_PIN);        // Create MFRC522 instance.
MFRC522::MIFARE_Key key;
unsigned long sernum[11] = {0, 3643054959,0, 1159921925, 3278950471, 0, 0, 0, 0,0, 3643057959}; //poste 0 N° carte lue, poste 1 à 9 pour UID carte a tester, poste 10 carte master

int buzzer = 8;
int led_rouge = 14;
int led_verte = 15;
int compteur_1; // Crédit de la carte 1

byte tagok = 0;

void setup() {

  pinMode(led_rouge, OUTPUT);
  pinMode(led_verte, OUTPUT);
  pinMode(buzzer, OUTPUT);
  lcd.begin(16, 2); //ini le lcd
  SPI.begin();                // Init SPI bus
  mfrc522.PCD_Init();        // Init MFRC522 card
lcd.print("Dispositif");
  lcd.setCursor(0, 1);
  lcd.print("d'identification");
  delay(3000);
  lcd.clear();
  compteur_1=10;
}

void loop() {

//ecriture accueil
 lcd.print("Scannez votre");
  lcd.setCursor(0, 1);
  lcd.print("carte ou badge..");

  // Look for new cards
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
  }

  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial())    return;

  Serial.print("Card UID:");    //Dump UID
  for (byte i = 0; i < 4; i++) {
    Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
    Serial.print(mfrc522.uid.uidByte[i], HEX);
  }

  sernum[0] = *((unsigned long *)mfrc522.uid.uidByte); //recup num serie lu long unsigned

  Serial.print(" ");
  Serial.print(sernum[0]);
  Serial.print(" ");
  Serial.print(sernum[0], HEX);
  Serial.print(" ");
  tagok = 0;
  for  (byte i = 1; i < 10; i++) {
    if (sernum[0] == sernum[i]) tagok = 1; // carte reconnue dans la liste

  }
  if (sernum[0] == sernum[10]) tagok = 255; // carte master reconnue

  if (tagok == 0) { // faire si carte inconnue
    Serial.print("TAG INCONNU");
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("ACCES REFUSE");
    digitalWrite(led_rouge, HIGH);
    tone(buzzer, 200, 750);
    delay(2000);
    digitalWrite(led_rouge, LOW);
    lcd.clear();
  }
  if (tagok >0) //faire si carte reconnue
  {
  lcd.clear();
    
    if (sernum[0] == sernum[1]) 
    Serial.print("Badge de YO" ); //Quand on présente badge 1
    lcd.setCursor(0, 0);
    lcd.print("ACCES AUTORISE");
    lcd.setCursor(0, 1);
    lcd.print("SALUT Yohann");
    digitalWrite(led_verte, HIGH);
    tone(buzzer, 1200, 100);
    delay(300);
    tone(buzzer, 1200, 100);
    delay(2000);
    digitalWrite(led_verte, LOW);
    lcd.clear();
    delay(1000);
    compteur_1=-1;
    lcd.print("compteur_1");
    lcd.setCursor(0, 1);
    lcd.print("crédit:");
    
    if (sernum[0] == sernum[2]) Serial.print("Badge locataire intel...    " ); //Quand on présente badge 2
    if (sernum[0] == sernum[3]) Serial.print(" " ); //Quand on présente badge 3
    if (sernum[0] == sernum[4]) Serial.print("    " ); //Quand on présente badge 4
    if (sernum[0] == sernum[5]) Serial.print("   " ); //Quand on présente badge 5
    if (sernum[0] == sernum[6]) Serial.print("    " ); //Quand on présente badge 6
    if (sernum[0] == sernum[7]) Serial.print(" " ); //Quand on présente badge 7
    if (sernum[0] == sernum[8]) Serial.print("" ); //Quand on présente badge 8
    if (sernum[0] == sernum[9]) Serial.print("" ); //Quand on présente badge 9
    if (sernum[0] == sernum[10]) Serial.print("Badge MASTER" );
    delay(50);
   
  }

  if (tagok == 255) //faire si carte master reconnue
  {

    Serial.print("CARTE MASTER RECONNUE");

  }


Serial.println();

mfrc522.PICC_HaltA(); // Halt PICC

}

C'est un bon début, bravo ! Je te conseille de séparer le tag lu de ton tableau de tags utilisateurs. Tu remplaces sernum[0] par une autre variable serNumLu par exemple. Ensuite, tu mets le numéro de tag MASTER en début de tableau (en position 0) et les autres à la suite. Ça ne change pas grand chose, mais c'est plus logique dans la lecture du code.

Ensuite, utilise des if { } else if { } else if { } else { } plutôt qu'une batterie de if. De même ça me semble plus lisible. Enfin, utilise une boucle for pour chercher le numéro du tag lu dans ton tableau de numéros.

 tagok = 255;
 for  (byte i = 0; i < 10; i++) if (serNumLu  == sernum[i]) tagok = i; // carte reconnue dans la liste

Tu stockes directement le numéro du tag reconnu : si c'est 0 (MASTER) tu fais les actions associées au master (écris une fonction pour ça), sinon le reste (une autre fonction) :

if (tagok == 255) Inconnu();
else if (tagok == 0) Master();
else pasMaster (tagok);

Tu peux créer une [url=https://www.locoduino.org/spip.php?article107]struct[/url] pour stocker les divers paramètres de chaque utilisateur : nom, existe ou non (cas d'un utilisateur qui est parti), nombre d'utilisations, crédit restant, etc.

struct Params{
    char nom[20];
    bool existe;
    int nbUtils;
    int credit
};
struct Params Utilisateur[10];

Tu peux accéder au crédit de l'utilisateur numéro 3 avec Utilisateur[3].credit

yohann74: @J4l13n : je pense agir sur un contacteur de puissance ca me permettra de pas avoir un relais 20A ou 36A à gérer depuis mon Arduino.

@lesept : Merci de tes conseils, je t'ai lu sur quelques post qui ont étés instructifs

@tout le monde :)

Ca y est j'ai commencé a griffonner un code pour mon lave linge il fonctionne(sauf la décrémentation) mais avant de persévérer j'aimerai avoir votre avis si je continue la dessus ou il me faut une autre base ... (ca reste de la compil de code trouvés à droite à gauche ::) :)

Bonjour c'est un bon début pour te faire la "main" prend en compte les bonnes remarques précédentes de lesep Garde à l'esprit qu'un tag/badge (mifare) comme ceux généralement fournis avec le le MFRC522 peuvent aussi "assez" facilement embarquer/restituer des infos "un... petit peu protégées" :grin:

dans certaines zones mémoires

C'est plus à çà que je pensais lorsque je parlais de "crédit" embarqué et décrémenté lors d'une présentation

l'info de crédit dispo est embarqué/mis à jour sur le badge/tag lui même et pas en dehors

mais chaque chose en son temps 8)

Merci pour vos encouragement et vois conseils.

Par contre je suis en boucle (c'est le cas de la dire) sur le passage de serNum[0] à serNumLu.

est ce qu'il y a une subtilité avec le rappel de consigne unsigned long ou c'est ailleur mon problème ?? unsigned long deviendrai

serNumLu = *((unsigned long *)mfrc522.uid.uidByte);

J'ai laissé long sernum[11] car c'est la consigne qui permet de "désigner" les tags non ?? :

unsigned long sernum[11] = {0, 3643054959,0, 1159921925, 3278950471, 0, 0, 0, 0,0, 3643057...];

??

Ne te pose pas trop de questions. Tu déclares un unsigned long serNumLu = 0; Et tu remplaces dans ton code toutes les occurrences de sernum[0] par serNumLu

Dans la déclaration du tableau, tu mets en première position, position 0,le numéro de badge du Master.

Bon.... M'en sors pas :-[ .

J'ai relu 15 fois vos messages et bouquiné pas mal de code mais je bloque.

J'ai essayé comme m'a dit @lesept de déclarer un unsigned long sernumlu = 0 et remplacé les sernum 0 partout mais pas moyen de le faire passer (plusieurs tentatives). Du coup j'ai essayé de traduire chaque ligne pour mieux comprendre et les passer petit à petit .

pour résumé j'ai mis un unsigned long serNumLu = 0; j'ai déclaré un tableau de badges.(dumoins je crois) .... j'ai essayé tous les codes que vous m'avez donné mais j'y arrive pas

je n'arrive pas a intégrer le else non plus pour les badges de 1 a 9 il me dit qu il faut un if avec il ne veux pas prendre le premier if...

un petit coup de main ??

#include 
#include 
#include 

LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

#define SS_PIN 10    //Arduino Uno
#define RST_PIN 9


MFRC522 mfrc522(SS_PIN, RST_PIN);        // Create MFRC522 instance.
MFRC522::MIFARE_Key key;
unsigned long serNumLu = 0;
int badge[10],i=0;  //déclaration de tableau de 10 badges,i variable pour aller chercher dans le tableau

int buzzer = 8; 
int led_rouge = 14;
int led_verte = 15;

byte tagok = 255;

void setup() {

  pinMode(led_rouge, OUTPUT);
  pinMode(led_verte, OUTPUT);
  pinMode(buzzer, OUTPUT);
  lcd.begin(16, 2); //ini le lcd
  SPI.begin();        // Init SPI bus
  Serial.begin(9600);  
  mfrc522.PCD_Init();   // Init MFRC522 card
  
  lcd.print("Dispositif");
  lcd.setCursor(0, 1);
  lcd.print("d'identification");
  delay(3000);
  lcd.clear();
  //ini le tableau des badges 
badge[0] = 3643054959;  //badge master
badge[1] = 55; //badge 1
badge[2] = 44;//badge 2
badge [3] = 88; //badge 3
badge [4] = 33; //badge 4
badge [5] = 44; //badge 5
badge [6] = 55; //badge 6
badge [7] = 44; //badge 7
badge [8] = 44; //badge 8
badge [9] = 44; //badge 9
}
void loop() {
// Look for new cards
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
  }

  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial())    return;

  Serial.print("Card UID:");    //Dump UID
  for (byte i = 0; i < 4; i++) {
    Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
    Serial.print(mfrc522.uid.uidByte[i], HEX);
      }

serNumLu = *((unsigned long *)mfrc522.uid.uidByte); //recup num serie lu long unsigned

tagok=255;
 for  (byte i = 0; i < 10; i++) if (serNumLu  == badge[i]) tagok = i; // carte reconnue dans la liste


   if (tagok == 255); //Badge inconnu

   else if (tagok  == 0); //badge master
   { Serial.print("Badge master" );
    lcd.setCursor(0, 0);
    lcd.print("ACCES AUTORISE");
    lcd.setCursor(0, 1);
    lcd.print("SALUT master");
    digitalWrite(led_verte, HIGH);
    tone(buzzer, 1200, 100);
    delay(300);
    tone(buzzer, 1200, 100);
    delay(2000);
    digitalWrite(led_verte, LOW);
    lcd.clear();}

}

Remplace ceci

int badge[10],i=0;

Par cela

unsigned long badge [10];

Laisse tomber le i...

Fais une indentation à automatique avec CTRL T dans l'IDE. C'est plus facile à lire.

Si tu as des erreurs de compilation, poste l'ensemble des messages. Sinon explique ce que "il" te dit (c'est qui "il"?)

Salut @lesept, merci de continuer à m aider dans mon projet. Effectivement ca fait plus propre avec indentation automatique

J'imagine que déclarer le tableau avec unsigned long est par rapport à la taille du tag en hexadécimal non ?

heuuuu par contre je t'ai un peu perdu pour le "il te dit" tu parles des messages d'erreur ?

alors le code passe et j'arrive à le téléverser dans l'état mais il accepte tous tags que je lui présente ...

je pense que le problème vient de là :

serNumLu = *((unsigned long *)mfrc522.uid.uidByte); //recup num serie lu long unsigned

  tagok = 255;
  for  (byte i = 0; i < 10; i++) if (serNumLu  == badge[i]) tagok = i; // carte reconnue dans la liste


  if (tagok == 255); //Badge inconnu

  else if (tagok  == 0); //badge master
  if (tagok); //autres badges

l'idée est de récupérer le numéro de tags que l'on passe et de dire : si tagok est 0 : c'est master et si tagok est 255 c'est inconnu quant aux autres c'est ok (en faisant une autre action)

du coup

d'une je me demande comment je vais pouvoir déplémenter un compte si je ne différencie pas les badges de 1 à 9 ?

de 2 je ne comprend pas pourquoi il m'accepte tous les badges quand je téléverse... quelque chose m'echappe avec le tag ok ??

peut être parceque je n ai pas de ligne qui dise que tagok == 0 est le badge[0] .. non ??

Voici une possibilité :

  serNumLu = *((unsigned long *)mfrc522.uid.uidByte); //recup num serie lu long unsigned

  tagok = 255;
  for  (byte i = 0; i < 10; i++) if (serNumLu == badge[i]) tagok = i; // carte reconnue dans la liste
  switch (tagok) {
    case 0:
      master();
      // instructions master
      break;
    case 1:
      // instructions user 1
      break;
    case 2:
      // instructions user 2
      break;
    case 3:
      // instructions user 3
      break;
    case 255:
       inconnu();
      // // badge inconnu
      break;
    default:
      // instructions si autre numéro
  }

Une autre façon, plus simple :

  serNumLu = *((unsigned long *)mfrc522.uid.uidByte); //recup num serie lu long unsigned

  tagok = 255;
  for  (byte i = 0; i < 10; i++) if (serNumLu == badge[i]) tagok = i; // carte reconnue dans la liste
  switch (tagok) {
    case 0:
      master();
      // instructions master
      break;
    case 1-10:
      user(tagok);
      // instructions user connu
      break;
    case 255:
      inconnu();
      // // badge inconnu
      break;
    default:
      // instructions si autre numéro (genre message "badge non reconnu" sur l'écran)
  }

Et tu écris des fonctions pour chaque cas (master, user, inconnu).

Voyant tes autres questions, je te propose une version de ton code, qui devrait répondre à tes questions, et peut-être en poser d'autres :

#include 
#include 
#include 
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

#define SS_PIN 10    //Arduino Uno
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);        // Create MFRC522 instance.
MFRC522::MIFARE_Key key;

unsigned long serNumLu = 0;
unsigned long  badge[10]; //déclaration de tableau de 10 badges
struct Params {
  char nom[20];
  bool existe;
  int nbUtils;
  int credit;
};
struct Params Utilisateur[10];

int buzzer = 8;
int led_rouge = 14;
int led_verte = 15;

int tagok = 255;

void setup() {
  pinMode(led_rouge, OUTPUT);
  pinMode(led_verte, OUTPUT);
  pinMode(buzzer, OUTPUT);
  lcd.begin(16, 2); //ini le lcd
  SPI.begin();        // Init SPI bus
  Serial.begin(9600);
  mfrc522.PCD_Init();   // Init MFRC522 card

  initUsers();
  lcd.print("Dispositif");
  lcd.setCursor(0, 1);
  lcd.print("d'identification");
  delay(3000);
  lcd.clear();
}

void loop() {
  // Look for new cards
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
  }

  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial())    return;

  Serial.print("Card UID:");    //Dump UID
  for (byte i = 0; i < 4; i++) {
    Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
    Serial.print(mfrc522.uid.uidByte[i], HEX);
  }
  Serial.println();
  serNumLu = *((unsigned long *)mfrc522.uid.uidByte); //recup num serie lu long unsigned

  tagok = 255;
  for  (byte i = 0; i < 10; i++) if (serNumLu == badge[i]) tagok = i; // carte reconnue dans la liste
  switch (tagok) {
    case 0:
      master();
      // instructions master
      break;
    case 1-10:
      user(tagok);
      // instructions user connu
      break;
    case 255:
      inconnu();
      // badge inconnu
      break;
    default:
      autre();
      // instructions si autre numéro
  }
}

void master () {
  Serial.print("Badge master");
  lcd.setCursor(0, 0);
  lcd.print("ACCES AUTORISE");
  lcd.setCursor(0, 1);
  lcd.print("SALUT master");
  digitalWrite(led_verte, HIGH);
  tone(buzzer, 1200, 100);
  delay(300);
  tone(buzzer, 1200, 100);
  delay(2000);
  digitalWrite(led_verte, LOW);
}

void user (int numero) {
  Serial.print("Badge utilisateur ");
  Serial.println(numero);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("ACCES AUTORISE");
  lcd.setCursor(0, 1);
  lcd.print(Utilisateur[numero].nom);
  ++Utilisateur[numero].nbUtils ;
  Serial.print (Utilisateur[numero].nbUtils);
  Serial.println (" utilisations");
}

void inconnu () {
  Serial.print("Badge non reconnu");
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("ACCES REFUSE");
}

void autre () {
  Serial.print("Erreur lecture badge");
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("ERREUR LECTURE");
}

void initUsers() {
  //ini le tableau des badges
  badge[0] = 3643054959;  //badge master
  badge[1] = 55; //badge 1
  badge[2] = 44;//badge 2
  badge [3] = 88; //badge 3
  badge [4] = 33; //badge 4
  badge [5] = 44; //badge 5
  badge [6] = 55; //badge 6
  badge [7] = 44; //badge 7
  badge [8] = 44; //badge 8
  badge [9] = 44; //badge 9

  // Master
  Utilisateur[0].nom = "Master";
  Utilisateur[0].existe = true;
  Utilisateur[0].nbUtils = 0;
  Utilisateur[0].credit = 10000;

  // Utilisateur 1
  Utilisateur[1].nom = "Regis";
  Utilisateur[1].existe = true;
  Utilisateur[1].nbUtils = 3;
  Utilisateur[1].credit = 10;

 // Pierre
  Utilisateur[2].nom = "Pierre";
  Utilisateur[2].existe = true;
  Utilisateur[2].nbUtils = 4;
  Utilisateur[2].credit = 8;

  // Bernadette
  Utilisateur[3].nom = "Bernadette";
  Utilisateur[3].existe = false; // Elle a quitté l'immeuble
  Utilisateur[3].nbUtils = 12;
  Utilisateur[3].credit = 3;

}

Wahooo c'est juste énorme !!

c'est tout ce dont tu m'avais parlé mais tout en place !!! J'avais commencé a regarder les 'struct' 'param' 'char' 'bool' ... c'est super intéressant mais avant que j'arrive a faire un code comme le tiens les étudiants serait proches de la retraite même avec les nouvelles réformes :D :) ;)

au passage il me met plusieurs log d'erreur entre const char et char tu vois ce que ca peux être??

error: incompatible types in assignment of 'const char [11]' to 'char [20]'

Merci encore !!

Edit : J'ai enlevé le [20] et ca à l'air de marcher

Oui, en effet je maîtrise mal les tableaux de char... Manque de bonne source d'information sur le sujet.

Si ça marche comme ça, continue...

Par contre j'ai renseigné mes badges à ce niveau là ....

  //ini le tableau des badges
  badge[0] = 3643054959;  //badge master
  badge[1] = 55; //badge 1

mais il ne les reconnait pas. tu aurais une idée ou peut être qu'il faut que je les renseigne ailleurs ... ::)