snip–><–snip

Jump in to Arduino 002

by on Dec.10, 2010, under Uncategorized

I have been crazy busy at the moment with work  and organising for christmas holidays.

I have been hanging out every thursday at the site3 lab (makerspace) here in toronto. There are some good friendly folks here. I could learn alot from them.

I havent spent much time on the hardware, thou i have found a small box i want to try and fit the project in.

I have done a ton of code work, because i can do that on any computer i have access to with out the arduino connected.

Here is my latest iteration:

</code>
/*
simple program for setting my canon cameras shutter time.

I do long welding glass exposures and this will come in handy so i wont need to hold the trigger down for too long.
The arduino will do that for me.

*/
//start includes
//http://www.arduino.cc/en/Reference/LiquidCrystal
#include <LiquidCrystal.h>
//end includes
//
// start shutter pins
#define SHUTTER 12    //definesthe shutter control
#define TRIGGER 11    // defines the trigger button
#define UP      10    // defines the +1 second button
#define DOWN    9    // defines the -1 second button
#define MODE    8     // defines the -1 second button
#define SECOND  1000  // defines how long a second is
// end shutter pins
//
// start shutter vars
long curTime = 1000; // sets the current time to be one second at the start of the program
int val = 0;           // this is the trigger button control
int modeButton = 0;
int upButton = LOW;
int downButton = LOW;
int currentMode = 0; // modes 1:,2:,3:
// end shutter vars
// shutter timing //
int idx = 15;
int lastMode = 99;
//
//backup
//String shutterSettings[]   = {"10'","9'30\"","9'","8'30\"","8'","7'30\"","7'","6'30\"","6'","5'30\"","5'","4'30","4'","3'30\"","3'","2'30\"","2'","1'30\"","1'","55\"","50\"","45\"","40\"","35\"","30\"","25\"","20\"","15\"","13\"","10\"","8\"","6\"","5\"","4\"","3\"2","2\"5","2\"","1\"6","1\"3","1","0\"8","0\"6","0\"5","0\"4","0\"3","NONE","4","5","6","8","10","13","15","20","25","30","40","50","60","80","100","125","160","200","250","320","400","500","640","800","1000","1250","1600","2000","2500","3200","4000","5000","6400","8000"};
String shutterSettings[]   = {"10'","9'30\"","9'","8'30\"","8'","7'30\"","7'","6'30\"","6'","5'30\"","5'","4'30","4'","3'30\"","3'","2'30\"","2'","1'30\"","1'","55\"","50\"","45\"","40\"","35\"","30\"","25\"","20\"","15\"","13\"","10\"","8\"","6\"","5\"","4\"","3\"","2\"","1\""};
//long delaySettings[]       = {600000000, 570000000, 540000000, 510000000, 480000000, 450000000, 420000000, 390000000, 360000000, 330000000, 300000000, 0, 240000000, 210000000, 180000000, 150000000, 120000000, 90000000, 60000000, 55000000, 50000000, 45000000, 40000000, 35000000, 30000000, 25000000, 20000000, 15000000, 13000000, 10000000, 8000000, 6000000, 5000000, 4000000, 3000000, 2000000, 1000000};
long delaySettings[]       = {600000, 570000, 540000, 510000, 480000, 450000, 420000, 390000, 360000, 330000, 300000, 0, 240000,210000, 180000, 150000, 120000, 90000, 60000, 55000, 50000, 45000, 40000, 35000, 30000, 25000, 20000, 15000, 13000, 10000, 8000, 6000, 5000, 4000, 3000, 2000, 1000};
//
// start lcd setup
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
// end lcd setup
//
// setup
void setup()
{
 pinMode(SHUTTER,OUTPUT);
 pinMode(TRIGGER,INPUT);
 pinMode(UP,INPUT);
 pinMode(DOWN,INPUT);
 pinMode(MODE,INPUT);
 //
 //
 Serial.begin(9600);      // open the serial port at 9600 bps:
 //                       // so we can see what the arduino is doing before we attach the lcd screen later.
 //lcd pins
 //
 // set up the LCD's number of columns and rows:
 lcd.begin(16, 2);
 lcd.clear();
 // Print a message to the LCD.
 //lcd.print("Shutter Cnt v004");
 printFirstRow("Shutter Cnt v004");
}
//
//  fuction to clear the whole first row.
//
void clearFirstRow()
{
 lcd.setCursor(0, 0);
 lcd.print("                ");
}
//
//  fuction to clear the whole second row.
//
void clearSecondRow()
{
 lcd.setCursor(0, 1);
 lcd.print("                ");
}
//
//    a function fo print stuff on the first line
//
void printFirstRow(String toPrint)
{
 clearFirstRow();
 lcd.setCursor(0, 0);
 lcd.print(toPrint);
}
//
//    a function fo print stuff on the second line
//
void printSecondtRow(String toPrint)
{
 clearSecondRow();
 lcd.setCursor(0, 1);
 lcd.print(toPrint);
}
//
//  pull the delay and the lcd text from the arrays using the index.
//
long setLCDReturnDelay(int id)
{
 //
 String displayTime = shutterSettings[id];
 long delayTime = delaySettings[id];
 //
 //  convert the time to something easy to understand on the lcd
 displayTime = displayTime.replace("'","m");
 displayTime = displayTime.replace("\"","sec");
 printSecondtRow(displayTime);
 String strid = id;
 Serial.print("DEBUG: index:"+strid+"\n");
 Serial.print("DEBUG: lcd print:"+displayTime+"\n");
 //Serial.print("DEBUG: delay time:"+delayTime+"\n");
 return delayTime;
}
/*
TODO:

 get modes working.
 // long exposure
 // time lapse
 // time lapse + long exposure
 // sound trigger?
 maybe:
 single exposure
 time lapse + multi exposure
 sound trigger

 frre mode to set the trigger time, or canon defualt:
 30",25",20",15",13",10",8",6",5",4, 3"2,2"5,2",1"6,1"3,1" 0"8,0"6,0"5,0"4,0"3,,4,5,6,8,10,13,15,20,25,30,40,50,60,80,100,125,160,200,250,320,400,500,640,800,
 1000,1250,1600,2000,2500,3200,4000,5000,6400,8000,
 extras:
 40",45",50", 55",1', 1'30",2',2'30",3',3'30",4',4'30,5',5'30",6',6'30",7',7'30",8',8'30",9',9'30,10'
 String shutterSettings[] = {"10'","9'30","9'","8'30"","8'","7'30"","7'","6'30"","6'","5'30"","5'","4'30","4'","3'30"","3'","2'30"","2'","1'30"","1'","55"","50"","45"","40"","35"","30"","25"","20"","15"","13"","10"","8"","6"","5"","4"," 3"2","2"5","2"","1"6","1"3","1" 0"8","0"6","0"5","0"4","0"3","NONE","4","5","6","8","10","13","15","20","25","30","40","50","60","80","100","125","160","200","250","320","400","500","640","800","1000","1250","1600","2000","2500","3200","4000","5000","6400","8000"};

 get down/ negative time sorted out
 //  currently if it is less than 1000 it become a negative.
 // cant delay in negative time.
 //
 get counter working for trigger delay
 // currently delay = curtime.
 // should be a for loop ,
 // for every second
 print curseccond of total time
 delay second

 // display mode and times in real world seconds.
 // display high speed in mili seconds and canon shutter settings.
 // 1000 ms  || 1sec
 // 1ms || 1000/sec

*/
// the loop function
void loop()
{
 // get the vars.
 upButton = digitalRead(UP);
 downButton = digitalRead(DOWN);
 val = digitalRead(TRIGGER);
 modeButton = digitalRead(MODE);
 //
 //
 // mode settings:
 //
 if (modeButton == HIGH)
 {
 if (currentMode >= 2)  // 2 is currently the highest setting.
 {
 currentMode = 0;
 }
 else
 {
 currentMode++;
 }
 //
 //
 //
 if ( currentMode != lastMode)
 {
 if (currentMode == 0)
 {
 printFirstRow("1:Single Exp");
 }
 else if (currentMode == 1)
 {
 printFirstRow("2:Time Lapse");
 }
 else if (currentMode == 2)
 {
 printFirstRow("3:Sound Trigger");
 }
 lastMode = currentMode;
 String strCurMode = lastMode;
 Serial.print("DEBUG: current Mode:"+strCurMode+"\n");
 }
}
 //
 if (upButton == HIGH)
 {
 // adds one second on to current time
 //
 curTime = curTime + SECOND;
 //
 Serial.print("DEBUG: up button in high\n");
 //
 if (idx != 36)
 {
 idx++;
 }
 else
 {
 idx = 36;
 }
 Serial.print(idx);
 curTime = setLCDReturnDelay(idx);
 delay(200);
 }
 if (downButton == HIGH)
 {
 /* a little more complex.
 the shutter doesnt understand negative numbers.... doesnt work like that
 */
 Serial.print("DEBUG: down button high\n");
 //
 if (idx != 0)
 {
 idx--;
 }
 else
 {
 idx = 0;
 }
 Serial.print(idx);
 Serial.print(curTime);
 Serial.print("\n");
 //lcd.setCursor(0, 1);
 //lcd.print(curTime);
 curTime = setLCDReturnDelay(idx);
 delay(200);
 }
 //
 if (val == HIGH)
 {
 Serial.print("DEBUG: value is high\n");
 // takes the photo.
 String secConvert = (curTime /1000);
 lcd.setCursor(0, 1);
 lcd.print("open for "+secConvert+"s");
 Serial.print(curTime);
 Serial.print("\n");
 Serial.print(secConvert);
 Serial.print("\n");
 digitalWrite(SHUTTER,HIGH);
 //need to convert to milliseconds in stead of micro seconds, some numbers too high.
 delay(curTime);
 digitalWrite(SHUTTER,LOW);
 //
 lcd.setCursor(0, 1);
 lcd.print("shutter closed");
 delay(500);
 curTime = setLCDReturnDelay(idx);
 }
 // delays the loop for a tad
 delay(200);
 //Serial.print("DEBUG: end loop\n");
}
<code>

I have added some functions to help with clearing and adding data to my lcd.

Also 2 arrays that i treat like a python dictonary, like a key / value system.

Thanks to the folks on the arduino forum for the help.
I set up shutter times for everthing over a second, because those are the most usefull to me a t the moment.

Im going to start looking at the Aiko library for the next iteration.

.

.

I will try in the next few days to post some new photos.

No comments for this entry yet...

Leave a Reply


8 − = zero

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!