#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <SD.h>
#include <SPI.h>
const int pirPin = 2; // Pin de connexion du capteur PIR
int count = 0; // Variable pour compter les pigeons
int totalPigeons = 0;
// Configuration des broches pour l'écran TFT ILI9341
#define TFT_CS 10
#define TFT_DC 9
#define TFT_RST 8
// Configuration des broches pour la carte SD
#define SD_CS 4
// Broches pour les boutons
#define BUTTON_NOM 3
#define BUTTON_NUMERO 5
#define BUTTON_GENRE 6
#define BUTTON_PIGEONS 7
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
String userInput = "";
void setup() {
Serial.begin(9600);
pinMode(pirPin, INPUT);
// Initialisation de l'écran TFT
tft.begin();
tft.setRotation(3);
// Initialisation de la carte SD
if (!SD.begin(SD_CS)) {
tft.println("Erreur de carte SD!");
return;
}
// Configuration des broches des boutons
pinMode(BUTTON_NOM, INPUT_PULLUP);
pinMode(BUTTON_NUMERO, INPUT_PULLUP);
pinMode(BUTTON_GENRE, INPUT_PULLUP);
pinMode(BUTTON_PIGEONS, INPUT_PULLUP);
// Demander des informations à l'utilisateur
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.setCursor(0, 0);
tft.println("Bienvenue!");
tft.print("Entrez le nom de l'amateur : ");
userInput = waitForButtonInput(BUTTON_NOM);
tft.println("Nom : " + userInput);
tft.print("Entrez le numéro de panier : ");
userInput = waitForButtonInput(BUTTON_NUMERO);
int numeroPanier = userInput.toInt();
tft.println("Numéro de panier : " + String(numeroPanier));
tft.print("Entrez le genre (M/F) : ");
userInput = waitForButtonInput(BUTTON_GENRE);
char genre = userInput.charAt(0);
tft.println("Genre : " + String(genre));
tft.print("Entrez le nombre fixe de pigeons par panier : ");
userInput = waitForButtonInput(BUTTON_PIGEONS);
totalPigeons = userInput.toInt();
tft.println("Nombre fixe de pigeons par panier : " + String(totalPigeons));
// Écrire les informations dans un fichier PDF
File dataFile = SD.open("data.txt", FILE_WRITE);
if (dataFile) {
dataFile.println("Informations de l'amateur :");
dataFile.println("Nom : " + userInput);
dataFile.println("Numéro de panier : " + String(numeroPanier));
dataFile.println("Genre : " + String(genre));
dataFile.println("Nombre fixe de pigeons par panier : " + String(totalPigeons));
dataFile.close();
} else {
tft.println("Erreur d'écriture dans le fichier PDF!");
}
}
void loop() {
if (digitalRead(pirPin) == HIGH) { // Si le capteur détecte un mouvement
count++; // Incrémente le compteur
tft.println("Pigeon détecté! Total : " + String(count) + "/" + String(totalPigeons));
delay(1000); // Délai pour éviter la détection multiple en une seule passe
}
}
String waitForButtonInput(int buttonPin) {
String inputString = "";
while (true) {
if (digitalRead(buttonPin) == LOW) {
delay(100); // Délai pour éviter les pressions multiples
while (digitalRead(buttonPin) == LOW) {
char c = getButtonCharacter(buttonPin);
if (c != '\0') {
inputString += c;
tft.print(c);
}
delay(100); // Délai pour éviter la saisie rapide
}
return inputString;
}
}
}
char getButtonCharacter(int buttonPin) {
if (buttonPin == BUTTON_NOM) {
return getCharacterFromButton('A', 'Z');
} else if (buttonPin == BUTTON_NUMERO) {
return getCharacterFromButton('0', '9');
} else if (buttonPin == BUTTON_GENRE) {
return getCharacterFromButton('M', 'F');
} else if (buttonPin == BUTTON_PIGEONS) {
return getCharacterFromButton('0', '9');
}
return '\0';
}
char getCharacterFromButton(char startChar, char endChar) {
for (char c = startChar; c <= endChar; ++c) {
if (digitalRead(BUTTON_NOM) == LOW) return c;
delay(50);
}
return '\0';
}