Jump in to Arduino 002
by admin 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.