INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Canon EOS Trigger Box mit Menüsteuerung über Rotary
15.12.2013, 02:15
Beitrag #1
Video Canon EOS Trigger Box mit Menüsteuerung über Rotary
CANON EOS TRIGGERBOX

Aktuell laufendes Projekt einer Triggerbox für eine DSLR Cam mit I2C Display und einfacher Menübedienung über nur einen Rotary Encoder.

Die Triggerbox wird folgendes umfassen:

Auslösen über:
-Lichtsensor (Gewitterfotografie)
-Soundsensor
-Infrarot Bewegungsmelder
-IR Lichtschranke
-Manuell
-Interval
-Langzeitbelichtung


Weiterhin beinhaltet die Triggerbox:
-Anschlüsse für 1 - 2 Externblitz(e)
-die jeweiligen Sensoren wie oben aufgezählt
-integrierter Akku zum aufladen über USB oder Stromstecker
-Programmierschnittstelle für Updates (welche genau weiß ich noch nicht)
-I2C Display
-RTC
-Status LED´s welches Programm gerade abgerufen wurde
-Bildzähler über DSLR


Menüstruktur sieht wie folgt aus:


Startbildschirm---->Hauptmenü----->Programmauswahl---->Settingmenü der einzelnen Programme------>Hauptbildschirm mit Batterie, Uhr, Pic Status


Jetzt mal zum Code der bis jetzt geschafft wurde, es fehlt noch einiges, das liegt daran das ich noch einen Zähler suche für den Rotary zum einstellen der Schaltschwellen.

Wer Ideen hat die sich hier einpflegen lassen oder verbesserungen bewirken, bitte gerne bin für alles offen.

Hier der Code:

Code:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

//PINBELEGEUNG
//DIGITAL
#define SHUTTER_PIN 8    
#define FOCUS_PIN   4
#define PIEZO_PIN 3

//ANALOG
int LDR, LS, SOUND, PIR;
int LDRSCHW, LSSCHW, SOUNDSCHW, PIRSCHW;

//ROTARY
#define PINA 2
#define PINB 7
#define PUSHP 3
#define INTERRUPT 0  // PIN 2
#define INTERRUPTB 1  // PIN 3

volatile boolean turned;   // rotary was turned
volatile boolean fired;    // knob was pushed
volatile boolean up;  // true when turned cw

int counter = 0;
int CursorLine = 0;
int DisplayFirstLine = 0;
char* MenueLine[] = {" Licht oder Blitz"," Lichtschranke"," Akustik"," Bewegung"," Manuell"," Intervall"," Langzeitbelichtung"," Screentest"};
int MenueItems;


byte darrow[8] = {
  B00100,
  B00100,
  B00100,
  B00100,
  B10101,
  B01110,
  B00100,
};

byte uarrow[8] = {
  B00100,
  B01110,
  B10101,
  B00100,
  B00100,
  B00100,
  B00100,
};

byte rarrow[8] = {
  B00000,
  B00100,
  B00010,
  B11111,
  B00010,
  B00100,
  B00000,
};

byte larrow[8] = {
  B00000,
  B00100,
  B01000,
  B11111,
  B01000,
  B00100,
  B00000,
};

byte fullblock[8] = {
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
};

byte button[8] = {
  B11111,
  B10001,
  B10001,
  B10101,
  B10001,
  B10001,
  B11111,
};

// Interrupt Service Routine for a change to pushpin
void isrp ()
{
  if (!digitalRead (PUSHP))
    fired = true;
}  // end of isr

// Interrupt Service Routine for a change to encoder pin A
void isr ()
{
  if (digitalRead (PINA))
    up = digitalRead (PINB);
  else
    up = !digitalRead (PINB);
  turned = true;
}  // end of isr


void setup ()
{
  pinMode(SHUTTER_PIN, OUTPUT);
  pinMode(FOCUS_PIN, OUTPUT);

  digitalWrite (PINA, HIGH);     // enable pull-ups
  digitalWrite (PINB, HIGH);
  digitalWrite (PUSHP, HIGH);
  attachInterrupt (INTERRUPT, isr, CHANGE);   // interrupt 0 is pin 2
  attachInterrupt (INTERRUPTB, isrp, FALLING);   // interrupt 5 is pin 18

  lcd.begin (20,4);
  lcd.backlight();

  lcd.createChar(0, darrow);
  lcd.createChar(1, uarrow);
  lcd.createChar(2, larrow);
  lcd.createChar(3, rarrow);
  lcd.createChar(4, fullblock);
  lcd.createChar(5, button);

   /* lcd.setCursor(0,0);
   lcd.print("  DSLR Trigger Box  ");
   lcd.setCursor(0,1);
   lcd.print("Software Version 1.0");
   lcd.setCursor(0,2);
   lcd.print("     11-12-2013     ");
   lcd.setCursor(0,3);
   lcd.print("Written by Daniel A.");
   delay(3000);
   lcd.clear();
   lcd.setCursor(0, 0);
   lcd.print("INFO @ 0171/1745***");
  
   lcd.setCursor(0, 2);
   lcd.print("Starting EOS TRIGGER");
   lcd.setCursor(0, 3);
   for (int i=0; i<20; i++){
   lcd.write((byte)4);
   delay(150);} */

  MenueItems = sizeof(MenueLine)/sizeof(MenueLine[0]);
  lcd.clear();
  print_menue();

}  // end of setup

void loop ()
{
  if (turned)
  {
    if (up)
      move_up();
    else
      move_down();
    turned = false;
  }
  else if (fired)
  {
    selection();
    fired = false;
  }  // end if fired
}  // end of loop

void print_menue() {
  lcd.clear();
  for (int i=0;i<4;i++) {
    lcd.setCursor(0,i);
    lcd.print(MenueLine[DisplayFirstLine + i]);
  }
  lcd.setCursor(0,(CursorLine-DisplayFirstLine));
  lcd.write((byte)3);
}

void move_down() {
  if (CursorLine == (DisplayFirstLine+4-1)) {
    DisplayFirstLine++;
  }
  if (CursorLine == (MenueItems-1)) {
    CursorLine = 0;
    DisplayFirstLine = 0;
  }
  else {
    CursorLine=CursorLine+1;
  }
  print_menue();
}

void move_up() {
  if ((DisplayFirstLine == 0) & (CursorLine == 0)) {
    DisplayFirstLine = MenueItems-4;  
  }
  else if (DisplayFirstLine == CursorLine) {
    DisplayFirstLine--;
  }
  if (CursorLine == 0) {
    CursorLine = MenueItems-1;
  }
  else {
    CursorLine=CursorLine-1;
  }
  print_menue();
}



void selection() {

/*  lcd.clear();
   lcd.print("Menueauswahl Nr: ");
   lcd.print(CursorLine);
   lcd.setCursor(4,1);
   lcd.write((byte)0);
   lcd.print("        ");
   lcd.write((byte)0);
   delay(100);
   while(digitalRead(PUSHP)); */

  switch (CursorLine) {
  case 0:
    light_flashset();
    break;
  case 1:
    lsset();
    break;  
  case 2:
    soundset();
    break;  
  case 3:
    pirset();
    break;  
  case 4:
    manuellset();
    break;  
  case 5:
    intervallset();
    break;  
  case 6:
    bulbset();
    break;
case 7:
    screentest();
    break;  
  default:
    break;
  }
  print_menue();
}


void intervallset(){
}

void light_flashset(){
  
  delay(100);
  lcd.clear();
  lcd.setCursor(0, 0);  
  lcd.print("Light & Flash Set");
  do{
    ?
    ?
    ?
    ?
    LDRSCHW = counter;
    lcd.setCursor(0, 2);
    lcd.print("Ist:   ");
    lcd.print(analogRead(A0));
    lcd.print("    ");
    lcd.setCursor(0, 3);
    lcd.print("Soll:  ");
    lcd.print(LDRSCHW);
    lcd.print("    ");
    lcd.setCursor(12, 3);
  }
  while(digitalRead(PUSHP));
  {
    mainscreen();
  }
}
void soundset(){
  SOUND = analogRead(A1);
  if(LDR > SOUNDSCHW)
  {
    shutter_control();
  }
}


void pirset(){
  PIR = analogRead(A3);
  if(PIR > PIRSCHW)
  {
    shutter_control();
  }
}


void bulbset(){
  lcd.clear();
  lcd.print(" BULB MODE test");
  delay(2000);


}


void manuellset(){

}



void lsset(){
}


void shutter_control(){
}


void beep(int repeat)
{
  int i;
  for (i=0; i< repeat; i++)
  {
    tone(PIEZO_PIN,1750,50);
    delay(100);

  }
}
void resetpins(){
}

void mainscreen(){
  lcd.clear();
  lcd.setCursor(0,3);
    for (int i=0; i<20; i++){
  
      lcd.write((byte)4);
   delay(50);}
   lcd.setCursor(2,1);
   lcd.write((byte)0);
   lcd.print("Push The Button");
   lcd.setCursor(2,2);
   lcd.write((byte)5);
   while(digitalRead(PUSHP));
  lcd.noBlink();
  {
    print_menue();
  }
}

  void screentest(){
     delay(00);
     lcd.clear();
     lcd.blink();
for (int i=0; i<80; i++){
     lcd.write((byte)4);
     delay(50);}
for (int t=0; t<5; t++){
     lcd.noBacklight();
     delay(250);
     lcd.backlight();
     delay(250);
   }
   lcd.setCursor(2,1);
   lcd.write((byte)0);
   lcd.print("Push The Button");
   lcd.setCursor(2,2);
   lcd.write((byte)5);
   while(digitalRead(PUSHP));
  lcd.noBlink();
  lcd.backlight();
  {
    print_menue();
  }
}

MfG Daniel
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.02.2015, 17:17
Beitrag #2
RE: Canon EOS Trigger Box mit Menüsteuerung über Rotary
Hallo,


bin auch gerade dabei mir so eine Steuerung für die EOS zu bauen.

Ist das Projekt zwischenzeitlich schon weiter gekommen?
Besteht (noch) Interesse an einem Austausch?


Gruss Ralf
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.02.2015, 17:29
Beitrag #3
RE: Canon EOS Trigger Box mit Menüsteuerung über Rotary
(17.02.2015 17:17)Foto-Ralf schrieb:  Hallo,


bin auch gerade dabei mir so eine Steuerung für die EOS zu bauen.

Ist das Projekt zwischenzeitlich schon weiter gekommen?
Besteht (noch) Interesse an einem Austausch?


Gruss Ralf

Ich sag nur viele viele Baustellen die noch nich abgeschlossen sind...Big Grin

Aktuell oder besser gesagt letzter Stand ist der hier
Code:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

int s = 00;
int m = 00;
int h = 00;

    long startneu;
    long startalt;

//PINBELEGEUNG
//DIGITAL
#define FOCUS_PIN 12
#define SHUTTER_PIN 13

//ANALOG
int LDR, LS, SOUND, PIR;
int LDRSCHW, LSSCHW, SOUNDSCHW, PIRSCHW, INTERVALZEIT, BULBTIME;
unsigned long counterldr, countersound, counterls, counterpir, counterinterval, counterbulb;
int shotdelay = 1000;
int tp;
int timesetting;



//ROTARY
#define PINA 2
#define PINB 7
#define PUSHP 3
#define INTERRUPT 0  // PIN 2
#define INTERRUPTB 1  // PIN 3

volatile boolean turned;   // rotary was turned
volatile boolean fired;    // knob was pushed
volatile boolean up;  // true when turned cw

int CursorLine = 0;
int DisplayFirstLine = 0;
char* MenueLine[] = {" Lichtsensor        "," Lichtschranke      ",
" Soundsensor        "," Bewegungssensor    "," Speed Shot         ",
" Intervall          "," Bulb               "," Systemtest         "," Einstellungen      "};
int MenueItems;

byte BUZ_PIN = 11;    // Buzzer
byte BUZ = 1;


// Anzeige der Sonderzeichen
byte darrow[8] = {
  B00100,
  B00100,
  B00100,
  B00100,
  B10101,
  B01110,
  B00100,
};

byte uarrow[8] = {
  B00100,
  B01110,
  B10101,
  B00100,
  B00100,
  B00100,
  B00100,
};

byte rarrow[8] = {
  B00000,
  B00100,
  B00010,
  B11111,
  B00010,
  B00100,
  B00000,
};

byte larrow[8] = {
  B00000,
  B00100,
  B01000,
  B11111,
  B01000,
  B00100,
  B00000,
};

byte fullblock[8] = {
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
};

byte button[8] = {
  B11111,
  B10001,
  B10001,
  B10101,
  B10001,
  B10001,
  B11111,
};

// Interrupt Service Routine for a change to pushpin
void isrp ()
{
  if (!digitalRead (PUSHP))
    fired = true;
}  // end of isr

// Interrupt Service Routine for a change to encoder pin A
void isr ()
{
  if (digitalRead (PINA))
    up = digitalRead (PINB);
  else
    up = !digitalRead (PINB);
  turned = true;
}  // end of isr


void setup ()
{
  pinMode(FOCUS_PIN, OUTPUT);
  pinMode(SHUTTER_PIN, OUTPUT);
  pinMode(BUZ_PIN, OUTPUT);
  
  digitalWrite (PINA, HIGH);     // enable pull-ups
  digitalWrite (PINB, HIGH);
  digitalWrite (PUSHP, HIGH);
  attachInterrupt (INTERRUPT, isr, CHANGE);   // interrupt 0 is pin 2
  attachInterrupt (INTERRUPTB, isrp, FALLING);   // interrupt 5 is pin 18
  

  lcd.begin (20,4);
  lcd.backlight();

  lcd.createChar(0, darrow);
  lcd.createChar(1, uarrow);
  lcd.createChar(2, larrow);
  lcd.createChar(3, rarrow);
  lcd.createChar(4, fullblock);
  lcd.createChar(5, button);

   /*lcd.setCursor(0,0);
   lcd.print("  DSLR Trigger Box  ");
   lcd.setCursor(0,1);
   lcd.print("Software Version 2.2");
   lcd.setCursor(0,2);
   lcd.print("     15-12-2013     ");
   lcd.setCursor(0,3);
   lcd.print("Written by Daniel A.");
   delay(3000);
   lcd.clear();
   lcd.setCursor(0, 0);
   lcd.print("INFO @ 0171/1798546");
  
   lcd.setCursor(0, 2);
   lcd.print("Starting EOS TRIGGER");
   lcd.setCursor(0, 3);
   for (int i=0; i<20; i++){
   lcd.write((byte)4);
   delay(150);}*/

  MenueItems = sizeof(MenueLine)/sizeof(MenueLine[0]);
  lcd.clear();
  print_menue();

}  // end of setup

void loop ()
{
  if (turned)
  {
    if (up)
      move_up();
    else
      move_down();
    turned = false;
  }
  else if (fired)
  {
    selection();
    fired = false;
  }  // end if fired
}  // end of loop

void print_menue() {
  
  tp = 0;
  for (int i=0;i<4;i++) {
    lcd.setCursor(0,i);
    lcd.print(MenueLine[DisplayFirstLine + i]);
  }
  lcd.setCursor(0,(CursorLine-DisplayFirstLine));
  lcd.write((byte)3);
}

void move_down() {
  if (CursorLine == (DisplayFirstLine+4-1)) {
    DisplayFirstLine++;
  }
  if (CursorLine == (MenueItems-1)) {
    CursorLine = 0;
    DisplayFirstLine = 0;
  }
  else {
    CursorLine=CursorLine+1;
  }
  print_menue();
}

void move_up() {
  if ((DisplayFirstLine == 0) & (CursorLine == 0)) {
    DisplayFirstLine = MenueItems-4;  
  }
  else if (DisplayFirstLine == CursorLine) {
    DisplayFirstLine--;
  }
  if (CursorLine == 0) {
    CursorLine = MenueItems-1;
  }
  else {
    CursorLine=CursorLine-1;
  }
  print_menue();
}



void selection() {

/*  lcd.clear();
   lcd.print("Menueauswahl Nr: ");
   lcd.print(CursorLine);
   lcd.setCursor(4,1);
   lcd.write((byte)0);
   lcd.print("        ");
   lcd.write((byte)0);
   delay(100);
   while(digitalRead(PUSHP)); */

  switch (CursorLine) {
  case 0:
    light_flashset();
    break;
  case 1:
    lsset();
    break;  
  case 2:
    soundset();
    break;  
  case 3:
    pirset();
    break;  
  case 4:
    manuell();
    break;  
  case 5:
    intervallset();
    break;  
  case 6:
    bulbset();
    break;
case 7:
    screentest();
    break;
case 8:
    settings();
    break;      
  default:
    break;
  }
  print_menue();
}

//MENÜS UND SUBMENÜS

void intervallset(){
  
  delay(150);
  lcd.clear();
  lcd.setCursor(0, 0);  
  lcd.print("Interval Set");
  lcd.setCursor(0, 1);  
  lcd.print("Set 1 sec - 9999 sec");
  do{
       if (turned){
    if (up){
      counterinterval--;}
    else{
      counterinterval++;
    }
    turned = false;
  }
  
    INTERVALZEIT = counterinterval;
    lcd.setCursor(0, 3);
    lcd.print("Interval: ");
    lcd.print(INTERVALZEIT);
    lcd.print(" sec ");
    
  }
  while(digitalRead(PUSHP));
  {
    interval();
  }
}

void interval(){
  delay(150);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Interval Mode");
    lcd.setCursor(0,1);
      lcd.print("Intervaltime: ");
      lcd.print(INTERVALZEIT);
      lcd.print(" sec");
      
  do{

      startneu  = (millis() - startalt) / 1000;
   if ( startneu >= INTERVALZEIT){
     shutter();
     startalt = millis();
  }
      lcd.setCursor(0,2);
      lcd.print("Passed: ");
      lcd.print(startneu +1);
      lcd.print("  ");
      lcd.setCursor(0,3);
      lcd.print("Pics: ");
      lcd.print(tp);
      lcd.print(" ");
    }
    while(digitalRead(PUSHP));
{
  print_menue();
}
}



void light_flashset(){
  
  delay(150);
  lcd.clear();
  lcd.setCursor(0, 0);  
  lcd.print("Blitzsensor Set");
  lcd.setCursor(0, 1);  
  lcd.print("Setting von 0 - 1020");
  do{
       if (turned){
    if (up){
    counterldr-=20;}
    else{

     counterldr+=20;}
    }
    turned = false;
  
    LDRSCHW = counterldr;
    lcd.setCursor(0, 3);
    lcd.print("Ist: ");
    lcd.print(analogRead(A0));
    lcd.print(" ");
    lcd.setCursor(10, 3);
    lcd.print("Soll: ");
    lcd.print(LDRSCHW);
    lcd.print(" ");
    lcd.setCursor(12, 3);
  }
  while(digitalRead(PUSHP));
  {
    light();
  }
}


void light(){
  delay(150);
  lcd.clear();
lcd.setCursor(0,0);
    lcd.print("Light laeuft");
do{
  lcd.setCursor(0,1);
  lcd.print("Ist: ");
  lcd.print(analogRead(A0));
  lcd.print(" ");
  lcd.setCursor(10,1);
  lcd.print("Soll: ");
  lcd.print(LDRSCHW);
  lcd.print(" ");
  lcd.setCursor(0,2);
  lcd.print("Pics: ");
  lcd.print(tp);
  lcd.print(" ");
  if (analogRead(A0) >= LDRSCHW){
  shutter();
}
}
while(digitalRead(PUSHP));
{
print_menue();
tp = 0;
}
}


void soundset(){
  delay(150);
  lcd.clear();
  lcd.setCursor(0, 0);  
  lcd.print("Sound Set");
  lcd.setCursor(0, 1);  
  lcd.print("Setting von 0 - 1023");
  do{
       if (turned){
    if (up){
      countersound-=10;}
    else{
      countersound+=10;
    }
    turned = false;
  }
  
    SOUNDSCHW = countersound;
    lcd.setCursor(0, 2);
    lcd.print("Ist:   ");
    lcd.print(analogRead(A2));
    lcd.print("    ");
    lcd.setCursor(0, 3);
    lcd.print("Soll:  ");
    lcd.print(SOUNDSCHW);
    lcd.print("    ");
    lcd.setCursor(12, 3);
  }
  while(digitalRead(PUSHP));
  {
    sound();
  }
}

void sound(){
  delay(150);
  lcd.clear();
lcd.setCursor(0,0);
    lcd.print("Sound laeuft");
do{
  lcd.setCursor(0,1);
  lcd.print("Ist: ");
  lcd.print(analogRead(A2));
  lcd.print(" ");
  lcd.setCursor(10,1);
  lcd.print("Soll: ");
  lcd.print(SOUNDSCHW);
  lcd.print(" ");
  lcd.setCursor(0,2);
  lcd.print("Pics: ");
  lcd.print(tp);
  lcd.print(" ");
  if (analogRead(A2) >= SOUNDSCHW){
  shutter();
}
}
while(digitalRead(PUSHP));
{
print_menue();
tp = 0;
}
}

void pirset(){
  
}

void bulbset(){
  delay(150);
  lcd.clear();
  lcd.setCursor(0, 0);  
  lcd.print("Bulb Set");
  do{
    if (turned){
    if (up){
      counterbulb--;}
    else{
      counterbulb++;
    }
    turned = false;
  }
  
    BULBTIME = counterbulb;
    lcd.setCursor(0, 2);
    lcd.print("Time Set: ");
    lcd.print(BULBTIME);
    lcd.print(" sec   ");
  }
  while(digitalRead(PUSHP));
  {
   timesetting = BULBTIME;
    bulb();
  }
}


void bulb(){
delay(150);
  lcd.clear();
  lcd.setCursor(0, 0);  
  lcd.print("Bulb Mode");
  do{
     delay(1000);
        s = s+1;
        if(s>59){m=m+1; s=00;}
        if(m>59){h=h+1; m=00;}

  lcd.setCursor(0, 3);  
  lcd.print("Time: ");
  lcd.print(h);
  printDigits(m);
  printDigits(s);

  }
  while(digitalRead(PUSHP));
  {
    print_menue();
  }
}


void manuell(){
shutter();
}



void lsset(){
  delay(150);
  lcd.clear();
  lcd.setCursor(0, 0);  
  lcd.print("Lichtschranke Set");
  do{
       if (turned){
    if (up){
      counterls-=10;}
    else{
      counterls+=10;
    }
    turned = false;
  }
  
    LSSCHW = counterls;
    lcd.setCursor(0, 2);
    lcd.print("Ist:   ");
    lcd.print(analogRead(A1));
    lcd.print("    ");
    lcd.setCursor(0, 3);
    lcd.print("Soll:  ");
    lcd.print(LSSCHW);
    lcd.print("    ");
    lcd.setCursor(12, 3);
  }
  while(digitalRead(PUSHP));
  {
    ls();
  }
}

void ls(){
delay(150);
  lcd.clear();
lcd.setCursor(0,0);
    lcd.print("Lichtschranke");
do{
  lcd.setCursor(0,1);
  lcd.print("Ist: ");
  lcd.print(analogRead(A1));
  lcd.print(" ");
  lcd.setCursor(10,1);
  lcd.print("Soll: ");
  lcd.print(LSSCHW);
  lcd.print(" ");
  lcd.setCursor(0,2);
  lcd.print("Pics: ");
  lcd.print(tp);
  lcd.print(" ");
  if (analogRead(A1) <= LSSCHW){
  shutter();
}
}
while(digitalRead(PUSHP));
{
print_menue();
tp = 0;
}
}

  
void mainscreen(){
  lcd.clear();
  lcd.setCursor(0,0);
    for (int i=0; i<20; i++){
  
      lcd.write((byte)4);
   delay(50);}
   lcd.setCursor(2,1);
   lcd.write((byte)0);
   lcd.print("Push The Button");
   lcd.setCursor(2,2);
   lcd.write((byte)5);
   while(digitalRead(PUSHP));
  lcd.noBlink();
  {
    print_menue();
  }
}

void screentest(){
       for (int i=0; i<80; i++){
     lcd.write((byte)4);
     delay(50);}
for (int t=0; t<5; t++){
     lcd.noBacklight();
     delay(250);
     lcd.backlight();
     delay(250);
        
   lcd.setCursor(2,1);
   lcd.write((byte)0);
   lcd.print("Push The Button");
   lcd.setCursor(2,2);
   lcd.write((byte)5);}
  while(digitalRead(PUSHP));

    print_menue();
  }





void shutter(){
  
   digitalWrite(SHUTTER_PIN, HIGH);
    if (BUZ == 1) {
    digitalWrite(BUZ_PIN,HIGH);
    delay(30);
    digitalWrite(BUZ_PIN, LOW);
    delay(60);
    digitalWrite(BUZ_PIN,HIGH);
    delay(30);
    digitalWrite(BUZ_PIN, LOW);
  } else {
     digitalWrite(BUZ_PIN, LOW);              
  }
    digitalWrite(SHUTTER_PIN, LOW);
          
         delay(shotdelay);
       tp++;
}
  
  
  void settings(){
  delay(100);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Shotdelay: ");
  lcd.setCursor(0, 3);
  lcd.print("Buzzer: ");  
  do{
       if (turned){
    if (up){
      shotdelay-=100;}
    else{
      shotdelay+=100;
    }
    turned = false;
  }
  
    lcd.setCursor(11,0);
    lcd.print(shotdelay);
    lcd.print(" ");
  }
  while(digitalRead(PUSHP));
  delay(150);
  do{
       if (turned){
    if (up){
      BUZ=0;}
    else{
      BUZ=1;
    }
    turned = false;
  }
  lcd.setCursor(11,3);
    lcd.print(BUZ);
    lcd.print("");
  }
    while(digitalRead(PUSHP));
    print_menue();
  }



void printDigits(int digits)
{
    // utility function for digital clock display: prints preceding colon and leading 0
    lcd.print(':');
    if(digits < 10)
        lcd.print('0');
    lcd.print(digits);
}

Frag mich bitte aber nicht in wie fern der jetzt funktioniert, hab schon lange nix mehr dran gemacht. Gibt halt immernoch einige stellen wo ich hängen bleib weil ich nich weiter weiß.
Vielleicht kannst du ja noch was drauß machen. Schlecht wäre nicht eine RTC und Akkuüberwachung.
Werde hoffentlich auch da mal weiter machen können Sad

Gibts bei dir schon irgendwelche fortschritte oder steckst du noch in der planung?

Greez
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.02.2015, 00:05
Beitrag #4
RE: Canon EOS Trigger Box mit Menüsteuerung über Rotary
Ich versuche mich dafür gerade an einem Arduino Micro.

Hardwarekomponenten:
- Rotary Encoder
- 4 Taster mit R-Array an einem Analogeingang
- 2 Ausgänge (Kamera und Blitz) über Optokoppler mit LED zur Kontrolle
- 1 Eingang über Optokoppler
- 2 Status-LEDs
- 8x 7-Segmentanzeige zur Einstellung von Programmnummer und Zeiten

geplante Funktionen:
- Auslösung von Blitz nach Eingang und abgelaufener Verzögerungszeit (Highspeedaufnahmen)
- Auslösung von Kamera nach Eingang und abgelaufener Verzögerungszeit
- Auslösung der Kamera (Bulb), warten auf Eingang, Auslösung von Blitz nach abgelaufener Verzögerungszeit
- Langzeitbelichtung mit einstellbarer Belichtungszeit
- Toggle Bulb (zur Verwendung einer Funkfernsteuerung)
- Intervallaufnahmen

Die Funktionen haben in Testaufbauten einzeln schon funktioniert, jetzt bin ich gerade dabei diese auf die o. g. Hardware anzupassen und alles in ein Programm zusammenzupacken.

Ich hoffe mal, dass ich bis in 1, 2 Wochen das meisste fertig haben werde.

Gruss Ralf
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.02.2015, 14:22
Beitrag #5
RE: Canon EOS Trigger Box mit Menüsteuerung über Rotary
Cool, hört sich nach ner geschmeidigen sache an. Wink
Würd mich freuen wenn du mich auf dem Laufenden hälst.
Im Sommer werd ich mir mal nen 3D Drucker gönnen und will dann Gehäusesachen Drucken für sowas und dann das Projekt komplett abschließen.
Vielleicht lassen sich ja deine und meine Elemente irgendwie Fusionieren, das zum Schluss ein richtig brauchbares Gerät rauskommt.
Und dann ab auf ne Crowdfunding Plattform Big Grin
Wichtig is mir in meinem Code der Rotary und ein Display, Rotary eben zum schnellen Navigieren der einzelnen Setups.

Greez
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.02.2015, 14:58
Beitrag #6
RE: Canon EOS Trigger Box mit Menüsteuerung über Rotary
Hallo,
ist ja lustig…
Ich bin gerade dabei mir einen Fernauslöser für die G1 X zu programmieren.
Der kann,
-Starten nach Uhrzeit
-Vorlaufzeit
-Intervall mit Auslöseverzögerung
-Anzahl der Aufnahmen
-Restzeit
-Anzahl der verbleibenden Aufnahmen
-Starten nach externen Werten
-Starten nach externen Sensoren
-zünden einens externen SlaveBlitz

es gäbe noch tausend andere Sachen, die man machen könnte…
Zum Schalten nutze ich SignalRelais:
http://www.reichelt.de/index.html?ACTION...RT5%20DC5V

Die Sache langweilt mich aber ein wenig, weil man die Möglichkeiten der G1 X
nicht so richtig nutzen kann.

Das ihr den Shutter der EOS nicht so einfach betätigen könnt, das wißt ihr
sicherlich. Der hat wie die G1 X eine gewisse Auslöseverzögerung.
http://www.cfd.tu-berlin.de/~panek/foto/...emote.html

Viel Interessanter ist das hier, damit läßt sich die Kamera über den Arduino
fast vollständig fernbedienen.
Die Geschichte ist nicht ganz einfach, aber das wäre mal ne´Hausnummer zum
Kamera steuern.
http://www.gphoto.org/

Und hier mit dem Arduino:
http://www.circuitsathome.com/using-ptp-...ot-cameras

Gruß und Spaß
Andreas
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.02.2015, 15:33 (Dieser Beitrag wurde zuletzt bearbeitet: 21.02.2015 15:36 von Wampo.)
Beitrag #7
RE: Canon EOS Trigger Box mit Menüsteuerung über Rotary
Jup richtig, der Shutter Lag ist aber einstellbar über das Programm, Blitzfotografie mit auslösen wenn der Blitz da ist über einen LDR ist nicht möglich,dafür is ne reflex zu "LANGSAM" hab es schon mit Spiegelvorverriegelung versucht aber ist trotzdem noch etwas zu langsam.

Bleibt nur eine möglichkeit, das programm so schreiben das man einstellt wie lange maximal belichtet wird, aber eine abbruchbedingung falls der LDR ausgelöst wird. Um den Blitz einzufangen aber nicht über zu belichten.

Der Code hier ist zum Beispiel für "Echtzeitfotografie" gedacht, also wirklich erst auslösen wenn ein großer LDR unterschied festgestellt wird.
Hab den Grundcode mal irgendwo gefunden, abe hab nachträglich noch ein Analog Speed up hinzugefügt, der unterschied ist schon ein wenig sichtbar aber leider nicht zufrieden stellend. Außerdem hab ich noch n LCD hinzugefügt um zu sehen was Passiert, vielliecht verlangsamt auch das den ganzen prozess etwas.

Code:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

#define SHUTTER_PIN 5
#define LIGHTNING_TRIGGER_ANALOG_PIN A1
#define TRIGGER_THRESHHOLD 30

int lightningVal;

// Speed up AnalogRead
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif



void setup()
{
  // Speed up AnalogRead. Set prescale to 16
  // Dies ergibt ein ADC-Takt von 1 MHz und damit eine Abtastfrequenz von ~ 77KHz
  sbi(ADCSRA,ADPS2) ;
  cbi(ADCSRA,ADPS1) ;
  cbi(ADCSRA,ADPS0) ;
  
  pinMode(SHUTTER_PIN, OUTPUT);
  digitalWrite(SHUTTER_PIN, LOW);
  lcd.begin(20,4);

  lightningVal = analogRead(LIGHTNING_TRIGGER_ANALOG_PIN);
}

void loop()
{
  
  int newLightningVal = analogRead(LIGHTNING_TRIGGER_ANALOG_PIN);
lcd.setCursor(0,0);
lcd.print(lightningVal, DEC);
lcd.print("  ");
    
  if ((newLightningVal - lightningVal) > TRIGGER_THRESHHOLD)
  {
    digitalWrite(SHUTTER_PIN, HIGH);
    delay(1000); // May want to adjust this depending on shot type
    digitalWrite(SHUTTER_PIN, LOW);
    vorshutter();
  }

  lightningVal = newLightningVal;
}

void vorshutter(){
  delay(1000);
  digitalWrite(SHUTTER_PIN, HIGH);
    delay(500); // May want to adjust this depending on shot type
    digitalWrite(SHUTTER_PIN, LOW);}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.02.2015, 12:18
Beitrag #8
RE: Canon EOS Trigger Box mit Menüsteuerung über Rotary
Hallo,
ich hab schon die ganze Zeit überlegt, wie will der denn mit der KlinkenSteuerung
den Blitz der Kamera auslösen…
Man, man, man! Du willst den Blitz des Gewitter fotografieren.

Diese "Sensoren" für die BlitzFotografie haben alle einen Nachteil.
Sie kommen alle zu spät.
Also, es blitz-> Sensor löst aus-> Kamera macht Foto

Man müßte den Donner dedektieren und dann lange belichten.
Man könnte mit einem MSGEQ7 und einem Mikro den Donner auswerten. Hier könnte
man dann bei einer bestimmten Frequenz auslösen.

Also, Donner-> MSGEQ7-Frequenz auswerten-> Kamera Langzeitbelichtung-> Blitz
So hätte man den Blitz ganz auf dem Foto.
Nur so eine Idee.
Gruß und Spaß
Andreas
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Benachrichtigungen bei Wassereinbruch über Twitter mit Arduino! drimrim 1 729 23.06.2016 07:15
Letzter Beitrag: drimrim
  Grillregelung über PID MarkoM 1 1.884 04.12.2015 04:43
Letzter Beitrag: Scherheinz
  2 LEDs über serielle Schnittstelle steuern Bill 0 1.017 13.08.2015 16:04
Letzter Beitrag: Bill
  Zähler über RC-Fernsteuerung do1xxy 14 1.973 14.04.2015 20:44
Letzter Beitrag: do1xxy
Question [Problem] TFA Nexus über Arduino auf WeatherUnderground übertragen Alfonz_Ritzek 0 1.074 28.03.2015 10:42
Letzter Beitrag: Alfonz_Ritzek
Lightbulb LED Thermometer über WS2812b LED und Dallas DS18B20 Wampo 2 1.736 15.03.2015 17:45
Letzter Beitrag: Wampo
  Lüftersteuerung über Taupunkt daruel 17 10.587 23.08.2014 19:26
Letzter Beitrag: apex
  ArduSmartPilot: Smartphone steuert Modellflugzeug mit Arduino-Bordrechner über BT JueSchwager 1 2.991 19.02.2014 20:33
Letzter Beitrag: Sloompie
Video Mehrere Motoren über den PC ansteuern Lechs 1 2.340 27.10.2013 15:12
Letzter Beitrag: rkuehle

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste