/* iPhone Automatic Arduino Scanner. This program takes inputs from two LDRs. The value of the LDRs determine if they were covered. If they are covered, the Arduino sends a signal to the iPhone to take a picture. by Dr. Mohamed Qasem */ int photoResistorPin0 = 0; int photoResistorPin1 = 1; int takePicturePin = 2; int redDiodePin = 13; int yellowDiodePin = 12; int lightThreshold = 70; unsigned long waitBeforeScan = 3000; int calibration0, calibration1; boolean picWasTaken; boolean shouldTakePic; unsigned long startTime; void setup() { Serial.begin(9600); // Calibrate the light level, and initialize everything calibration0 = analogRead(photoResistorPin0); calibration1 = analogRead(photoResistorPin1); picWasTaken = false; shouldTakePic = false; pinMode(takePicturePin, OUTPUT); pinMode(redDiodePin, OUTPUT); pinMode(yellowDiodePin, OUTPUT); startTime = 0; } void loop() { // Read the photo resistor values. int lightLevel0 = analogRead(photoResistorPin0); int lightLevel1 = analogRead(photoResistorPin1); // set them to the range between 0 and 100 lightLevel0 = map(lightLevel0, 0, calibration0, 0, 100); lightLevel1 = map(lightLevel1, 0, calibration1, 0, 100); // If the both photo resistors have been covered, then we need to start timing before we take the picture. // The timer is there to get a change for the user to release the paper and adjust it if need be. if (lightLevel0 <= lightThreshold && lightLevel1 <= lightThreshold && shouldTakePic == false && picWasTaken == false) { startTime = millis(); // start the timer shouldTakePic = true; // Yes we should take a picture analogWrite(yellowDiodePin, 255); // turn on the yellow LED analogWrite(redDiodePin, 0); // turn off the red LED } // if we should be taking the picture and the the proper amount of time has elpased if (shouldTakePic == true && millis() - startTime > waitBeforeScan) { analogWrite(takePicturePin, 255); // Take the picture picWasTaken = true; // We have taken the picture. delay(200); // wait a couple of seconds (I did this because the relay is slow. I gave it time to react). analogWrite(takePicturePin, 0); // stop taking the picture shouldTakePic = false; // We shouldn't be taking anymore pictures untill the paper is removed. analogWrite(yellowDiodePin, 0); // Turn off the yellow LED. } // Check to see if both photo resistors have been uncovered. if (lightLevel0 > lightThreshold && lightLevel1 > lightThreshold) { shouldTakePic = false; // don't take a picture picWasTaken = false; // we haven't taken a picture analogWrite(yellowDiodePin, 0); // turn off the yellow LED analogWrite(redDiodePin, 0); // turn off the red LED } // If either of the LED is on and the other off, the trun on the red light and cancel taking picture. if ((lightLevel0 > lightThreshold && lightLevel1 <= lightThreshold) || (lightLevel0 <= lightThreshold && lightLevel1 > lightThreshold)) { analogWrite(redDiodePin, 255); analogWrite(yellowDiodePin, 0); shouldTakePic = false; } }