#include <SPI.h>
#include <SD.h>
const int PHOTO_PIN = A0; // Broche analogique utilisée pour la photorésistance
const int baudRate = 9600; // Débit de transmission en bauds
const int bufferSize = 64; // Taille du tampon de réception
const int threshold = 500; // Seuil pour détecter les variations de fréquence
const int FREQ_MOD_DELAY_US = 1000; // Délai en microsecondes pour la modulation de fréquence
byte buffer[bufferSize]; // Tampon de réception
int bufferIndex = 0; // Index courant dans le tampon de réception
File file; // Objet fichier pour écrire les données reçues
// Déclarations de fonctions
char receiveChar();
void writeFile();
void setup() {
// Définir la broche d'entrée de la photorésistance
pinMode(PHOTO_PIN, INPUT);
Serial.begin(9600);
// Initialiser le tampon de réception
bufferIndex = 0;
}
void loop() {
// Recevoir un caractère de la LED
char c = receiveChar();
if (c == -1) {
// Pas de caractère reçu
return;
}
// Ajouter le caractère au tampon de réception
buffer[bufferIndex++] = c;
// Vérifier si le tampon est plein
if (bufferIndex >= bufferSize) {
// Tampon plein, reconstituer le fichier texte
writeFile();
}
Serial.println(c);
}
char receiveChar() {
// Recevoir le binaire de la LED en utilisant la photorésistance et la modulation de fréquence (FM)
byte data = 0;
for (int i = 0; i < 8; i++) {
int reading = analogRead(PHOTO_PIN);
data |= (reading > threshold) << i;
delayMicroseconds(FREQ_MOD_DELAY_US);
}
// Convertir le binaire en caractère
char c = char(data);
return c;
}
void writeFile() {
// Ouvrir le fichier texte en mode écriture
file = SD.open("nom_du_fichier.txt", FILE_WRITE);
// Écrire le tampon de réception dans le fichier texte
file.write(buffer, bufferIndex);
// Fermer le fichier texte
file.close();
// Réinitialiser le tampon de réception
bufferIndex = 0;
}