Code de l'horloge : Example sketch for interfacing with the DS1302 timekeeping chip. Copyright © 2009, Matt Sparks All rights reserved. http://quadpoint.org/projects/arduino-ds1302 #include <stdio.h> #include <DS1302.h> char buf[50]; namespace {

Set the appropriate digital I/O pin connections. These are the pin assignments for the Arduino as well for as the DS1302 chip. See the DS1302 datasheet: http://datasheets.maximintegrated.com/en/ds/DS1302.pdf const int kCePin = 5; Chip Enable const int kIoPin = 6; Input/Output const int kSclkPin = 4; Serial Clock

Create a DS1302 object. DS1302 rtc(kCePin, kIoPin, kSclkPin); String dayAsString(const Time::Day day) { switch (day) { case Time::kMonday: return “Lundi”; case Time::kTuesday: return “Mardi”; case Time::kWednesday: return “Mercredi”; case Time::kThursday: return “Jeudi”; case Time::kFriday: return “Vendredi”; case Time::kSunday: return “Samedi”; case Time::kSaturday: return “Dimanche”; } return “(unknown day)”; } void printTime() { Get the current time and date from the chip.

Time t = rtc.time();
// Name the day of the week.
const String day = dayAsString(t.day);
// Format the time and date and insert into the temporary buffer.

snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d",
         
        t.date,  t.mon, t.yr,
         t.hr, t.min, t.sec);
// Print the formatted string to serial so we can see the time.
Serial.println(buf);

}

} namespace void setup() { Serial.begin(9600); Initialize a new chip by turning off write protection and clearing the

// clock halt flag. These methods needn't always be called. See the DS1302
// datasheet for details.
rtc.writeProtect(false);
rtc.halt(false);
// Make a new time object to set the date and time.
// Sunday, September 22, 2013 at 01:38:50.

Time t(2019, 4, 10, 15, 8, 50, Time::kThursday); Set the time and date on the chip.

//rtc.time(t);

}

Loop and print the time every second. void loop() { printTime(); delay(1000); } Code du capteur d'humidité et de temperature : #include <dht.h> dht DHT; #define DHT11_PIN 3 void setup(){ Serial.begin(9600); } void loop() { read the information from the humidity and temp sensor int chk = DHT.read11(DHT11_PIN);

Serial.print("Temperature = ");
Serial.println(DHT.temperature);
Serial.print("Humidity = ");
Serial.println(DHT.humidity);
delay(1000);

}

Code du datage des fichiers SD ( synchronisée avec l'horloge):

#include <SPI.h> #include <SD.h> #include <Wire.h> #include <RTClib.h> #include <DS1302.h> #include <stdio.h>

File file; test file const uint8_t SD_CS = 10; SD chip select

Set the appropriate digital I/O pin connections. These are the pin assignments for the Arduino as well for as the DS1302 chip. See the DS1302 datasheet: http://datasheets.maximintegrated.com/en/ds/DS1302.pdf const int kCePin = 5; Chip Enable const int kIoPin = 6; Input/Output const int kSclkPin = 4; Serial Clock

Create a DS1302 object. DS1302 rtc(kCePin, kIoPin, kSclkPin); String dayAsString(const Time::Day day) { switch (day) { case Time::kMonday: return “Lundi”; case Time::kTuesday: return “Mardi”; case Time::kWednesday: return “Mercredi”; case Time::kThursday: return “Jeudi”; case Time::kFriday: return “Vendredi”; case Time::kSunday: return “Samedi”; case Time::kSaturday: return “Dimanche”; } return “(unknown day)”; } char buf[30]; void printTime(uint16_t* date,uint16_t* time ) { Get the current time and date from the chip.

Time t = rtc.time();
// Name the day of the week.
const String day = dayAsString(t.day);
// Format the time and date and insert into the temporary buffer.

snprintf(buf, sizeof(buf), “%s %04d-%02d-%02d %02d:%02d:%02d”, day.c_str(),t.date,t.yr, t.mon, t.hr, t.min, t.sec);

Serial.println("yy");

Serial.println(snprintf); *date = FAT_DATE(t.yr,t.mon, t.date); *time = FAT_TIME(t.hr, t.min, t.sec); Print the formatted string to serial so we can see the time.

// Serial.println(buf);

}

—————————————————————————— —————————————————————————— void setup() {

 rtc.writeProtect(false);
rtc.halt(false);

Wire.begin(); if (!RTC.begin()) { Serial.println(“RTC failed”);

 //while(1);

}; set date time callback function SdFile::dateTimeCallback(printTime);

  Time t = rtc.time();
    const String day = dayAsString(t.day);
 snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d",day.c_str(),
 t.date,t.yr, t.mon, t.hr, t.min, t.sec);
Serial.println("xx");
Serial.println(buf);

if (!SD.begin(SD_CS)) {

 Serial.println("SD.begin failed");
 while(1);

} file = SD.open(“name.TXT”, FILE_WRITE); file.println(“Testing 1,2,3…”);

delay(5000); file.close(); Serial.println(“Done”);

} —————————————————————————— void loop() {} Code Final : #include <stdio.h> #include <DS1302.h> #include <Wire.h> #include <ArduCAM.h> #include <SPI.h> #include <SD.h> #include “memorysaver.h” #include <RTClib.h> #include <dht.h> This code can only work on OV5640_MINI_5MP_PLUS or OV5642_MINI_5MP_PLUS platform. #if !(defined (OV5640_MINI_5MP_PLUS)||defined (OV5642_MINI_5MP_PLUS)) #error Please select the hardware platform and camera module in the ../libraries/ArduCAM/memorysaver.h file #endif #define FRAMES_NUM 0x00 set pin 7 as the slave select for the digital pot: const int CS = 7; Pin for define where the infromation gonna be transfered to the sd const uint8_t SD_CS = 10; File file; test file bool is_header = false; int total_time = 0; #if defined (OV5640_MINI_5MP_PLUS)

ArduCAM myCAM(OV5640, CS);

#else

ArduCAM myCAM(OV5642, CS);

#endif uint8_t read_fifo_burst(ArduCAM myCAM);

Define the humidty and temp sensor object and define the pin where the information go dht DHT; #define DHT11_PIN 3 Pin connection for the clock const int kCePin = 5; Chip Enable const int kIoPin = 6; Input/Output const int kSclkPin = 4; Serial Clock Create a DS1302 object (clock object ). DS1302 rtc(kCePin, kIoPin, kSclkPin); char buf[30];

Define the code and the placement for the date of each file who are put in the ( when there are create) void printTime(uint16_t* date,uint16_t* time ) { Get the current time and date from the chip.

Time t = rtc.time();
// Name the day of the week.
const String day = dayAsString(t.day);
// Format the time and date and insert into the temporary buffer.
snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d", day.c_str(),t.date,t.yr, t.mon, t.hr, t.min, t.sec);
Serial.println("yy");
*date = FAT_DATE(t.yr,t.mon, t.date);
*time = FAT_TIME(t.hr, t.min, t.sec);

}

String dayAsString(const Time::Day day) {

switch (day) {
  
  case Time::kMonday: return "Lundi";
  case Time::kTuesday: return "Mardi";
  case Time::kWednesday: return "Mercredi";
  case Time::kThursday: return "Jeudi";
  case Time::kFriday: return "Vendredi";
  case Time::kSunday: return "Samedi";
  case Time::kSaturday: return "Dimanche";
}
return "(unknown day)";

}

void setup() { put your setup code here, to run once: Take the time from the clock to synchronize it with the file who is put a in the sd SdFile::dateTimeCallback(printTime); Time t = rtc.time(); const String day = dayAsString(t.day);

 snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d",day.c_str(),
 t.date,t.yr, t.mon, t.hr, t.min, t.sec);

camera code uint8_t vid, pid; uint8_t temp; #if defined(SAM3X8E) Wire1.begin(); #else Wire.begin(); #endif Serial.begin(115200); Serial.println(F(“ArduCAM Start!”)); set the CS as an output: pinMode(CS, OUTPUT); digitalWrite(CS, HIGH);

initialize SPI: SPI.begin(); Reset the CPLD myCAM.write_reg(0x07, 0x80); delay(100); myCAM.write_reg(0x07, 0x00); delay(100);

while(1){

//Check if the ArduCAM SPI bus is OK
myCAM.write_reg(ARDUCHIP_TEST1, 0x55);
temp = myCAM.read_reg(ARDUCHIP_TEST1);
if(temp != 0x55)
{
  Serial.println(F("SPI interface Error!"));
  delay(1000);continue;
}else{
  Serial.println(F("SPI interface OK."));break;
}

} #if defined (OV5640_MINI_5MP_PLUS) while(1){

//Check if the camera module type is OV5640
myCAM.rdSensorReg16_8(OV5640_CHIPID_HIGH, &vid);
myCAM.rdSensorReg16_8(OV5640_CHIPID_LOW, &pid);
if ((vid != 0x56) || (pid != 0x40)){
  Serial.println(F("Can't find OV5640 module!"));
  delay(1000); continue;
}else{
  Serial.println(F("OV5640 detected."));break;      
}

} #else while(1){

//Check if the camera module type is OV5642
myCAM.rdSensorReg16_8(OV5642_CHIPID_HIGH, &vid);
myCAM.rdSensorReg16_8(OV5642_CHIPID_LOW, &pid);
if ((vid != 0x56) || (pid != 0x42)){
  Serial.println(F("Can't find OV5642 module!"));
  delay(1000);continue;
}else{
  Serial.println(F("OV5642 detected."));break;      
}

} #endif Initialize SD Card while(!SD.begin(SD_CS)) { Serial.println(F(“SD Card Error!”));delay(1000); } Serial.println(F(“SD Card detected.”)); Change to JPEG capture mode and initialize the OV5640 module myCAM.set_format(JPEG); myCAM.InitCAM(); myCAM.set_bit(ARDUCHIP_TIM, VSYNC_LEVEL_MASK); myCAM.clear_fifo_flag(); myCAM.write_reg(ARDUCHIP_FRAMES, FRAMES_NUM); }

void loop() {

read the information from the humidity and temp sensor int chk = DHT.read11(DHT11_PIN);

Read the value in A0 from the IR sensor int sensorValue = analogRead(A0); float voltage = sensorValue * (5.0 / 1023.0); Condition for taking a picture with the code for take pic if (voltage < 3) { myCAM.flush_fifo(); myCAM.clear_fifo_flag(); #if defined (OV5640_MINI_5MP_PLUS)

myCAM.OV5640_set_JPEG_size(OV5640_320x240);delay(1000);

#else

myCAM.OV5642_set_JPEG_size(OV5642_320x240);delay(1000);

#endif Start capture myCAM.start_capture(); Serial.println(F(“start capture.”)); while ( !myCAM.get_bit(ARDUCHIP_TRIG, CAP_DONE_MASK)); Serial.println(F(“CAM Capture Done.”)); Serial.print(F(“capture total_time used (in miliseconds):”)); read_fifo_burst(myCAM); Serial.print(F(“save capture total_time used (in miliseconds):”)); myCAM.clear_fifo_flag(); delay(1000); } else {} } uint8_t read_fifo_burst(ArduCAM myCAM) { Read the infromation received from the HT sensor in pin3 int chk = DHT.read11(DHT11_PIN); delay(1000);

uint8_t temp = 0, temp_last = 0; uint32_t length = 0; static int i = 0; static int k = 0; char str[8]; File outFile; byte buf[256]; length = myCAM.read_fifo_length(); Serial.print(F(“The fifo length is :”)); Serial.println(length, DEC); if (length >= MAX_FIFO_SIZE) 8M { Serial.println(“Over size.”); return 0; } if (length == 0 ) 0 kb {

Serial.println(F("Size is 0."));
return 0;

} myCAM.CS_LOW(); myCAM.set_fifo_burst();Set fifo burst mode i = 0; while ( length– ) { temp_last = temp; temp = SPI.transfer(0x00); Read JPEG data from FIFO

if ( (temp == 0xD9) && (temp_last == 0xFF) ) //If find the end ,break while,
{
  buf[i++] = temp;  //save the last  0XD9     
  //Write the remain bytes in the buffer
  myCAM.CS_HIGH();
  outFile.write(buf, i);    
  //Close the file
  outFile.close();
  Serial.println(F("OK"));
  is_header = false;
  myCAM.CS_LOW();
  myCAM.set_fifo_burst();
  i = 0;
}  
if (is_header == true)
{ 
  //Write image data to buffer if not full
  if (i < 256)
   buf[i++] = temp;
  else
  {
    //Write 256 bytes image data to file
    myCAM.CS_HIGH();
    outFile.write(buf, 256);
    i = 0;
    buf[i++] = temp;
    myCAM.CS_LOW();
    myCAM.set_fifo_burst();
  }        
}
else if ((temp == 0xD8) & (temp_last == 0xFF))
{
    is_header = true;
  myCAM.CS_HIGH();
  //Create a avi file
  k = k + 1;
  itoa(k, str, 10);
  strcat(str, ".jpg");
  //Open the new file
  outFile = SD.open(str, O_WRITE | O_CREAT | O_TRUNC);
  
  
  file = SD.open("donnees.TXT", FILE_WRITE);
  file.println("temperature en °C:");
  file.println(DHT.temperature);
  file.println("Humidite en % :");
  file.println(DHT.humidity);
  
   file.close();
  
  if (! outFile)
  {
    Serial.println(F("File open failed"));
    while (1);
  }
  myCAM.CS_LOW();
  myCAM.set_fifo_burst();   
  buf[i++] = temp_last;
  buf[i++] = temp;   
}

}

myCAM.CS_HIGH();
return 1;

}