Issue with multi-arduino compatible h/w layer

Hi Sir/Madam,

I’m trying to interface arduino compatible Camera and GSM module with Arduino Uno.

To keep the demo kit compact and good looking I preferred this layered/stack approach. I tested both individually with Arduino Uno and they are working. but when I stack them it is not working.

The Camera Module details:

The GSM module Details:

The code i used:

#include <VC0706_UART.h>

#include "SoftwareSerial.h"
#include <SD.h>
#include <SPI.h>
#define SS_SD  10

//use software serial
SoftwareSerial cameraconnection(2,3);//Rx, Tx
VC0706 cam = VC0706(&cameraconnection);
//use hardware serial
//VC0706 cam = VC0706(&Serial);

void setup() 
  Serial.print("AT+CMGS=\"+919884969933\"\r");    //Number to which you want to send the sms
  Serial.print("SMS- HELLO RALAK\r");   //The text of the message to be sent
    Serial.println("VC0706 Camera Snapshot Test ...");
    if (!SD.begin(SS_SD)) {
        Serial.println("SD Card init failed...");
    if(true == cameraInit()){
        Serial.println("camera init error...");


void loop() 
    //nothing to do

bool cameraInit()
    char *reply = cam.getVersion();
    if (reply == 0) {
        Serial.println("Failed to get version");
        return false;
    } else {
        return true;

void snapShot()
    Serial.println("Snap in 3 secs...");
    if (! cam.takePicture()){ 
        Serial.println("Failed to snap!");
    }else { 
        Serial.println("Picture taken!");
    // Create an image with the name IMAGExx.JPG
    char filename[13];
    strcpy(filename, "IMAGE00.JPG");
    for (int i = 0; i < 100; i++) {
        filename[5] = '0' + i/10;
        filename[6] = '0' + i%10;
        // create if does not exist, do not open existing, write, sync after write
        if (! SD.exists(filename)) {
    // Open the file for writing
    File imgFile =, FILE_WRITE);
    Serial.print("create ");
    uint16_t jpglen = cam.getFrameLength();
    Serial.print("wait to fetch ");
    Serial.print(jpglen, DEC);
    Serial.println(" byte image ...");
    int32_t time = millis();
    uint8_t *buffer;
    while(jpglen != 0){
         uint8_t bytesToRead = min(32, jpglen);
         buffer = cam.readPicture(bytesToRead);     
         imgFile.write(buffer, bytesToRead);
         //Serial.print("Read ");  Serial.print(bytesToRead, DEC); Serial.println(" bytes");
         jpglen -= bytesToRead;   
    time = millis() - time;
    Serial.print("Took "); Serial.print(time); Serial.println(" ms");

I hope there is no issue with the code and only with h/w.

Note : The GSM module supplier told it needs 12V…And I did. but is it still not sufficient to the third layer camera module?. but for Camera module i think only 5V sufficient.


Looks like the camera use Pin 9 for the camera chip select and the GSM shield uses it for a Power On signal. If you are using the serial (not SPI) interface to the camera you may need to cut a jumper to disconnect Pin 9.

" If you are using the serial (not SPI) interface to the camera you may need to cut a jumper to disconnect Pin 9." -> May i know how to do it as they are already prepared/soldered board?

One more observation is when i change the order of stack its working.. ie . lower layer uno, middle layer Camera and on top GSM. but its of no use as the camera will always snap the GSM board in close.

On the upper left of the schematic, Pin 9 is connected to the label "CMR". Toward the center of the schematic CMR is connected to a transistor through a jumper (or jumper and trace) labeled P6 and "SPI CS JUMPER". Your task is to find P6, probably near Pin 9, and cut through the copper traces that connect the two pads of the jumper. A sharp knife is usually the best tool for the job. I don't see a jumper in the one picture they provide so it may be on the bottom of the board.

WARNING: They appear to have a mistake in the schematic. The connections shown on Pins 11-14 should be on Pins 10-13. Since you aren't using the SPI interface that mistake doesn't matter to you.