Il est maintenant beaucoup plus compréhensible et facilement modifiable.
Pour ceux qui sont intéressés par le projet, voici le code :
- Code: Tout sélectionner
// Projet ZEO-reves lucides
// UTILISATION DES DONNEES TRANSMISES DEPUIS ZEO
// AFIN DE PRODUIRE DES INDICES LUMINEUX
// A x MN DE y PHASE
// POUR AIDER LE REVEUR A DEVENIR CONSCIENT DANS SON REVE
//////////////////////////////////////////////////////////////////////////////////////////
//////////!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//////////
int dix = 60000; //////////!!!!!NE RIEN CHANGER DANS CE CADRE!!!!!//////////
int trente = 1800000; //////////!!!!!NE RIEN CHANGER DANS CE CADRE!!!!!//////////
int soixante = 3600000; //////////!!!!!NE RIEN CHANGER DANS CE CADRE!!!!!//////////
//////////!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//////////
//////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////REMPLACEZ LES NOMBRES POUR MODIFIER LA FONCTION////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////
////
////
//Nombre souhaité de phase cible pour déclenchement flashs lumineux ////
int NBREphaseCIBLE = 10; ////
////
//Temps avant recherche de phase ////
//10 minutes = 60000 // //30 minutes = 1800000 // //1 heure = 3600000 // ////
int DECOMPTEnombre =60000; ////
////
//LEDS sortie digitale ////
int LEDpinD1 = 11; // MESSAGES VISUELS QUAND PHASE CIBLE DETECTEE X2 LEDS ////
int LEDpinD2 = 10; // capteurs = aucune informations ////
int LEDpinD3 = 13; // messages visuels indicatifs ////
////
//LED sortie analogue ////
int LEDpinA1 = 9; // MESSAGES VISUELS QUAND PHASE CIBLE DETECTEE ////
////
////
///////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////
//Compteurs phases de sommeils
int LEGERnombre = 0;
int REMnombre = 0;
int INCONNUEnombre = 0;
int EVEILnombre = 0;
int PROFONDnombre = 0;
//Données ZEO
int incomingByte = 0;
byte header[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
int NOMBRE = 0; // COMPTEUR
int SIZE = 0;
int *DATA;
int val;
unsigned long digit = 0;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
Serial.begin(38400); // ouverture du port serial du ZEO, regle le debit donnees à 38400 bps
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(9, OUTPUT); // LED messages visuels quand phase cible détectée
pinMode(10, OUTPUT); // LED capteurs = aucune informations
pinMode(11, OUTPUT); // LED MESSAGES VISUELS QUAND PHASE CIBLE DETECTEE X2 LEDS
pinMode(13, OUTPUT); // LED messages visuels indicatifs
Serial.println(" Void setup ok ");delay(4000);
// Test LED 1 ( messages visuels quand phase cible détectée )
Serial.println(" Test LED 1 ");
analogWrite(LEDpinA1, 0);delay(500);
analogWrite(LEDpinA1, 63);delay(100);
analogWrite(LEDpinA1, 0);delay(500);
analogWrite(LEDpinA1, 127);delay(100);
analogWrite(LEDpinA1, 0);delay(500);
analogWrite(LEDpinA1, 190);delay(100);
analogWrite(LEDpinA1, 0);delay(500);
analogWrite(LEDpinA1, 255);delay(100);
analogWrite(LEDpinA1, 0);
// Test LED 2 ( messages visuels quand phase cible détectée ) X2 LEDS
Serial.println(" Test LED 2 ");
digitalWrite(LEDpinD1, LOW);
delay(500);
digitalWrite(LEDpinD1, HIGH);
delay(100);
digitalWrite(LEDpinD1, LOW);
delay(500);
digitalWrite(LEDpinD1, HIGH);
delay(100);
digitalWrite(LEDpinD1, LOW);
delay(500);
digitalWrite(LEDpinD1, HIGH);
delay(100);
digitalWrite(LEDpinD1, LOW);
delay(500);
digitalWrite(LEDpinD1, HIGH);
delay(100);
digitalWrite(LEDpinD1, LOW);
// Test LED 3 ( capteurs = aucune informations )
Serial.println(" Test LED 3 ");
digitalWrite(LEDpinD2, LOW);
delay(500);
digitalWrite(LEDpinD2, HIGH);
delay(100);
digitalWrite(LEDpinD2, LOW);
delay(500);
digitalWrite(LEDpinD2, HIGH);
delay(100);
digitalWrite(LEDpinD2, LOW);
delay(500);
digitalWrite(LEDpinD2, HIGH);
delay(100);
digitalWrite(LEDpinD2, LOW);
delay(500);
digitalWrite(LEDpinD2, HIGH);
delay(100);
digitalWrite(LEDpinD2, LOW);
// Test LED 1 et 2
Serial.println("5s avant Test LED 1 et 2");digitalWrite(LEDpinD3, HIGH); delay(100);digitalWrite(LEDpinD3, LOW); delay(900);
Serial.println("4");digitalWrite(LEDpinD3, HIGH); delay(100);digitalWrite(LEDpinD3, LOW); delay(900);
Serial.println("3");digitalWrite(LEDpinD3, HIGH); delay(100);digitalWrite(LEDpinD3, LOW); delay(900);
Serial.println("2");digitalWrite(LEDpinD3, HIGH); delay(100);digitalWrite(LEDpinD3, LOW); delay(900);
Serial.println("1");digitalWrite(LEDpinD3, HIGH); delay(100);digitalWrite(LEDpinD3, LOW); delay(900);
Serial.println(" Test LED 1 et 2 ");
digitalWrite(LEDpinD1, HIGH); analogWrite(LEDpinA1, 255);
delay(100);
digitalWrite(LEDpinD1, LOW); analogWrite(LEDpinA1, 0);
delay(500);
digitalWrite(LEDpinD1, HIGH); analogWrite(LEDpinA1, 255);
delay(100);
digitalWrite(LEDpinD1, LOW);analogWrite(LEDpinA1, 0);
delay(500);
digitalWrite(LEDpinD1, HIGH); analogWrite(LEDpinA1, 255);
delay(100);
digitalWrite(LEDpinD1, LOW);analogWrite(LEDpinA1, 0);
delay(500);
digitalWrite(LEDpinD1, HIGH); analogWrite(LEDpinA1, 255);
delay(100);
digitalWrite(LEDpinD1, LOW);analogWrite(LEDpinA1, 0);
delay(500);
//////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Temps avant recherche de phase// //
//
if ( DECOMPTEnombre == dix ) { MISEenROUTEdans10mn(); } // 10 MN avant recherche de phase //
if ( DECOMPTEnombre == trente ) { MISEenROUTEdans30mn(); } // 30 MN avant recherche de phase //
if ( DECOMPTEnombre == soixante ) { MISEenROUTEdans60mn(); } // 60 MN avant recherche de phase //
Serial.println("debut de la recherche de phase cible"); //
//////////////////////////////////////////////////////////////////////////////////////////////////////
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////
void loop() {
// attend les informations
if (Serial.available() > 0) {
// lecture des donnees :
incomingByte = Serial.read();
if ( incomingByte == 65 ) { holeHeader(); } // nouvelles informations arrivent
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
void holeHeader() {
NOMBRE = 0;
while ( NOMBRE < 10 ) {if (Serial.available() > 0) {header[NOMBRE] = Serial.read();NOMBRE++;}}
SIZE = (( header[3] * 256 ) + header[2]);
if ( SIZE > 20 ) { SIZE = 1; }
if ( header[3] + header[5] == 255 & header[2] + header[4] == 255 ) { holeDaten(SIZE); }
else { Serial.println(" CAPTEURS = AUCUNES INFORMATIONS DETECTEES ");
digitalWrite(LEDpinD2, LOW);
delay(500);
digitalWrite(LEDpinD2, HIGH);
delay(100);
digitalWrite(LEDpinD2, LOW);
delay(100);
digitalWrite(LEDpinD2, HIGH);
delay(100);
digitalWrite(LEDpinD2, LOW);
delay(100);
digitalWrite(LEDpinD2, HIGH);
delay(100);
digitalWrite(LEDpinD2, LOW);
delay(100);
digitalWrite(LEDpinD2, HIGH);
delay(100);
digitalWrite(LEDpinD2, LOW);
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
void holeDaten(int SIZE) {
DATA = (int*)calloc(1, SIZE * sizeof(int));
NOMBRE = 0;
while ( NOMBRE < SIZE ) {if (Serial.available() > 0) {DATA[NOMBRE] = Serial.read();NOMBRE++;}}
if ( DATA[0] == 157 ) { Serial.print("Phase de sommeil");
if (DATA[1] == 0) { Serial.println(": INCONNUE"); INCONNUEnombre++;}
if (DATA[1] == 1) { Serial.println(": EVEIL"); EVEILnombre++;}
if (DATA[1] == 2) { Serial.println(": REM //phase cible//"); REMnombre++;
Serial.print("numero REM= ");Serial.println(REMnombre); }
if (DATA[1] == 3) { Serial.println(": LEGER"); LEGERnombre++;}
if (DATA[1] == 4) { Serial.println(": PROFOND"); PROFONDnombre++;}
}
if ( PROFONDnombre > 0 ) { REMnombre = 0; PROFONDnombre = 0;}
if ( LEGERnombre > 0 ) { REMnombre = 0; LEGERnombre = 0;}
if ( EVEILnombre > 0 ) { REMnombre = 0; EVEILnombre = 0;}
if ( INCONNUEnombre > 0 ) { REMnombre = 0; INCONNUEnombre = 0;}
if ( REMnombre == NBREphaseCIBLE ) { LEDflash(); REMnombre = 0; } //
free(DATA);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
void LEDflash() {
Serial.print("PHASE REM DETECTEE");
digitalWrite(LEDpinD1, HIGH); analogWrite(LEDpinA1, 255);
delay(100);
digitalWrite(LEDpinD1, LOW); analogWrite(LEDpinA1, 0);
delay(500);
digitalWrite(LEDpinD1, HIGH); analogWrite(LEDpinA1, 255);
delay(100);
digitalWrite(LEDpinD1, LOW);analogWrite(LEDpinA1, 0);
delay(500);
digitalWrite(LEDpinD1, HIGH); analogWrite(LEDpinA1, 255);
delay(100);
digitalWrite(LEDpinD1, LOW);analogWrite(LEDpinA1, 0);
delay(500);
digitalWrite(LEDpinD1, HIGH); analogWrite(LEDpinA1, 255);
delay(100);
digitalWrite(LEDpinD1, LOW);analogWrite(LEDpinA1, 0);
delay(500);
digitalWrite(LEDpinD1, HIGH); analogWrite(LEDpinA1, 255);
delay(100);
digitalWrite(LEDpinD1, LOW);analogWrite(LEDpinA1, 0);
delay(500);
digitalWrite(LEDpinD1, HIGH); analogWrite(LEDpinA1, 255);
delay(100);
digitalWrite(LEDpinD1, LOW);analogWrite(LEDpinA1, 0);
delay(500);
digitalWrite(LEDpinD1, HIGH); analogWrite(LEDpinA1, 255);
delay(100);
digitalWrite(LEDpinD1, LOW);analogWrite(LEDpinA1, 0);
delay(500);
digitalWrite(LEDpinD1, HIGH); analogWrite(LEDpinA1, 255);
delay(100);
digitalWrite(LEDpinD1, LOW);analogWrite(LEDpinA1, 0);
delay(500);
}
/////////////////////////////////////////////////////////////////////////////////////
//
void MISEenROUTEdans10mn() { //
//
/////////////////////////////////////////////////////////////////////////////////////
//
// Si le decompte avant début de recherche de phase cible est de 10 minutes //
// LEDpinD3 clignotera 1fois toutes les 2 minutes de la manière suivante : //
// //
// 1ere série de flashs : 1 fois pour annoncer que le décompte est de 10 minutes //
// 2eme série de flashs : 1 fois pour annoncer que 2 minutes ont passées //
// 3eme série de flashs : 1 fois pour annoncer que 4 minutes ont passées //
// 4eme série de flashs : 1 fois pour annoncer que 6 minutes ont passées //
// 5eme série de flashs : 1 fois pour annoncer que 8 minutes ont passées //
// 6eme série de flashs : 1 fois pour annoncer que 10 minutes ont passées //
// -------Début de la recherche de phase cible //
//
//
//
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
//
delay(119000); //
//
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
//
delay(119000); //
//
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
//
delay(119000); //
//
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
//
delay(119000); //
//
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
//
delay(118000); //
//
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
//
//
} //
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
//
void MISEenROUTEdans30mn() { //
//
/////////////////////////////////////////////////////////////////////////////////////
// Si le decompte avant début de recherche de phase cible est de 30 minutes //
// LEDpinD3 clignotera 3fois toutes les 10 minutes de la manière suivante : //
// //
// 1ere série de flashs : 3 fois pour annoncer que le décompte est de 30 minutes //
// 2eme série de flashs : 3 fois pour annoncer que 10 minutes ont passées //
// 3eme série de flashs : 3 fois pour annoncer que 20 minutes ont passées //
// 4eme série de flashs : 3 fois pour annoncer que 30 minutes ont passées //
// -------Début de la recherche de phase cible //
//
//
//
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
//
delay(597000); //
//
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
//
delay(597000); //
//
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
//
delay(594000); //
//
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
//
} //
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
//
void MISEenROUTEdans60mn() { //
//
/////////////////////////////////////////////////////////////////////////////////////
//
// Si le decompte avant début de recherche de phase cible est de 60 minutes //
// LEDpinD3 clignotera 6fois toutes les 10 minutes de la manière suivante : //
// //
// 1ere série de flashs : 6 fois pour annoncer que le décompte est de 60 minutes //
// 2eme série de flashs : 6 fois pour annoncer que 10 minutes ont passées //
// 3eme série de flashs : 6 fois pour annoncer que 20 minutes ont passées //
// 4eme série de flashs : 6 fois pour annoncer que 30 minutes ont passées //
// 5eme série de flashs : 6 fois pour annoncer que 40 minutes ont passées //
// 6eme série de flashs : 6 fois pour annoncer que 50 minutes ont passées //
// 7eme série de flashs : 6 fois pour annoncer que 60 minutes ont passées //
// -------Début de la recherche de phase cible //
//
//
//
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
//
delay(694000); //
//
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
//
delay(694000); //
//
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
//
delay(694000); //
//
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
//
delay(694000); //
//
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
//
delay(694000); //
//
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
//
delay(688000); //
//
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
digitalWrite(LEDpinD3, HIGH); delay(300); //
digitalWrite(LEDpinD3, LOW); delay(700); //
//
} //
/////////////////////////////////////////////////////////////////////////////////////