Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement - Page 2
Répondre à la discussion
Page 2 sur 3 PremièrePremière 2 DernièreDernière
Affichage des résultats 31 à 60 sur 68

Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement



  1. #31
    invite0852c877

    Re : Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement


    ------

    Désolé :/

    Voila j'ai encore modifié t'en pense quoi
    Code:
    #include <arduino.h>
    #include <SD.h>
    #include <SoftwareSerial.h>
    #define PIC_PKT_LEN 128 //data length of each read, dont set this too big because ram is limited
    #define PIC_FMT_VGA 7
    #define PIC_FMT_CIF 5
    #define PIC_FMT_OCIF 3
    #define CAM_ADDR 0
    #define CAM_SERIAL softSerial
    #define PIC_FMT PIC_FMT_VGA
    
    File myFile;
    SoftwareSerial softSerial(2, 3); //rx,tx (11-13 is used by sd shield)
    const byte cameraAddr = (CAM_ADDR << 5); // addr
    const int PIR_MOTION_SENSOR = A5; // the number of the pushbutton pin
    unsigned long picTotalLen = 0; // picture length
    int picNameNum = 0;
    /*********************************************************************/
    void setup()
    {
    Serial.begin(115200);
    CAM_SERIAL.begin(9600); 
    pinMode(PIR_MOTION_SENSOR, INPUT); 
    
    pinMode(4,OUTPUT); 
    if (!SD.begin(4)) {
    
    return;
    }
    
    initialize();
    }
    
    	
    
    
    void loop()
    {
    	int sensorValue = digitalRead(PIR_MOTION_SENSOR);
    	if(sensorValue == HIGH)  //when the sensor value is HIGH, someone is in here
    	{
    	   Capture();
               delay(5000); 	 
    	}
    }
    /*********************************************************************/
    void clearRxBuf()
    {
    while (CAM_SERIAL.available())
    {
    CAM_SERIAL.read();
    }
    }
    /*********************************************************************/
    void sendCmd(char cmd[], int cmd_len)
    {
    for (char i = 0; i < cmd_len; i++) CAM_SERIAL.write(cmd[i]);
    }
    /*********************************************************************/
    int readBytes(char *dest, int len, unsigned int timeout)
    {
    int read_len = 0;
    unsigned long t = millis();
    while (read_len < len)
    {
    while (CAM_SERIAL.available()<1)
    {
    if ((millis() - t) > timeout)
    {
    return read_len;
    }
    }
    *(dest+read_len) = CAM_SERIAL.read();
    Serial.write(*(dest+read_len));
    read_len++;
    }
    return read_len;
    }
    /*********************************************************************/
    void initialize()
    {
    char cmd[] = {0xaa,0x0d|cameraAddr,0x00,0x00,0x00,0x00} ;
    unsigned char resp[6];
    Serial.print("initializing camera...");
    while (1)
    {
    sendCmd(cmd,6);
    if (readBytes((char *)resp, 6,1000) != 6)
    {
    Serial.print(".");
    continue;
    }
    if (resp[0] == 0xaa && resp[1] == (0x0e | cameraAddr) && resp[2] == 0x0d && resp[4] == 0 && resp[5] == 0)
    {
    if (readBytes((char *)resp, 6, 500) != 6) continue;
    if (resp[0] == 0xaa && resp[1] == (0x0d | cameraAddr) && resp[2] == 0 && resp[3] == 0 && resp[4] == 0 && resp[5] == 0) break;
    }
    }
    cmd[1] = 0x0e | cameraAddr;
    cmd[2] = 0x0d;
    sendCmd(cmd, 6);
    //Serial.println("\nCamera initialization done.");
    }
    /*********************************************************************/
    void preCapture()
    {
    char cmd[] = { 0xaa, 0x01 | cameraAddr, 0x00, 0x07, 0x00, PIC_FMT };
    unsigned char resp[6];
    while (1)
    {
    clearRxBuf();
    sendCmd(cmd, 6);
    if (readBytes((char *)resp, 6, 100) != 6) continue;
    if (resp[0] == 0xaa && resp[1] == (0x0e | cameraAddr) && resp[2] == 0x01 && resp[4] == 0 && resp[5] == 0) break;
    }
    }
    void Capture()
    {
    char cmd[] = { 0xaa, 0x06 | cameraAddr, 0x08, PIC_PKT_LEN & 0xff, (PIC_PKT_LEN>>8) & 0xff ,0};
    unsigned char resp[6];
    while (1)
    {
    clearRxBuf();
    sendCmd(cmd, 6);
    if (readBytes((char *)resp, 6, 100) != 6) continue;
    if (resp[0] == 0xaa && resp[1] == (0x0e | cameraAddr) && resp[2] == 0x06 && resp[4] == 0 && resp[5] == 0) break;
    }
    cmd[1] = 0x05 | cameraAddr;
    cmd[2] = 0;
    cmd[3] = 0;
    cmd[4] = 0;
    cmd[5] = 0;
    while (1)
    {
    clearRxBuf();
    sendCmd(cmd, 6);
    if (readBytes((char *)resp, 6, 100) != 6) continue;
    if (resp[0] == 0xaa && resp[1] == (0x0e | cameraAddr) && resp[2] == 0x05 && resp[4] == 0 && resp[5] == 0) break;
    }
    cmd[1] = 0x04 | cameraAddr;
    cmd[2] = 0x1;
    while (1)
    {
    clearRxBuf();
    sendCmd(cmd, 6);
    if (readBytes((char *)resp, 6, 100) != 6) continue;
    if (resp[0] == 0xaa && resp[1] == (0x0e | cameraAddr) && resp[2] == 0x04 && resp[4] == 0 && resp[5] == 0)
    {
    if (readBytes((char *)resp, 6, 1000) != 6)
    {
    continue;
    }
    if (resp[0] == 0xaa && resp[1] == (0x0a | cameraAddr) && resp[2] == 0x01)
    {
    picTotalLen = (resp[3]) | (resp[4] << 8) | (resp[5] << 16);
    //Serial.print("picTotalLen:");
    //Serial.println(picTotalLen);
    break;
    }
    }
    }
    }
    /*********************************************************************/
    void GetData()
    {
    unsigned int pktCnt = (picTotalLen) / (PIC_PKT_LEN - 6);
    if ((picTotalLen % (PIC_PKT_LEN-6)) != 0) pktCnt += 1;
    char cmd[] = { 0xaa, 0x0e | cameraAddr, 0x00, 0x00, 0x00, 0x00 };
    unsigned char pkt[PIC_PKT_LEN];
    char picName[] = "pic00.jpg";
    picName[3] = picNameNum/10 + '0';
    picName[4] = picNameNum%10 + '0';
    if (SD.exists(picName))
    {
    SD.remove(picName);
    }
    myFile = SD.open(picName, FILE_WRITE);
    if(!myFile){
    //Serial.println("myFile open fail...");
    }
    else{
    for (unsigned int i = 0; i < pktCnt; i++)
    {
    cmd[4] = i & 0xff;
    cmd[5] = (i >> 8) & 0xff;
    int retry_cnt = 0;
    retry:
    delay(10);
    clearRxBuf();
    sendCmd(cmd, 6);
    uint16_t cnt = readBytes((char *)pkt, PIC_PKT_LEN, 200);
    unsigned char sum = 0;
    for (int y = 0; y < cnt - 2; y++)
    {
    sum += pkt[y];
    }
    if (sum != pkt[cnt-2])
    {
    if (++retry_cnt < 100) goto retry;
    else break;
    }
    myFile.write((const uint8_t *)&pkt[4], cnt-6);
    //if (cnt != PIC_PKT_LEN) break;
    }
    cmd[4] = 0xf0;
    cmd[5] = 0xf0;
    sendCmd(cmd, 6);
    }
    myFile.close();
    picNameNum ++;
    }

    -----

  2. #32
    invite1d577638

    Re : Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement

    Teste, tu verras bien...

    (Code non indenté, je lis pas...!)

  3. #33
    invite0852c877

    Re : Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement

    c'est je l'ai indenter^^

    j'ai testé mais bon sa ne marche pas,j'ai mis ma carte sd sur ma tablette et il n'y a pas de photo pris :/

  4. #34
    invite1d577638

    Re : Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement

    Citation Envoyé par moduleloi Voir le message
    j'ai testé mais bon sa ne marche pas,j'ai mis ma carte sd sur ma tablette et il n'y a pas de photo pris :/
    Quelle version du programme ? Celle post #31 ?

    Ajoute une led qui clignote ou un serial.print avant le capture() histoire de faire un peu de debug...

  5. #35
    invite0852c877

    Re : Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement

    Oui c'est celle du post 31
    j'ai rajouté serial.print sa ne fonctionne pas :/,je sais pas comment ajouté une led et le mettre dans quel emplacement
    Code:
    #include <arduino.h>
    #include <SD.h>
    #include <SoftwareSerial.h>
    #define PIC_PKT_LEN 128 //data length of each read, dont set this too big because ram is limited
    #define PIC_FMT_VGA 7
    #define PIC_FMT_CIF 5
    #define PIC_FMT_OCIF 3
    #define CAM_ADDR 0
    #define CAM_SERIAL softSerial
    #define PIC_FMT PIC_FMT_VGA
    
    File myFile;
    SoftwareSerial softSerial(2, 3); //rx,tx (11-13 is used by sd shield)
    const byte cameraAddr = (CAM_ADDR << 5); // addr
    const int PIR_MOTION_SENSOR = A5; // the number of the pushbutton pin
    unsigned long picTotalLen = 0; // picture length
    int picNameNum = 0;
    /*********************************************************************/
    void setup()
    {
    Serial.begin(115200);
    CAM_SERIAL.begin(9600); 
    pinMode(PIR_MOTION_SENSOR, INPUT); 
    
    pinMode(4,OUTPUT); 
    if (!SD.begin(4)) {
    
    return;
    }
    
    initialize();
    }
    
    	
    
    
    void loop()
    {
    	int sensorValue = digitalRead(PIR_MOTION_SENSOR);
    	if(sensorValue == HIGH)  //when the sensor value is HIGH, someone is in here
    	{
             Serial.println("taking");
    	   Capture();
               delay(5000); 	 
    	}
    }
    /*********************************************************************/
    void clearRxBuf()
    {
    while (CAM_SERIAL.available())
    {
    CAM_SERIAL.read();
    }
    }
    /*********************************************************************/
    void sendCmd(char cmd[], int cmd_len)
    {
    for (char i = 0; i < cmd_len; i++) CAM_SERIAL.write(cmd[i]);
    }
    /*********************************************************************/
    int readBytes(char *dest, int len, unsigned int timeout)
    {
    int read_len = 0;
    unsigned long t = millis();
    while (read_len < len)
    {
    while (CAM_SERIAL.available()<1)
    {
    if ((millis() - t) > timeout)
    {
    return read_len;
    }
    }
    *(dest+read_len) = CAM_SERIAL.read();
    Serial.write(*(dest+read_len));
    read_len++;
    }
    return read_len;
    }
    /*********************************************************************/
    void initialize()
    {
    char cmd[] = {0xaa,0x0d|cameraAddr,0x00,0x00,0x00,0x00} ;
    unsigned char resp[6];
    Serial.print("initializing camera...");
    while (1)
    {
    sendCmd(cmd,6);
    if (readBytes((char *)resp, 6,1000) != 6)
    {
    Serial.print(".");
    continue;
    }
    if (resp[0] == 0xaa && resp[1] == (0x0e | cameraAddr) && resp[2] == 0x0d && resp[4] == 0 && resp[5] == 0)
    {
    if (readBytes((char *)resp, 6, 500) != 6) continue;
    if (resp[0] == 0xaa && resp[1] == (0x0d | cameraAddr) && resp[2] == 0 && resp[3] == 0 && resp[4] == 0 && resp[5] == 0) break;
    }
    }
    cmd[1] = 0x0e | cameraAddr;
    cmd[2] = 0x0d;
    sendCmd(cmd, 6);
    //Serial.println("\nCamera initialization done.");
    }
    /*********************************************************************/
    void preCapture()
    {
    char cmd[] = { 0xaa, 0x01 | cameraAddr, 0x00, 0x07, 0x00, PIC_FMT };
    unsigned char resp[6];
    while (1)
    {
    clearRxBuf();
    sendCmd(cmd, 6);
    if (readBytes((char *)resp, 6, 100) != 6) continue;
    if (resp[0] == 0xaa && resp[1] == (0x0e | cameraAddr) && resp[2] == 0x01 && resp[4] == 0 && resp[5] == 0) break;
    }
    }
    void Capture()
    {
    char cmd[] = { 0xaa, 0x06 | cameraAddr, 0x08, PIC_PKT_LEN & 0xff, (PIC_PKT_LEN>>8) & 0xff ,0};
    unsigned char resp[6];
    while (1)
    {
    clearRxBuf();
    sendCmd(cmd, 6);
    if (readBytes((char *)resp, 6, 100) != 6) continue;
    if (resp[0] == 0xaa && resp[1] == (0x0e | cameraAddr) && resp[2] == 0x06 && resp[4] == 0 && resp[5] == 0) break;
    }
    cmd[1] = 0x05 | cameraAddr;
    cmd[2] = 0;
    cmd[3] = 0;
    cmd[4] = 0;
    cmd[5] = 0;
    while (1)
    {
    clearRxBuf();
    sendCmd(cmd, 6);
    if (readBytes((char *)resp, 6, 100) != 6) continue;
    if (resp[0] == 0xaa && resp[1] == (0x0e | cameraAddr) && resp[2] == 0x05 && resp[4] == 0 && resp[5] == 0) break;
    }
    cmd[1] = 0x04 | cameraAddr;
    cmd[2] = 0x1;
    while (1)
    {
    clearRxBuf();
    sendCmd(cmd, 6);
    if (readBytes((char *)resp, 6, 100) != 6) continue;
    if (resp[0] == 0xaa && resp[1] == (0x0e | cameraAddr) && resp[2] == 0x04 && resp[4] == 0 && resp[5] == 0)
    {
    if (readBytes((char *)resp, 6, 1000) != 6)
    {
    continue;
    }
    if (resp[0] == 0xaa && resp[1] == (0x0a | cameraAddr) && resp[2] == 0x01)
    {
    picTotalLen = (resp[3]) | (resp[4] << 8) | (resp[5] << 16);
    //Serial.print("picTotalLen:");
    //Serial.println(picTotalLen);
    break;
    }
    }
    }
    }
    /*********************************************************************/
    void GetData()
    {
    unsigned int pktCnt = (picTotalLen) / (PIC_PKT_LEN - 6);
    if ((picTotalLen % (PIC_PKT_LEN-6)) != 0) pktCnt += 1;
    char cmd[] = { 0xaa, 0x0e | cameraAddr, 0x00, 0x00, 0x00, 0x00 };
    unsigned char pkt[PIC_PKT_LEN];
    char picName[] = "pic00.jpg";
    picName[3] = picNameNum/10 + '0';
    picName[4] = picNameNum%10 + '0';
    if (SD.exists(picName))
    {
    SD.remove(picName);
    }
    myFile = SD.open(picName, FILE_WRITE);
    if(!myFile){
    //Serial.println("myFile open fail...");
    }
    else{
    for (unsigned int i = 0; i < pktCnt; i++)
    {
    cmd[4] = i & 0xff;
    cmd[5] = (i >> 8) & 0xff;
    int retry_cnt = 0;
    retry:
    delay(10);
    clearRxBuf();
    sendCmd(cmd, 6);
    uint16_t cnt = readBytes((char *)pkt, PIC_PKT_LEN, 200);
    unsigned char sum = 0;
    for (int y = 0; y < cnt - 2; y++)
    {
    sum += pkt[y];
    }
    if (sum != pkt[cnt-2])
    {
    if (++retry_cnt < 100) goto retry;
    else break;
    }
    myFile.write((const uint8_t *)&pkt[4], cnt-6);
    //if (cnt != PIC_PKT_LEN) break;
    }
    cmd[4] = 0xf0;
    cmd[5] = 0xf0;
    sendCmd(cmd, 6);
    }
    myFile.close();
    picNameNum ++;
    }

  6. #36
    invite0852c877

    Re : Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement

    je vien de modifier encore tu le trouve pas mieux ?
    Code:
    #include <arduino.h>
    #include <SD.h>
    #include <SoftwareSerial.h>
    #define PIC_PKT_LEN 128 //data length of each read, dont set this too big because ram is limited
    #define PIC_FMT_VGA 7
    #define PIC_FMT_CIF 5
    #define PIC_FMT_OCIF 3
    #define CAM_ADDR 0
    #define CAM_SERIAL softSerial
    #define PIC_FMT PIC_FMT_VGA
    
    File myFile;
    SoftwareSerial softSerial(2, 3); //rx,tx (11-13 is used by sd shield)
    const byte cameraAddr = (CAM_ADDR << 5); // addr
    const int PIR_MOTION_SENSOR = A5; // the number of the pushbutton pin
    unsigned long picTotalLen = 0; // picture length
    int picNameNum = 0;
    /*********************************************************************/
    void setup()
    {
    Serial.begin(115200);
    CAM_SERIAL.begin(9600); 
    pinMode(PIR_MOTION_SENSOR, INPUT); 
    
    pinMode(4,OUTPUT); 
    if (!SD.begin(4)) {
    
    return;
    }
    
    initialize();
    }
    
    	
    
    
    void loop()
    {
       int n = 0;
    while(1){
    	int sensorValue = digitalRead(PIR_MOTION_SENSOR);
    	if(sensorValue == HIGH)  //when the sensor value is HIGH, someone is in here
    	{
      {
    Serial.println("\r\nbegin to take picture");
    delay(200);
    if (n == 0) preCapture();
    Capture();
    GetData();
    }
    Serial.print("\r\nTaking pictures success ,number : ");
    Serial.println(n);
    n++ ;
    }
    }
    }
    
    
    /*********************************************************************/
    void clearRxBuf()
    {
    while (CAM_SERIAL.available())
    {
    CAM_SERIAL.read();
    }
    }
    /*********************************************************************/
    void sendCmd(char cmd[], int cmd_len)
    {
    for (char i = 0; i < cmd_len; i++) CAM_SERIAL.write(cmd[i]);
    }
    /*********************************************************************/
    int readBytes(char *dest, int len, unsigned int timeout)
    {
    int read_len = 0;
    unsigned long t = millis();
    while (read_len < len)
    {
    while (CAM_SERIAL.available()<1)
    {
    if ((millis() - t) > timeout)
    {
    return read_len;
    }
    }
    *(dest+read_len) = CAM_SERIAL.read();
    Serial.write(*(dest+read_len));
    read_len++;
    }
    return read_len;
    }
    /*********************************************************************/
    void initialize()
    {
    char cmd[] = {0xaa,0x0d|cameraAddr,0x00,0x00,0x00,0x00} ;
    unsigned char resp[6];
    Serial.print("initializing camera...");
    while (1)
    {
    sendCmd(cmd,6);
    if (readBytes((char *)resp, 6,1000) != 6)
    {
    Serial.print(".");
    continue;
    }
    if (resp[0] == 0xaa && resp[1] == (0x0e | cameraAddr) && resp[2] == 0x0d && resp[4] == 0 && resp[5] == 0)
    {
    if (readBytes((char *)resp, 6, 500) != 6) continue;
    if (resp[0] == 0xaa && resp[1] == (0x0d | cameraAddr) && resp[2] == 0 && resp[3] == 0 && resp[4] == 0 && resp[5] == 0) break;
    }
    }
    cmd[1] = 0x0e | cameraAddr;
    cmd[2] = 0x0d;
    sendCmd(cmd, 6);
    //Serial.println("\nCamera initialization done.");
    }
    /*********************************************************************/
    void preCapture()
    {
    char cmd[] = { 0xaa, 0x01 | cameraAddr, 0x00, 0x07, 0x00, PIC_FMT };
    unsigned char resp[6];
    while (1)
    {
    clearRxBuf();
    sendCmd(cmd, 6);
    if (readBytes((char *)resp, 6, 100) != 6) continue;
    if (resp[0] == 0xaa && resp[1] == (0x0e | cameraAddr) && resp[2] == 0x01 && resp[4] == 0 && resp[5] == 0) break;
    }
    }
    void Capture()
    {
    char cmd[] = { 0xaa, 0x06 | cameraAddr, 0x08, PIC_PKT_LEN & 0xff, (PIC_PKT_LEN>>8) & 0xff ,0};
    unsigned char resp[6];
    while (1)
    {
    clearRxBuf();
    sendCmd(cmd, 6);
    if (readBytes((char *)resp, 6, 100) != 6) continue;
    if (resp[0] == 0xaa && resp[1] == (0x0e | cameraAddr) && resp[2] == 0x06 && resp[4] == 0 && resp[5] == 0) break;
    }
    cmd[1] = 0x05 | cameraAddr;
    cmd[2] = 0;
    cmd[3] = 0;
    cmd[4] = 0;
    cmd[5] = 0;
    while (1)
    {
    clearRxBuf();
    sendCmd(cmd, 6);
    if (readBytes((char *)resp, 6, 100) != 6) continue;
    if (resp[0] == 0xaa && resp[1] == (0x0e | cameraAddr) && resp[2] == 0x05 && resp[4] == 0 && resp[5] == 0) break;
    }
    cmd[1] = 0x04 | cameraAddr;
    cmd[2] = 0x1;
    while (1)
    {
    clearRxBuf();
    sendCmd(cmd, 6);
    if (readBytes((char *)resp, 6, 100) != 6) continue;
    if (resp[0] == 0xaa && resp[1] == (0x0e | cameraAddr) && resp[2] == 0x04 && resp[4] == 0 && resp[5] == 0)
    {
    if (readBytes((char *)resp, 6, 1000) != 6)
    {
    continue;
    }
    if (resp[0] == 0xaa && resp[1] == (0x0a | cameraAddr) && resp[2] == 0x01)
    {
    picTotalLen = (resp[3]) | (resp[4] << 8) | (resp[5] << 16);
    //Serial.print("picTotalLen:");
    //Serial.println(picTotalLen);
    break;
    }
    }
    }
    }
    /*********************************************************************/
    void GetData()
    {
    unsigned int pktCnt = (picTotalLen) / (PIC_PKT_LEN - 6);
    if ((picTotalLen % (PIC_PKT_LEN-6)) != 0) pktCnt += 1;
    char cmd[] = { 0xaa, 0x0e | cameraAddr, 0x00, 0x00, 0x00, 0x00 };
    unsigned char pkt[PIC_PKT_LEN];
    char picName[] = "pic00.jpg";
    picName[3] = picNameNum/10 + '0';
    picName[4] = picNameNum%10 + '0';
    if (SD.exists(picName))
    {
    SD.remove(picName);
    }
    myFile = SD.open(picName, FILE_WRITE);
    if(!myFile){
    //Serial.println("myFile open fail...");
    }
    else{
    for (unsigned int i = 0; i < pktCnt; i++)
    {
    cmd[4] = i & 0xff;
    cmd[5] = (i >> 8) & 0xff;
    int retry_cnt = 0;
    retry:
    delay(10);
    clearRxBuf();
    sendCmd(cmd, 6);
    uint16_t cnt = readBytes((char *)pkt, PIC_PKT_LEN, 200);
    unsigned char sum = 0;
    for (int y = 0; y < cnt - 2; y++)
    {
    sum += pkt[y];
    }
    if (sum != pkt[cnt-2])
    {
    if (++retry_cnt < 100) goto retry;
    else break;
    }
    myFile.write((const uint8_t *)&pkt[4], cnt-6);
    //if (cnt != PIC_PKT_LEN) break;
    }
    cmd[4] = 0xf0;
    cmd[5] = 0xf0;
    sendCmd(cmd, 6);
    }
    myFile.close();
    picNameNum ++;
    }

  7. #37
    invite1d577638

    Re : Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement

    C'est à dire "ça ne fonctionne pas" ?

    Il t'affiche "taking" ?
    Oui -> le capteur de mouvement fonctionne, pas la caméra.
    Non -> Le capteur ne fonctionne pas. Revoir son programme.

    Et le reste des messages apparaît dans le moniteur ? Genre "initializing camera..." ?

  8. #38
    invite0852c877

    Re : Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement

    ou taking ? il n'y a pas d'erreur sur le programme j'arrive à l'enregistré sur arduino,mais quand je fais la manip,il n'y a pas d'image apres 10 seconde de soit disant détection,je ne sais pas du tout si le programme fonctionne sur la manip

  9. #39
    invite0852c877

    Re : Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement

    oui il apparait sur le moniteur

  10. #40
    invite1d577638

    Re : Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement

    Le "talking" ?

    -> revoir le programme de la caméra, qui soit disant fonctionnait seul.

  11. #41
    invite0852c877

    Re : Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement

    Bon,on repart à 0 parce que je suis mélangé voici le programme qui fonctionne boutton poussoir + ma caméra

    // File SerialCamera_DemoCode_CJ-OV528.ino
    // 8/8/2013 Jack Shao
    // Demo code for using seeeduino or Arduino board to cature jpg format
    // picture from seeed serial camera and save it into sd card. Push the
    // button to take the a picture .
    // For more details about the product please check http://www.seeedstudio.com/depot/
    Code:
    #include <arduino.h>
    #include <SD.h>
    #include <SoftwareSerial.h>
    #define PIC_PKT_LEN 128 //data length of each read, dont set this too big because ram is limited
    #define PIC_FMT_VGA 7
    #define PIC_FMT_CIF 5
    #define PIC_FMT_OCIF 3
    #define CAM_ADDR 0
    #define CAM_SERIAL softSerial
    #define PIC_FMT PIC_FMT_VGA
    File myFile;
    SoftwareSerial softSerial(2, 3); //rx,tx (11-13 is used by sd shield)
    const byte cameraAddr = (CAM_ADDR << 5); // addr
    const int buttonPin = A5; // the number of the pushbutton pin
    unsigned long picTotalLen = 0; // picture length
    int picNameNum = 0;
    /*********************************************************************/
    void setup()
    {
    Serial.begin(115200);
    CAM_SERIAL.begin(9600); //cant be faster than 9600, maybe difference with diff board.
    pinMode(buttonPin, INPUT); // initialize the pushbutton pin as an input
    //Serial.println("Initializing SD card....");
    pinMode(4,OUTPUT); // CS pin of SD Card Shield
    if (!SD.begin(4)) {
    //Serial.print("sd init failed");
    return;
    }
    //Serial.println("sd init done.");
    initialize();
    }
    /*********************************************************************/
    void loop()
    {
    int n = 0;
    while(1){
    //Serial.println("\r\nPress the button to take a picture");
    while (digitalRead(buttonPin) == LOW); //wait for buttonPin status to HIGH
    //Serial.println("taking");
    if(digitalRead(buttonPin) == HIGH){
    delay(20); //Debounce
    if (digitalRead(buttonPin) == HIGH)
    {
    delay(200);
    if (n == 0) preCapture();
    Capture();
    //Serial.print("Saving picture...");
    GetData();
    }
    //Serial.print("\r\nDone ,number : ");
    //Serial.println(n);
    n++ ;
    }
    }
    }
    /*********************************************************************/
    void clearRxBuf()
    {
    while (CAM_SERIAL.available())
    {
    CAM_SERIAL.read();
    }
    }
    /*********************************************************************/
    void sendCmd(char cmd[], int cmd_len)
    {
    for (char i = 0; i < cmd_len; i++) CAM_SERIAL.write(cmd[i]);
    }
    /*********************************************************************/
    int readBytes(char *dest, int len, unsigned int timeout)
    {
    int read_len = 0;
    unsigned long t = millis();
    while (read_len < len)
    {
    while (CAM_SERIAL.available()<1)
    {
    if ((millis() - t) > timeout)
    {
    return read_len;
    }
    }
    *(dest+read_len) = CAM_SERIAL.read();
    Serial.write(*(dest+read_len));
    read_len++;
    }
    return read_len;
    }
    /*********************************************************************/
    void initialize()
    {
    char cmd[] = {0xaa,0x0d|cameraAddr,0x00,0x00,0x00,0x00} ;
    unsigned char resp[6];
    Serial.print("initializing camera...");
    while (1)
    {
    sendCmd(cmd,6);
    if (readBytes((char *)resp, 6,1000) != 6)
    {
    Serial.print(".");
    continue;
    }
    if (resp[0] == 0xaa && resp[1] == (0x0e | cameraAddr) && resp[2] == 0x0d && resp[4] == 0 && resp[5] == 0)
    {
    if (readBytes((char *)resp, 6, 500) != 6) continue;
    if (resp[0] == 0xaa && resp[1] == (0x0d | cameraAddr) && resp[2] == 0 && resp[3] == 0 && resp[4] == 0 && resp[5] == 0) break;
    }
    }
    cmd[1] = 0x0e | cameraAddr;
    cmd[2] = 0x0d;
    sendCmd(cmd, 6);
    //Serial.println("\nCamera initialization done.");
    }
    /*********************************************************************/
    void preCapture()
    {
    char cmd[] = { 0xaa, 0x01 | cameraAddr, 0x00, 0x07, 0x00, PIC_FMT };
    unsigned char resp[6];
    while (1)
    {
    clearRxBuf();
    sendCmd(cmd, 6);
    if (readBytes((char *)resp, 6, 100) != 6) continue;
    if (resp[0] == 0xaa && resp[1] == (0x0e | cameraAddr) && resp[2] == 0x01 && resp[4] == 0 && resp[5] == 0) break;
    }
    }
    void Capture()
    {
    char cmd[] = { 0xaa, 0x06 | cameraAddr, 0x08, PIC_PKT_LEN & 0xff, (PIC_PKT_LEN>>8) & 0xff ,0};
    unsigned char resp[6];
    while (1)
    {
    clearRxBuf();
    sendCmd(cmd, 6);
    if (readBytes((char *)resp, 6, 100) != 6) continue;
    if (resp[0] == 0xaa && resp[1] == (0x0e | cameraAddr) && resp[2] == 0x06 && resp[4] == 0 && resp[5] == 0) break;
    }
    cmd[1] = 0x05 | cameraAddr;
    cmd[2] = 0;
    cmd[3] = 0;
    cmd[4] = 0;
    cmd[5] = 0;
    while (1)
    {
    clearRxBuf();
    sendCmd(cmd, 6);
    if (readBytes((char *)resp, 6, 100) != 6) continue;
    if (resp[0] == 0xaa && resp[1] == (0x0e | cameraAddr) && resp[2] == 0x05 && resp[4] == 0 && resp[5] == 0) break;
    }
    cmd[1] = 0x04 | cameraAddr;
    cmd[2] = 0x1;
    while (1)
    {
    clearRxBuf();
    sendCmd(cmd, 6);
    if (readBytes((char *)resp, 6, 100) != 6) continue;
    if (resp[0] == 0xaa && resp[1] == (0x0e | cameraAddr) && resp[2] == 0x04 && resp[4] == 0 && resp[5] == 0)
    {
    if (readBytes((char *)resp, 6, 1000) != 6)
    {
    continue;
    }
    if (resp[0] == 0xaa && resp[1] == (0x0a | cameraAddr) && resp[2] == 0x01)
    {
    picTotalLen = (resp[3]) | (resp[4] << 8) | (resp[5] << 16);
    //Serial.print("picTotalLen:");
    //Serial.println(picTotalLen);
    break;
    }
    }
    }
    }
    /*********************************************************************/
    void GetData()
    {
    unsigned int pktCnt = (picTotalLen) / (PIC_PKT_LEN - 6);
    if ((picTotalLen % (PIC_PKT_LEN-6)) != 0) pktCnt += 1;
    char cmd[] = { 0xaa, 0x0e | cameraAddr, 0x00, 0x00, 0x00, 0x00 };
    unsigned char pkt[PIC_PKT_LEN];
    char picName[] = "pic00.jpg";
    picName[3] = picNameNum/10 + '0';
    picName[4] = picNameNum%10 + '0';
    if (SD.exists(picName))
    {
    SD.remove(picName);
    }
    myFile = SD.open(picName, FILE_WRITE);
    if(!myFile){
    //Serial.println("myFile open fail...");
    }
    else{
    for (unsigned int i = 0; i < pktCnt; i++)
    {
    cmd[4] = i & 0xff;
    cmd[5] = (i >> 8) & 0xff;
    int retry_cnt = 0;
    retry:
    delay(10);
    clearRxBuf();
    sendCmd(cmd, 6);
    uint16_t cnt = readBytes((char *)pkt, PIC_PKT_LEN, 200);
    unsigned char sum = 0;
    for (int y = 0; y < cnt - 2; y++)
    {
    sum += pkt[y];
    }
    if (sum != pkt[cnt-2])
    {
    if (++retry_cnt < 100) goto retry;
    else break;
    }
    myFile.write((const uint8_t *)&pkt[4], cnt-6);
    //if (cnt != PIC_PKT_LEN) break;
    }
    cmd[4] = 0xf0;
    cmd[5] = 0xf0;
    sendCmd(cmd, 6);
    }
    myFile.close();
    picNameNum ++;
    }
    je l'ai trouvé sur ce lien et sa fonctionne tres bien quand je l'ai testé manuellement

    http://translate.google.fr/translate...it&prev=search

  12. #42
    invite1d577638

    Re : Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement

    Ok, maintenant modifie ce programme de façon à y inclure le détecteur de présence...

  13. #43
    invite0852c877

    Re : Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement

    D'accord mais c'est sa qui ma casse la tete depuis 2jour,j'ai beau modifier 1000 fois sur le moniteur pour supprimer le boutton poussoir et inclure un détecteure de présence ,manuellement sa ne fonctionne pas,des fois l'effort ne paye pas :/

  14. #44
    invite1d577638

    Re : Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement

    Je t'ai mâché le boulot page précédente pour un programme quasi identique... Cesse de t'apitoyer sur ton sort, réfléchis un peu et code intelligemment ! C'est pas si dur...

    Identifie la fonction qui déclenche la prise de la photo, et arrange toi pour qu'elle soit appelée lors d'une détection de mouvement sur ton capteur...

  15. #45
    invite0852c877

    Re : Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement

    Bon,j'ai fais comme tu m'a dit sur la page précedente regard ce que sa donne,sa ne marche toujour pas mais je pense que c'est mieux
    Code:
     #include <arduino.h>
    #include <SD.h>
    #include <SoftwareSerial.h>
    #define PIC_PKT_LEN 128 //data length of each read, dont set this too big because ram is limited
    #define PIC_FMT_VGA 7
    #define PIC_FMT_CIF 5
    #define PIC_FMT_OCIF 3
    #define CAM_ADDR 0
    #define CAM_SERIAL softSerial
    #define PIC_FMT PIC_FMT_VGA
    File myFile;
    SoftwareSerial softSerial(2, 3); //rx,tx (11-13 is used by sd shield)
    const byte cameraAddr = (CAM_ADDR << 5); // addr
    const int PIR_MOTION_SENSOR = A5; // the number of the pushbutton pin
    unsigned long picTotalLen = 0; // picture length
    int picNameNum = 0;
    /*********************************************************************/
    void setup()
    {
    Serial.begin(115200);
    CAM_SERIAL.begin(9600); //cant be faster than 9600, maybe difference with diff board.
    pinMode(PIR_MOTION_SENSOR, INPUT); 
    //Serial.println("Initializing SD card....");
    pinMode(4,OUTPUT); // 
    if (!SD.begin(4)) {
    //Serial.print("sd init failed");
    return;
    }
    //Serial.println("sd init done.");
    initialize();
    }
    boolean isPeopleDetected()
    {
    	int sensorValue = digitalRead(PIR_MOTION_SENSOR);
    	if(sensorValue == HIGH)//if the sensor value is HIGH?
    	{
    		return true;//yes,return true
    	}
    	else
    	{
    		return false;//no,return false
    	}
    }
    void loop()
    {
      int n = 0;
      while(1){
        Serial.flush();
        
        while(isPeopleDetected() == LOW);     
        if(isPeopleDetected() == HIGH){
          delay(50);                               
          if(isPeopleDetected() == HIGH){
            delay(200);
            if(n == 0)Capture();
            Capture();
            GetData();
           }
          Serial.print("Taking pictures success ,number : ");
          Serial.println(n);
          n ++ ;
          }
        }
    }
    
    
    /*********************************************************************/
    void clearRxBuf()
    {
    while (CAM_SERIAL.available())
    {
    CAM_SERIAL.read();
    }
    }
    /*********************************************************************/
    void sendCmd(char cmd[], int cmd_len)
    {
    for (char i = 0; i < cmd_len; i++) CAM_SERIAL.write(cmd[i]);
    }
    /*********************************************************************/
    int readBytes(char *dest, int len, unsigned int timeout)
    {
    int read_len = 0;
    unsigned long t = millis();
    while (read_len < len)
    {
    while (CAM_SERIAL.available()<1)
    {
    if ((millis() - t) > timeout)
    {
    return read_len;
    }
    }
    *(dest+read_len) = CAM_SERIAL.read();
    Serial.write(*(dest+read_len));
    read_len++;
    }
    return read_len;
    }
    /*********************************************************************/
    void initialize()
    {
    char cmd[] = {0xaa,0x0d|cameraAddr,0x00,0x00,0x00,0x00} ;
    unsigned char resp[6];
    Serial.print("initializing camera...");
    while (1)
    {
    sendCmd(cmd,6);
    if (readBytes((char *)resp, 6,1000) != 6)
    {
    Serial.print(".");
    continue;
    }
    if (resp[0] == 0xaa && resp[1] == (0x0e | cameraAddr) && resp[2] == 0x0d && resp[4] == 0 && resp[5] == 0)
    {
    if (readBytes((char *)resp, 6, 500) != 6) continue;
    if (resp[0] == 0xaa && resp[1] == (0x0d | cameraAddr) && resp[2] == 0 && resp[3] == 0 && resp[4] == 0 && resp[5] == 0) break;
    }
    }
    cmd[1] = 0x0e | cameraAddr;
    cmd[2] = 0x0d;
    sendCmd(cmd, 6);
    //Serial.println("\nCamera initialization done.");
    }
    /*********************************************************************/
    void preCapture()
    {
    char cmd[] = { 0xaa, 0x01 | cameraAddr, 0x00, 0x07, 0x00, PIC_FMT };
    unsigned char resp[6];
    while (1)
    {
    clearRxBuf();
    sendCmd(cmd, 6);
    if (readBytes((char *)resp, 6, 100) != 6) continue;
    if (resp[0] == 0xaa && resp[1] == (0x0e | cameraAddr) && resp[2] == 0x01 && resp[4] == 0 && resp[5] == 0) break;
    }
    }
    void Capture()
    {
    char cmd[] = { 0xaa, 0x06 | cameraAddr, 0x08, PIC_PKT_LEN & 0xff, (PIC_PKT_LEN>>8) & 0xff ,0};
    unsigned char resp[6];
    while (1)
    {
    clearRxBuf();
    sendCmd(cmd, 6);
    if (readBytes((char *)resp, 6, 100) != 6) continue;
    if (resp[0] == 0xaa && resp[1] == (0x0e | cameraAddr) && resp[2] == 0x06 && resp[4] == 0 && resp[5] == 0) break;
    }
    cmd[1] = 0x05 | cameraAddr;
    cmd[2] = 0;
    cmd[3] = 0;
    cmd[4] = 0;
    cmd[5] = 0;
    while (1)
    {
    clearRxBuf();
    sendCmd(cmd, 6);
    if (readBytes((char *)resp, 6, 100) != 6) continue;
    if (resp[0] == 0xaa && resp[1] == (0x0e | cameraAddr) && resp[2] == 0x05 && resp[4] == 0 && resp[5] == 0) break;
    }
    cmd[1] = 0x04 | cameraAddr;
    cmd[2] = 0x1;
    while (1)
    {
    clearRxBuf();
    sendCmd(cmd, 6);
    if (readBytes((char *)resp, 6, 100) != 6) continue;
    if (resp[0] == 0xaa && resp[1] == (0x0e | cameraAddr) && resp[2] == 0x04 && resp[4] == 0 && resp[5] == 0)
    {
    if (readBytes((char *)resp, 6, 1000) != 6)
    {
    continue;
    }
    if (resp[0] == 0xaa && resp[1] == (0x0a | cameraAddr) && resp[2] == 0x01)
    {
    picTotalLen = (resp[3]) | (resp[4] << 8) | (resp[5] << 16);
    //Serial.print("picTotalLen:");
    //Serial.println(picTotalLen);
    break;
    }
    }
    }
    }
    /*********************************************************************/
    void GetData()
    {
    unsigned int pktCnt = (picTotalLen) / (PIC_PKT_LEN - 6);
    if ((picTotalLen % (PIC_PKT_LEN-6)) != 0) pktCnt += 1;
    char cmd[] = { 0xaa, 0x0e | cameraAddr, 0x00, 0x00, 0x00, 0x00 };
    unsigned char pkt[PIC_PKT_LEN];
    char picName[] = "pic00.jpg";
    picName[3] = picNameNum/10 + '0';
    picName[4] = picNameNum%10 + '0';
    if (SD.exists(picName))
    {
    SD.remove(picName);
    }
    myFile = SD.open(picName, FILE_WRITE);
    if(!myFile){
    //Serial.println("myFile open fail...");
    }
    else{
    for (unsigned int i = 0; i < pktCnt; i++)
    {
    cmd[4] = i & 0xff;
    cmd[5] = (i >> 8) & 0xff;
    int retry_cnt = 0;
    retry:
    delay(10);
    clearRxBuf();
    sendCmd(cmd, 6);
    uint16_t cnt = readBytes((char *)pkt, PIC_PKT_LEN, 200);
    unsigned char sum = 0;
    for (int y = 0; y < cnt - 2; y++)
    {
    sum += pkt[y];
    }
    if (sum != pkt[cnt-2])
    {
    if (++retry_cnt < 100) goto retry;
    else break;
    }
    myFile.write((const uint8_t *)&pkt[4], cnt-6);
    //if (cnt != PIC_PKT_LEN) break;
    }
    cmd[4] = 0xf0;
    cmd[5] = 0xf0;
    sendCmd(cmd, 6);
    }
    myFile.close();
    picNameNum ++;
    }

  16. #46
    jiherve

    Re : Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement

    Bonjour,
    ta fonction ispeopledetected retourne TRUE ou FALSE pas HIGH ou LOW!!
    JR
    l'électronique c'est pas du vaudou!

  17. #47
    invite1d577638

    Re : Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement

    Effectivement, tu t'y prends mal... Il n'y a pas à tatonner et à faire 50 versions...

    1-Donne moi, dans le code du capteur de présence, les lignes qui sont exécutées au moment où le capteur détecte une présence.
    2-Donne moi, dans le code de l'appareil photo, la fonction à appeler qui réalise la prise de vue (une ligne).

    3-Assemble les deux, et donne moi juste le code résultant de cet assemblage (pas le code en entier).

  18. #48
    invite0852c877

    Re : Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement

    1)
    Code:
    {
    	int sensorValue = digitalRead(PIR_MOTION_SENSOR);
    	if(sensorValue == HIGH)//if the sensor value is HIGH?
    	{
    		return true;//yes,return true
    	}
    	else
    	{
    		return false;//no,return false
    	}
    }
    2)

    Code:
    Capture();

    3)
    Code:
     int sensorValue = digitalRead(PIR_MOTION_SENSOR);
    	if(sensorValue == HIGH)//if the sensor value is HIGH? 
         {delay(200);
          Capture();
        }
    }
    Voila je m'y prend toujour mal ?
    Dernière modification par Antoane ; 07/04/2015 à 20h57. Motif: Réparation balises code

  19. #49
    invite1d577638

    Re : Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement

    1-Presque. Étudie la remarque de jiherve.

    2-Oui.

    3-Presque bon. Reprends 1 et conclue. (Et teste...)

  20. #50
    jiherve

    Re : Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement

    Re
    Progress is on the way!
    JR
    l'électronique c'est pas du vaudou!

  21. #51
    invite0852c877

    Re : Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement

    Code:
     int sensorValue = digitalRead(PIR_MOTION_SENSOR);
    	if(sensorValue == True)//if the sensor value is HIGH? 
         {delay(200);
          Capture();
        }
    }
    Voila ^^,je vais le tester demain,mais sa devrai faire quoi normalement avec ce petit code ?

  22. #52
    jiherve

    Re : Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement

    Re
    ben normalement si le test de tes variables est fait avec le bon type alors peut être que la bobinette cherrera?
    JR
    l'électronique c'est pas du vaudou!

  23. #53
    invite0852c877

    Re : Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement

    d'accord mais j'ai pas compris ,je vais pas le faire fonctionner avec ce petit code

  24. #54
    invite1d577638

    Re : Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement

    Fait marcher tes neurones... Le code 1 il est extrait d'où ? Reporte les modifications que tu as apportées à 1, c'est à dire le code 3, à l'endroit où tu as prélevé code 1... . Et compile l'ensemble !

  25. #55
    invite0852c877

    Re : Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement

    Oui j'ai compris sa ,mais je vois pas quoi mettre dans void setup,je vais pas mettre la meme chose vu que j'utilise un detecteur de mouvement et le code 3 je vais le mettre dans void loop non ? en faite je me mélange je pense

  26. #56
    invite1d577638

    Re : Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement

    dans le setup(), il doit y avoir le contenu du setup des 2 programmes...

  27. #57
    invite0852c877

    Re : Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement

    Comme sa ?

    Code:
    void setup()
    {
      Serial.begin(115200);
      CAM_SERIAL.begin(9600); 
        if(Pir_Motion_sensor,HIGH)
      //Serial.println("Initializing SD card....");
       
      if (!SD.begin(4)) {
        //Serial.print("sd init failed");
        return;
      }
      //Serial.println("sd init done.");
      initialize();
    }
    
    void loop () {
    int sensorValue = digitalRead(PIR_MOTION_SENSOR);
    	if(sensorValue == true)//if the sensor value is HIGH? 
         {delay(200);
          Capture();
        GetData () ;
        }
    }

  28. #58
    invite1d577638

    Re : Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement

    De loin et sans avoir le reste sous les yeux, ça semble pas mal.... Teste !

    PS : "comme ça" svp.

  29. #59
    invite0852c877

    Re : Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement

    D'accord ^^,mais bon le reste c'est la meme chose que le programme avec boutton poussoir non ?

  30. #60
    invite1d577638

    Re : Modifier le programme en remplacent le bouton poussir par un detecteur de mouvement

    Non... il faut que ton programme final contienne les fonctionnalités des 2 premiers programmes : celui de la photo et du détecteur...

Page 2 sur 3 PremièrePremière 2 DernièreDernière

Discussions similaires

  1. aide pour modifier un programme du pic
    Par invite8fabcf6d dans le forum Électronique
    Réponses: 8
    Dernier message: 03/02/2013, 19h55
  2. Probléme pour modifier un programme
    Par invitea883d7b1 dans le forum Électronique
    Réponses: 5
    Dernier message: 27/04/2011, 11h49
  3. modifier un detecteur de mouvement et de bruit
    Par inviteeefb43ab dans le forum Électronique
    Réponses: 3
    Dernier message: 15/01/2010, 18h22
  4. Modifier Un Programme de Pic
    Par invitef894bf53 dans le forum Électronique
    Réponses: 2
    Dernier message: 15/06/2009, 09h36
  5. Lumiere avec detecteur IR auto et bouton de forcage
    Par invitec1ef9e87 dans le forum Électronique
    Réponses: 3
    Dernier message: 01/11/2007, 18h39
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...