arduino project

please i have a project with arduino mega to take an image with camera module
this is the code:

#include <camera_VC0706.h>
#include <SD.h>
#include <SoftwareSerial.h>

#define chipSelect 10
#if ARDUINO >= 100
SoftwareSerial cameraconnection = SoftwareSerial(2, 3);
#else
NewSoftSerial cameraconnection = NewSoftSerial(2, 3);
#endif
camera_VC0706 cam = camera_VC0706(&cameraconnection);


void setup() {

if  !defined(SOFTWARE_SPI)
if  defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
	if(chipSelect != 53) pinMode(53, OUTPUT); // SS on Mega




	pinMode(7,INPUT_PULLUP);
	Serial.begin(9600);
	Serial.println("VC0706 Camera test");

	
	if (!SD.begin(chipSelect)) {
		Serial.println("Card failed, or not present");
		return;
	}


	if (cam.begin()) {
		Serial.println("Camera Found:");
	} else {
		Serial.println("No camera found?");
		return;
	}

	char *reply = cam.getVersion();
	if (reply == 0) {
		Serial.print("Failed to get version");
	} else {
		Serial.println("-----------------");
		Serial.print(reply);
		Serial.println("-----------------");
	}



	cam.setImageSize(VC0706_640x480);
	//cam.setImageSize(VC0706_320x240);
	//cam.setImageSize(VC0706_160x120);

	uint8_t imgsize = cam.getImageSize();
	Serial.print("Image size: ");
	if (imgsize == VC0706_64 0x480) Serial.println("640x480");
	if (imgsize == VC0706_32 0x240) Serial.println("320x240");
	if (imgsize == VC0706_16 0x120) Serial.println("160x120");

	Serial.println("Get ready !");

}

void loop() {

	if(digitalRead(7)== 0) { 
		delay(10);
		if(digitalRead(7)== 0) {
			if (! cam.takePicture())
				Serial.println("Failed to snap!");
			else
				Serial.println("Picture taken!");
			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)) {
					break;
				}
			}
			File imgFile = SD.open(filename, FILE_WRITE);
			uint16_t jpglen = cam.frameLength();
			Serial.print(jpglen, DEC);
			Serial.println(" byte image");

			Serial.print("Writing image to ");
			Serial.print(filename);

			while (jpglen > 0) {
				
				uint8_t *buffer;
				uint8_t bytesToRead =  min(32, jpglen);
				buffer = cam.readPicture(bytesToRead);
				imgFile.write(buffer, bytesToRead);
				jpglen -= bytesToRead;
			}
			imgFile.close();
			Serial.println("...Done!");
	        cam.resumeVideo();
		}
	}
}

and this is the errors i have :

error: expected '(' before '!' token

Error compiling.

640x480, 320x240 or 160x120]

what's that?

..and now you've edited the original post and removed the offending line, but not posted your observations about the difference it made.

You've not done well.

ahmed2105:
and this is the errors i have :

error: expected '(' before '!' token

I don't know, but I would guess the compiler is trying to tell you there is a missing parenthesis somewhere. A hint is that it is just before an !.
A there is only 9 ! in your code it shouldn't take long to look at them all.

The full error message tells you at what line and character the error was detected. I suspect is was this line:

if  !defined(SOFTWARE_SPI)

Pre-processor directives should be on lines that start with '#'.

if (imgsize == VC0706_64 0x480)

What's that?

Whatever process you used to appropriate this sketch did a horrible job and threw out a LOT of important characters:
https://raw.githubusercontent.com/adafruit/Adafruit-VC0706-Serial-Camera-Library/master/examples/MotionDetect/MotionDetect.ino

// This is a motion-detect camera sketch using the Adafruit VC0706 library.
// On start, the Arduino will find the camera and SD card and turn
// on motion detection. If motion is detected, the camera will
// snap a photo, saving it to the SD card.
// Public domain.

// If using an Arduino Mega (1280, 2560 or ADK) in conjunction
// with an SD card shield designed for conventional Arduinos
// (Uno, etc.), it's necessary to edit the library file:
// libraries/SD/utility/Sd2Card.h
// Look for this line:
// #define MEGA_SOFT_SPI 0
// change to:
// #define MEGA_SOFT_SPI 1
// This is NOT required if using an SD card breakout interfaced
// directly to the SPI bus of the Mega (pins 50-53), or if using
// a non-Mega, Uno-style board.

#include <Adafruit_VC0706.h>
#include <SPI.h>
#include <SD.h>


// comment out this line if using Arduino V23 or earlier
#include <SoftwareSerial.h> 

// uncomment this line if using Arduino V23 or earlier
// #include <NewSoftSerial.h> 



// SD card chip select line varies among boards/shields:
// Adafruit SD shields and modules: pin 10
// Arduino Ethernet shield: pin 4
// Sparkfun SD shield: pin 8
// Arduino Mega w/hardware SPI: pin 53
// Teensy 2.0: pin 0
// Teensy++ 2.0: pin 20
#define chipSelect 10

// Pins for camera connection are configurable.
// With the Arduino Uno, etc., most pins can be used, except for
// those already in use for the SD card (10 through 13 plus
// chipSelect, if other than pin 10).
// With the Arduino Mega, the choices are a bit more involved:
// 1) You can still use SoftwareSerial and connect the camera to
// a variety of pins...BUT the selection is limited. The TX
// pin from the camera (RX on the Arduino, and the first
// argument to SoftwareSerial()) MUST be one of: 62, 63, 64,
// 65, 66, 67, 68, or 69. If MEGA_SOFT_SPI is set (and using
// a conventional Arduino SD shield), pins 50, 51, 52 and 53
// are also available. The RX pin from the camera (TX on
// Arduino, second argument to SoftwareSerial()) can be any
// pin, again excepting those used by the SD card.
// 2) You can use any of the additional three hardware UARTs on
// the Mega board (labeled as RX1/TX1, RX2/TX2, RX3,TX3),
// but must specifically use the two pins defined by that
// UART; they are not configurable. In this case, pass the
// desired Serial object (rather than a SoftwareSerial
// object) to the Adafruit_VC0706 constructor.

// Using SoftwareSerial (Arduino 1.0+) or NewSoftSerial (Arduino 0023 & prior):
#if ARDUINO >= 100
// On Uno: camera TX connected to pin 2, camera RX to pin 3:
SoftwareSerial cameraconnection = SoftwareSerial(2, 3);
// On Mega: camera TX connected to pin 69 (A15), camera RX to pin 3:
//SoftwareSerial cameraconnection = SoftwareSerial(69, 3);
#else
NewSoftSerial cameraconnection = NewSoftSerial(2, 3);
#endif
Adafruit_VC0706 cam = Adafruit_VC0706(&cameraconnection);

// Using hardware serial on Mega: camera TX conn. to RX1,
// camera RX to TX1, no SoftwareSerial object is required:
//Adafruit_VC0706 cam = Adafruit_VC0706(&Serial1);


void setup() {

 // When using hardware SPI, the SS pin MUST be set to an
 // output (even if not connected or used). If left as a
 // floating input w/SPI on, this can cause lockuppage.
#if !defined(SOFTWARE_SPI)
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
 if(chipSelect != 53) pinMode(53, OUTPUT); // SS on Mega
#else
 if(chipSelect != 10) pinMode(10, OUTPUT); // SS on Uno, etc.
#endif
#endif

 Serial.begin(9600);
 Serial.println("VC0706 Camera test");
 
 // see if the card is present and can be initialized:
 if (!SD.begin(chipSelect)) {
 Serial.println("Card failed, or not present");
 // don't do anything more:
 return;
 } 
 
 // Try to locate the camera
 if (cam.begin()) {
 Serial.println("Camera Found:");
 } else {
 Serial.println("No camera found?");
 return;
 }
 // Print out the camera version information (optional)
 char *reply = cam.getVersion();
 if (reply == 0) {
 Serial.print("Failed to get version");
 } else {
 Serial.println("-----------------");
 Serial.print(reply);
 Serial.println("-----------------");
 }

 // Set the picture size - you can choose one of 640x480, 320x240 or 160x120 
 // Remember that bigger pictures take longer to transmit!
 
 //cam.setImageSize(VC0706_640x480); // biggest
 cam.setImageSize(VC0706_320x240); // medium
 //cam.setImageSize(VC0706_160x120); // small

 // You can read the size back from the camera (optional, but maybe useful?)
 uint8_t imgsize = cam.getImageSize();
 Serial.print("Image size: ");
 if (imgsize == VC0706_640x480) Serial.println("640x480");
 if (imgsize == VC0706_320x240) Serial.println("320x240");
 if (imgsize == VC0706_160x120) Serial.println("160x120");


 // Motion detection system can alert you when the camera 'sees' motion!
 cam.setMotionDetect(true); // turn it on
 //cam.setMotionDetect(false); // turn it off (default)

 // You can also verify whether motion detection is active!
 Serial.print("Motion detection is ");
 if (cam.getMotionDetect()) 
 Serial.println("ON");
 else 
 Serial.println("OFF");
}




void loop() {
 if (cam.motionDetected()) {
 Serial.println("Motion!"); 
 cam.setMotionDetect(false);
 
 if (! cam.takePicture()) 
 Serial.println("Failed to snap!");
 else 
 Serial.println("Picture taken!");
 
 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)) {
 break;
 }
 }
 
 File imgFile = SD.open(filename, FILE_WRITE);
 
 uint16_t jpglen = cam.frameLength();
 Serial.print(jpglen, DEC);
 Serial.println(" byte image");
 
 Serial.print("Writing image to "); Serial.print(filename);
 
 while (jpglen > 0) {
 // read 32 bytes at a time;
 uint8_t *buffer;
 uint8_t bytesToRead = min(32, jpglen); // change 32 to 64 for a speedup but may not work with all setups!
 buffer = cam.readPicture(bytesToRead);
 imgFile.write(buffer, bytesToRead);

 //Serial.print("Read "); Serial.print(bytesToRead, DEC); Serial.println(" bytes");

 jpglen -= bytesToRead;
 }
 imgFile.close();
 Serial.println("...Done!");
 cam.resumeVideo();
 cam.setMotionDetect(true);
 }
}