Ciao lollo
Attualmente sto usando questo:
#include <LiquidCrystal.h>
#include <nikonIrControl.h>
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
int CameraIrPin = 13; // LED connected to digital pin 13
int configPin = 2; // collego il potenziometro al pin analogico 2
int selection = 0; // inizializzo la variabile di attesa
void setup() // run once, when the sketch starts
{
pinMode(CameraIrPin, OUTPUT); // sets the digital pin as output
}
void loop() // run over and over again
{
selection = analogRead(configPin);
cameraSnap(CameraIrPin);
delay(5000 + (selection * 24)); // selection va da 1 a 1023,
//quindi avrai un timer minimo 5 secondi e max 29 secondi
//(1023 *5 + 1000)
lcd.begin(16,2) ;
lcd.setCursor(0,0) ;
lcd.print("INT SCATTO NIKON");
lcd.setCursor(3,1);
lcd.print(( selection * 24 + 5000)/1000);
lcd.print(" secondi");
}
Tutto ok ma sarei più soddisfatto se riuscissi ad arrivare ad un risultato tipo questo
http://www.highonsolder.com/blog/2009/7/20/arduino-intervalometer-for-time-lapse-photography.html
La mia macchina non supporta l'entrata "shutter" via jack ma il codice ed il progetto è ben realizzato, anche se non sono capace di farlo.., ho provato a far girare il codice e la cosa che mi piace molto è la variazione sul display in tempo reale delle impostazioni, nel mio bisogna aspettare che ritorni l'output del potenziometro-
#include <LiquidCrystal.h> //library for LCD control
// LiquidCrystal display with:
// RS, EN, D4, D5, D6, D7
LiquidCrystal lcd(7, 8, 9, 10, 11, 12); //Set which LCD pins are used for data
//I-O setup
const int potentiometer = 0; //Potentiometer analog input pin
const int mode = 2; //Mode button input pin
const int shutter = 3; //Shutter relay output pin
//Variables
long interval = 5000; //time between shutter presses
long previousMillis = 0; //previous millisecond value
int hold = 1000; //time shutter should be held open
int M = 0; //Mode button state
int Mstate = 0; //previous Mode button state
int StartSet = 0; //Mode state
int pot; //potentiometer reading
long range; //potentiometer position
int count = 0; //picture count
int ModeSW = 0; //Low-High set mode toggle
//Press & Hold variables
#define debounce 50 // ms debounce period to prevent flickering when pressing or releasing the button
#define holdTime 2500 // ms hold period: how long to wait for press+hold event
long btnDnTime; // time the button was pressed down
long btnUpTime; // time the button was released
boolean ignoreUp = false; // whether to ignore the button release because the click+hold was triggered
//Initialize I-O
void setup() {
pinMode(shutter, OUTPUT);
pinMode(mode, INPUT);
lcd.begin(16, 2); //set LCD for 16 columns & 2 rows of display
}
void loop(){
M = digitalRead(mode); //read Mode button state
//Test for button pressed and store the down time
if (M == HIGH && Mstate == LOW && (millis() - btnUpTime) > long(debounce))
{
btnDnTime = millis();
}
//Test for button release and store the up time
if (M == LOW && Mstate == HIGH && (millis() - btnDnTime) > long(debounce))
{
if (ignoreUp == false) ModeSW = !ModeSW; //test if Low-High set mode should be toggled
else ignoreUp = false;
btnUpTime = millis();
}
//Test for button held down for longer than the hold time
if (M == HIGH && (millis() - btnDnTime) > long(holdTime))
{
StartSet = !StartSet; //toggle Set mode to Timing mode or vice versa
ignoreUp = true;
btnDnTime = millis();
}
Mstate = M;
//Test for Set Mode
if(StartSet == LOW){
lcd.home(); //set cursor to LCD column 1, row 1
lcd.print("Set Mode "); //display "Set Mode" on LCD
count = 0; //reset picture count
if(ModeSW == LOW) LowRange(); //test Low-High set mode
else HighRange();
}
//Test for Timing Mode
else{
lcd.home(); //set cursor to LCD column 1, row 1
lcd.print("Timing Mode"); //display "Timing Mode" on LCD
Shutter(); //call Shutter triggering function
lcd.setCursor(0, 1); //set cursor to LCD column 1, row 2
lcd.print(count); //display picture count number on LCD
lcd.print(" Pictures "); //display "Pictures" on LCD
}
}
//Low Set Mode function
long LowRange(){
long seconds; //shutter timing interval in seconds
pot = analogRead(potentiometer); //read potentiometer value
range = map(pot, 0, 1023, 12, 1); //divide potentiometer range into 5 second steps
interval = 5000 * range; //convert steps into 60 second range in milliseconds
seconds = interval/1000; //convert milliseconds to seconds
lcd.setCursor(0, 1); //set cursor to LCD column 1, row 2
lcd.print(seconds); //display shutter timing interval in seconds on LCD
lcd.print(" seconds "); //display "seconds" on LCD
return interval; //return shutter timing interval value to loop
}
//High Set Mode function
long HighRange(){
float minutes; //shutter timing interval in minutes
pot = analogRead(potentiometer); //read potentiomenter value
range = map(pot, 0, 1023, 20, 1); //divide pot range into 30 second steps
interval = 30000 * range; //convert steps into 10 minute range in milliseconds
minutes = interval/60000; //convert milliseconds into minutes
lcd.setCursor(0, 1); //set cursor to LCD column 1, row 2
lcd.print(minutes); //display shutter timing interval in minutes on LCD
lcd.print(" minutes "); //display "minutes on LCD
return interval; //return shutter timing interval value to loop
}
//Shutter triggering function
int Shutter(){
//Test that timing interval has passed
if((millis() - previousMillis) > interval){
previousMillis = millis(); //save the last time shutter was triggered
digitalWrite(shutter, HIGH); //trigger shutter relay coil
delay(hold); //wait preset shutter hold time
digitalWrite(shutter, LOW); //release shutter relay coil
++count; //increment picture count
return count; //return picture count value to loop
}
else return count;
}