• Neuer Gutscheincode unseres Partners Schutzfolien24:
    DSLR-Forum2025
    Dauerhaft 10% Rabatt auf alle Displayschutzfolien und Schutzgläser der Eigenmarken
    "Upscreen", "Screenleaf", BROTECT" und "Savvies".
    Der Code ist für alle Geräteklassen gültig.
  • Mitmachen beim DSLR-Forum Fotowettbewerb Juli 2025.
    Thema: "Unscharf"

    Jeden Monat attraktive Gewinnprämien, gesponsert von unserem Partner PixelfotoExpress.
    Alle Infos zum Juli-Wettbewerb hier!
  • In eigener Sache!

    Liebe Mitglieder, liebe Besucher und Gäste
    ich weiß, es ist ein leidiges Thema, aber ich muss es ansprechen: Werbung, Werbeblocker und Finanzierung des Forums.
    Bitte hier weiterlesen ...

  • Nicht erreichbare Adressen im Benutzerkonto
    Wir bekommen zurzeit eine große Anzahl an E-Mails, die das System zum Beispiel als Benachrichtigungen an Nutzer verschickt,
    als unzustellbar zurück, weil z.B. die Adressen nicht erreichbar sind oder das Postfach gar nicht existiert.
    Stellt doch bitte sicher, dass die Benachrichtigungen, die ihr vom System erwartet, auch zugestellt werden können.
    Nicht erreichbare E-Mail-Adressen sind dazu wenig hilfreich.
    Danke!
WERBUNG

EOS Follow-Focus mit extras über USB (Arduino-Based)

Vielen Dank für's Lob :)

Würdest Du Deinen Code und Anschlatung fürs LCD mal hier posten ? Vielleicht können andere dann da anflanschen. Besonders würde mich interessieren, welches LCD und welche PIN's Du benuzt hast, so langsam wirds ja eng, wenn ma nalles aufeinanderstcken will.

Ich habe aktuell leider keine Zeit, da ich mich mit anderen Dinge beschäftige, kann Dir daher akut keine Antwort/Hilfe für die getproperty geben. Aus MagicLantern weiß ich aber, das je nach Optik die Entfernungsangaben mehr als "grob" sind. Bei meinem 17-40 ist es bei normalen Abständen nur 1,5 / 6m / unendlich ... also ziemlich sprunghaft. Vielleicht kannst Du in den ML-Quellen mal nach der property-ID gucken, wie die das machen.
 
Besteht auch die Möglichkeit statt dem USB-Host-Shield einfach einen Arduino Due zu benutzen? Dieser hat nämlich schon einen USB-Host-Controller integriert und man könnte die DSLR direkt anschließen.

Ich weiß jetzt aber nicht inwiefern sich das Programm bzw. die Libraries an den Due anpassen lassen.
 
Besteht auch die Möglichkeit statt dem USB-Host-Shield einfach einen Arduino Due zu benutzen? Dieser hat nämlich schon einen USB-Host-Controller integriert und man könnte die DSLR direkt anschließen.

Ich weiß jetzt aber nicht inwiefern sich das Programm bzw. die Libraries an den Due anpassen lassen.

Arduino Due ist die 32bit Platform, denke mal da muss einiges umgeschieben werden damit es passt.
Aber ich hab schonmal ein USB-Shield für die Pro-Mini's gesehen, das würde die sache recht kompakt machen :)


Gruß,
Olli

FCG94IMGSOEMMSK.LARGE.jpg

http://www.instructables.com/id/Building-the-YaNis-EOS-Controller/

http://www.circuitsathome.com/products-page/arduino-shields/usb-host-shield-for-arduino-pro-mini
 
Hallo zusammen,


nachdem ich das Netz schon einige Zeit nach einer Fernsteuerlösung (Fotografieren nicht Filmen) mit mäßigem Erfolg durchsucht habe, bin ich in diesem Thread gelandet.

Ich bin auf der Suche nach einer Lösung zum Fernsteuern möglichst vieler Funktionen.
Als unbedingt erforderlich (Minimum) sehe ich für mich an:
- Blende
- Zeit
- Betriebsart (Auto, Manuell, evtl. Blenden- u. Zeitautomatik)
- Weißabgleich
- Blitz
- ISO
- Auslösen

Besonders das letzte Bild hat es mir angetan, da ich nur ein begrenztes Platzangebot habe. Die Schaltung muß in ein Unterwassergehäuse passen, dass ich aus praktischen Gründen nicht zu groß fräsen will (Die anfängliche Kombination aus Arduino mit USB-Host ist mir zu groß) und es auch nicht kann, da die Portalfräse bzgl. der zu bearbeitenden Aluklötze begrenzt ist.

Das Überfliegen dieses Threads lässt mich hoffen, dass meine Wünsche hier Wirklichkeit werden könnten.
Ich bräuchte daher nur die Info, ob meine Punkte machbar sind.

Die Programmierung sollte ich hin bekommen, da ich in der Vergangenheit schon einiges mit ATMegas entwickelt habe. Bei dieser Bastelei sollen auch vom Bediener zu bestimmende Makros einfließen, so dass bestimmte Grundeinstellungen über einen Tastendruck erfolgen können.

Ich hoffe, hier liest noch jemand mit und kann mit meine Frage beantworten.

Es handelt sich übrigens um eine 60D, was passen sollte.


Schönen Gruß und besten Dank

Markus
 
Hi

ich habe auch gerade mit Begeisterung das Projekt hier überflogen und möchte es unbedingt nachbauen.

Jetzt tut sich mir nur 1 Hauptfrage auf, läuft das ganze auch mit einer EOS 700D ?

Einen Arduino-Nano + diverser verschiedener Encoder habe ich hier noch rumliegen und würde mir dann nur ein USB-Shield zulegen, aber bevor ich jetzt unnötig Geld zum Fenster rausblase möchte ich halt wissen, ob das Projekt auch mit meiner Kamera läuft...

Lieben Gruß
 
Hi

ich habe auch gerade mit Begeisterung das Projekt hier überflogen und möchte es unbedingt nachbauen.

Jetzt tut sich mir nur 1 Hauptfrage auf, läuft das ganze auch mit einer EOS 700D ?

Einen Arduino-Nano + diverser verschiedener Encoder habe ich hier noch rumliegen und würde mir dann nur ein USB-Shield zulegen, aber bevor ich jetzt unnötig Geld zum Fenster rausblase möchte ich halt wissen, ob das Projekt auch mit meiner Kamera läuft...

Lieben Gruß

Geht mit allen neueren Modellen. Die weitestgehend einzige Voraussetzung für die Fokussteuerung ist, dass die Kamera LiveView haben muss.
 
Klasse, Danke für die Antwort.

Mein USB-Shield kommt morgen, habe mir dieses hier geordert (Herstellerlink hier) und hoffe doch, das es kompatibel ist.

Werde dann weiter berichten ;)
 
Soderle, das USB-Shield kam heut und ich hab das ganze jetzt schnell mal auf meinem Laborsteckboard aufgebaut, aber so richtig will das Ganze noch nicht.

Record-Taster geht, sowie auch der Zoom-Umschalter.
Focus geht überhaupt nicht, ISO nur von Auto bis 100, und bei den Blenden überspringt er viele Werte.

Ich werde das morgen in aller Ruhe nochmal neu verkabeln und dann weiterschauen :)

Wo gibts denn die Hex-Tabellen für die entsprechenden Funktionen zum Programmieren ?

Die OKII-Files, die Ihr hier als Anhänge habt sind leider alle down.

Lieben Gruß
MTE
 
So ich nun wieder :)

Bin mal nen kleinen Schritt weiter gekommen...

die ISO-Einstellungen musste ich ändern, damit meine Kamera die Werte auch akzeptiert...

Code:
 // meine ISO  Einstellungen Auto, 100, 200, 400, 800, 1600, 3200
      uint8_t iso_values[8] = {0, 0x48, 0x50, 0x58, 0x60, 0x68, 0x70};

...bis ISO 3200 schaltet der Aufbau jetzt mal, ich hab mir jetz aber 2 Std. die Finger wund gegoogelt und komme einfach nicht darauf, wie ihr die HEX-Werte austüftelt (also z.B für ISO400 -> 0x50)...ich bräuchte noch die Werte für ISO6400 und 12800(H)...

Für einen kleinen Denkanstoß wäre ich sehr dankbar, dann kann ich mich nun auch an die Blende und Verschlußzeiten wagen.

Das Fokusproblem gehe ich dann ganz am Schluß an.

Grüßle
MTE
 
So ich nun wieder :)

Bin mal nen kleinen Schritt weiter gekommen...

die ISO-Einstellungen musste ich ändern, damit meine Kamera die Werte auch akzeptiert...

Code:
 // meine ISO  Einstellungen Auto, 100, 200, 400, 800, 1600, 3200
      uint8_t iso_values[8] = {0, 0x48, 0x50, 0x58, 0x60, 0x68, 0x70};

...bis ISO 3200 schaltet der Aufbau jetzt mal, ich hab mir jetz aber 2 Std. die Finger wund gegoogelt und komme einfach nicht darauf, wie ihr die HEX-Werte austüftelt (also z.B für ISO400 -> 0x50)...ich bräuchte noch die Werte für ISO6400 und 12800(H)...

Für einen kleinen Denkanstoß wäre ich sehr dankbar, dann kann ich mich nun auch an die Blende und Verschlußzeiten wagen.

Das Fokusproblem gehe ich dann ganz am Schluß an.

Grüßle
MTE

Hättste halt gleich den richtigen gefragt :cool:

Bitte sehr, die komplette Liste:
Code:
uint8_t iso_values[28] =
    {
    //  Auto     6    12     25     50    100     125
        0x00, 0x28, 0x30,  0x38,  0x40,  0x48,   0x4b,
    //   160   200   250    320    400    500     640
        0x4d, 0x50, 0x53,  0x55,  0x58,  0x5b,   0x5d
    //   800  1000  1250   1600   2000   2500    3200
        0x60, 0x63, 0x65,  0x68,  0x6B,  0x6D,   0x70,
    //  4000  5000  6400  12800  25600  51200  102400
        0x73, 0x75, 0x78,  0x80,  0x88,  0x90,   0x98
    };
 
Yayyy Danke, Funzt Tiptop !!!! :top:

Binde grad noch die Verschlußzeit mit ein...

Code:
    uint8_t shutterspeed_values[10] = {0, 0x25 };
   if (encoder3Pos > 0) { 
      if (shutterspeed_mode < 2) { 
        shutterspeed_mode++; 
        Eos.SetProperty(EOS_DPC_ShutterSpeed, 
        shutterspeed_values[shutterspeed_mode]); 
      } 
      delay(50); 
    } 
    else if (encoder3Pos < 0) { 
      if (shutterspeed_mode > 0) { 
        shutterspeed_mode--; 
        Eos.SetProperty(EOS_DPC_ShutterSpeed, 
        shutterspeed_values[shutterspeed_mode]); 
      } 
      delay(50); 
    } 
    encoder3Pos = 0;

bevor ich jetzt den Arduino 300x flashe :D hättest du mir für die Shutterwerte auch noch die Hex-Daten ?

Bzw. kannst Du mir sagen woher Du die hast ?? :)

Grüßle
 
Anbei noch die Werte für Belichtungszeit und Blende.

Ich bin bei Canon als Entwickler registriert und habe daher Zugriff auf das SDK.
Unter Windows nutze ich die Canon Programmierschnittstelle schon seit Jahren (siehe z.B. hier: http://www.vulpessoft.de/shareware/dslrmaster).
Obwohl ich auch viel mit dem Arduino zugange bin, habe ich mit diesem in dieser Richtung jedoch bisher noch nichts gemacht.

Zeiten:
Code:
0x10:   30"
0x13:   25"
0x14:   20"
0x15:   20"
0x18:   15"
0x1B:   13"
0x1C:   10"
0x1D:   10"
0x20:   8"
0x23:   6"
0x24:   6"
0x25:   5"
0x28:   4"
0x2B:   3"2
0x2C:   3"
0x2D:   2"5
0x30:   2"
0x33:   1"6
0x34:   1"5
0x35:   1"3
0x38:   1"
0x3B:   0"8
0x3C:   0"7
0x3D:   0"6
0x40:   0"5
0x43:   0"4
0x44:   0"3
0x45:   0"3
0x48:   1/4
0x4B:   1/5
0x4C:   1/6
0x4D:   1/6
0x50:   1/8
0x53:   1/10
0x54:   1/10
0x55:   1/13
0x58:   1/15
0x5B:   1/20
0x5C:   1/20
0x5D:   1/25
0x60:   1/30
0x63:   1/40
0x64:   1/45
0x65:   1/50
0x68:   1/60
0x6B:   1/80
0x6C:   1/90
0x6D:   1/100
0x70:   1/125
0x73:   1/160
0x74:   1/180
0x75:   1/200
0x78:   1/250
0x7B:   1/320
0x7C:   1/350
0x7D:   1/400
0x80:   1/500
0x83:   1/640
0x84:   1/750
0x85:   1/800
0x88:   1/1000
0x8B:   1/1250
0x8C:   1/1500
0x8D:   1/1600
0x90:   1/2000
0x93:   1/2500
0x94:   1/3000
0x95:   1/3200
0x98:   1/4000
0x9B:   1/5000
0x9C:   1/6000
0x9D:   1/6400
0xA0:   1/8000

Blende:
Code:
0x08:   1.0
0x0B:   1.1
0x0C:   1.2
0x0D:   1.2
0x10:   1.4
0x13:   1.6
0x14:   1.8
0x15:   1.8
0x18:   2.0
0x1B:   2.2
0x1C:   2.5
0x1D:   2.5
0x20:   2.8
0x23:   3.2
0x24:   3.5
0x25:   3.5
0x28:   4.0
0x2B:   4.5
0x2C:   4.5
0x2D:   5.0
0x30:   5.6
0x33:   6.3
0x34:   6.7
0x35:   7.1
0x38:   8.0
0x3B:   9.0
0x3C:   9.5
0x3D:   10
0x40:   11
0x43:   13
0x44:   13
0x45:   14
0x48:   16
0x4B:   18
0x4C:   19
0x4D:   20
0x50:   22
0x53:   25
0x54:   27
0x55:   29
0x58:   32
0x5B:   36
0x5C:   38
0x5D:   40
0x60:   45
0x63:   51
0x64:   54
0x65:   57
0x68:   64
0x6B:   72
0x6C:   76
0x6D:   80
0x70:   91
 
Gei-lo-mat :top:

Vielen lieben Dank dafür, es geht jetzt alles bis auf den Fokus...

Kann es evtl sein, das er nicht funktioniert, weil mein Objektiv ein STM ist (EF-S 18-135mm 1:3,5-5,6 IS STM) ?

Vermutlich ne doofe Frage, bin in der Hinsicht noch blutiger Anfänger, ist meine erste DSLR und diese ist 5 Tage alt :D

Ich spiel jetzt mal ein bisschen mit dem delay rum und sehe ob sich da was tut...
 
Ich komme nicht weiter, die wichtigste Funktion (Focus) will einfach nicht :grumble:

...ich poste mal meinen aktuellen Code.

Zeilen und Abschnitte, die ich hinzugefügt/verändert habe, sind mit einer langen Reihe =========== markiert ;)

Code:
// INCLUDES 
#include <canoneos.h> 
#include <usbhub.h> 
#include <Bounce.h> 

//DEFINES ENCODER 
#define encoder0PinA  3    // Fokus, Digitalport 3 
#define encoder0PinB  2    // Fokus, Digitalport 2 
#define encoder1PinA  A3   // ISO, Analogport 3 
#define encoder1PinB  A2   // ISO, Analogport 2 
#define encoder2PinA  A0   // Blende, Analogport 0 
#define encoder2PinB  A1   // Blende, Analogport 1 
#define encoder3PinA  A4   // Verschlußzeit, Analogport 4 ================
#define encoder3PinB  A5   // Verschlußzeit, Analogport 5 ========================

//DEFINES SWITCHE/BUTTONS 
#define sw0Pin        4    // left switch  -zoom5x, Digitalport 4 
//#define sw1Pin        5    // right switch, Digitalport 5, ohne funktion 
#define but0Pin       6    // red button (Record), Digitalport 6 
//#define but1Pin       7    // green button, Digiport 7, ohne unktion 

//SET (grundstellungen) 
volatile int encoder0Pos = 0; 
volatile int encoder1Pos = 0;
volatile int encoder2Pos = 0; 
volatile int encoder3Pos = 0; //==================
volatile int sw0Pos = 0;  
//volatile int sw1Pos = 0; 
volatile int but0Pos = 0; 
//volatile int but1Pos = 0; 
volatile int ffstep = 2; // Schrittgröße Fokus vorwärts / orig. war 2
volatile int bfstep = 0x8002; // Schrittgröße Fokus rückw. / orig. war 0x8002;
volatile int iso_mode = 0; 
volatile int aperture_mode = 0; 
volatile char recording_mode = 0; 
volatile char zoom_mode = 0;
volatile char shutterspeed_mode = 0; //===================

//BOUNCE schalter und taster 
Bounce bouncer_but0 = Bounce( but0Pin,10 );  
//Bounce bouncer_but1 = Bounce( but1Pin,10 );  
Bounce bouncer_sw0 = Bounce( sw0Pin,10 ); 
//Bounce bouncer_sw1 = Bounce( sw1Pin,10 ); 

int encoder0PinALast = LOW; 
int encoder1PinALast = LOW; 
int encoder2PinALast = LOW;
int encoder3PinALast = LOW; //====================
int n = LOW; 
// INIT ENCODER/SWITCH/BUTTON 
void initEncoder() { 
  // init drehencoder 
  pinMode(encoder0PinA, INPUT);  
  digitalWrite(encoder0PinA, HIGH);       // turn on pullup resistor 
  pinMode(encoder0PinB, INPUT);  
  digitalWrite(encoder0PinB, HIGH);       // turn on pullup resistor 

  pinMode(encoder1PinA, INPUT);  
  digitalWrite(encoder1PinA, HIGH);       // turn on pullup resistor 
  pinMode(encoder1PinB, INPUT);  
  digitalWrite(encoder1PinB, HIGH);       // turn on pullup resistor 

  pinMode(encoder2PinA, INPUT);  
  digitalWrite(encoder2PinA, HIGH);       // turn on pullup resistor 
  pinMode(encoder2PinB, INPUT);  
  digitalWrite(encoder2PinB, HIGH);       // turn on pullup resistor 
//================================================
  pinMode(encoder3PinA, INPUT);  
  digitalWrite(encoder3PinA, HIGH);       // turn on pullup resistor 
  pinMode(encoder3PinB, INPUT);  
  digitalWrite(encoder3PinB, HIGH);       // turn on pullup resistor 
//================================================




  // Init taster/buttons 
  pinMode(sw0Pin, INPUT);  
  digitalWrite(sw0Pin, HIGH);       // turn on pullup resistor 

 // pinMode(sw1Pin, INPUT);  
 // digitalWrite(sw1Pin, HIGH);       // turn on pullup resistor 

  pinMode(but0Pin, INPUT);  
  digitalWrite(but0Pin, HIGH);       // turn on pullup resistor 

//  pinMode(but1Pin, INPUT);  
//  digitalWrite(but1Pin, HIGH);       // turn on pullup resistor 
  encoder0PinALast = digitalRead(encoder0PinA); 
  encoder1PinALast = digitalRead(encoder1PinA); 
  encoder2PinALast = digitalRead(encoder2PinA); 
  encoder3PinALast = digitalRead(encoder3PinA); //===============================  
} 

// READ ENCODER 
void readEncoder() { 
  static int8_t last[5]; //================== orig. war 4
  int8_t neu = 0; 
  int8_t diff = 0;





  // drehencoder funktion from Peter Dannegger 
http://www.mikrocontroller.net/topic/112603     
  // Encoder 0 
  neu = 0; 
  if (digitalRead(encoder0PinA) == HIGH) { 
    neu = 3; 
  } 
  if (digitalRead(encoder0PinB) == HIGH) { 
    neu ^= 1;  // convert gray to binary 
  } 
  diff = last[0] - neu;        // difference last - neu 
  if( diff & 1 ){        // bit 0 = value (1) 
    last[0] = neu;                        // store neu as next last 
    encoder0Pos += (diff & 2) - 1;  // bit 1 = direction (+/-) 
  }  





  // Encoder 1 
  neu = 0; 
  if (digitalRead(encoder1PinA) == HIGH) { 
    neu = 3; 
  } 
  if (digitalRead(encoder1PinB) == HIGH) { 
    neu ^= 1;  // convert gray to binary 
  } 
  diff = last[1] - neu;       // difference last - neu 
  if( diff & 1 ){       // bit 0 = value (1) 
    last[1] = neu;    // store neu as next last 
    encoder1Pos += (diff & 2) - 1;      // bit 1 = direction (+/-) 
  }





  // Encoder 2 
  neu = 0; 
  if (digitalRead(encoder2PinA) == HIGH) { 
    neu = 3; 
  } 
  if (digitalRead(encoder2PinB) == HIGH) { 
    neu ^= 1;  // convert gray to binary 
  } 
  diff = last[2] - neu;        // difference last - neu 
  if( diff & 1 ){        // bit 0 = value (1) 
    last[2] = neu;        // store neu as next last 
    encoder2Pos += (diff & 2) - 1;      // bit 1 = direction (+/-) 
  }  
//================================================================================
  // Encoder 3
  neu = 0; 
  if (digitalRead(encoder3PinA) == HIGH) { 
    neu = 3; 
  } 
  if (digitalRead(encoder3PinB) == HIGH) { 
    neu ^= 1;  // convert gray to binary 
  } 
  diff = last[3] - neu;        // difference last - neu 
  if( diff & 1 ){        // bit 0 = value (1) 
    last[3] = neu;        // store neu as next last 
    encoder3Pos += (diff & 2) - 1;      // bit 1 = direction (+/-) 
  }  
//==============================================================================








  // read but0 with arduion debounce library  
  bouncer_but0.update(); 
  int value_but0 = bouncer_but0.read(); 
  if ( value_but0 == LOW) { 
    but0Pos = 1; 
  } 
  else { 
    but0Pos = 0; 
  } 
  
  // read but1 with arduion debounce library  
  /*
  bouncer_but1.update(); 
  int value_but1 = bouncer_but1.read(); 
  if ( value_but1 == LOW) { 
    but1Pos = 1; 
  } 
  else { 
    but1Pos = 0; 
  } 
*/
  // read sw0 with arduion debounce library  
  bouncer_sw0.update(); 
  int value_sw0 = bouncer_sw0.read(); 
  if ( value_sw0 == LOW) { 
    sw0Pos = 1; 
  } 
  else { 
    sw0Pos = 0; 
  } 
  
  
  
  // read sw1 with arduion debounce library  
/*  
  bouncer_sw1.update(); 
  int value_sw1 = bouncer_sw1.read(); 
  if ( value_sw1 == LOW) { 
    sw1Pos = 1; 
  } 
  else { 
    sw1Pos = 0; 
  } 
*/
}
class CamStateHandlers : 
public EOSStateHandlers 
{ 
  enum CamStates { 
    stInitial, stDisconnected, stConnected     }; 
  CamStates stateConnected; 

public: 
  CamStateHandlers() : 
  stateConnected(stInitial) {
  }; 

  virtual void OnDeviceDisconnectedState(PTP *ptp); 
  virtual void OnDeviceInitializedState(PTP *ptp); 
}; 

CamStateHandlers  CamStates; 
USB                 Usb; 
USBHub              Hub1(&Usb); 
CanonEOS            Eos(&Usb, &CamStates); 







// MAIN-SETUP 
void setup() { 
  Serial.begin( 115200 ); 
  Serial.println("Start"); 
  initEncoder(); 
  if (Usb.Init() == -1) 
    Serial.println("OSC did not start."); 
  delay(1000); 

  TCNT2 = 128; 
  TCCR2A = 0; 
  TCCR2B = (1<<CS22); 
  TIMSK2 |= (1<<TOIE2); 
  sei(); 
} 
ISR(TIMER2_OVF_vect) {   
  readEncoder(); 
}   





// MAIN-LOOP 
void loop() { 
  Usb.Task(); 
} 






void CamStateHandlers::OnDeviceDisconnectedState(PTP *ptp) { 
  if (stateConnected == stConnected || stateConnected == 
    stInitial) { 
    stateConnected = stDisconnected; 
    Notify(PSTR("Camera disconnected.\r\n")); 
  } 
} 





void CamStateHandlers::OnDeviceInitializedState(PTP *ptp) { 
  if (stateConnected == stDisconnected || stateConnected == 
    stInitial) { 
    stateConnected = stConnected; 
    encoder0Pos = 0; 
    encoder1Pos = 0; 
    encoder2Pos = 0; 
    encoder3Pos = 0; //==============
  } 
  if (stateConnected == stConnected) { 

    
    
    
    
    
    
    // Rec-Mode  
    if (but0Pos > 0) { 
      if (recording_mode == 0) { 
        Eos.SetProperty(EOS_DPC_EVFRecordStatus, 4); 
        delay(100); 
        but0Pos = 0; 
        recording_mode = 1; 
      } 
      else { 
        Eos.SetProperty(EOS_DPC_EVFRecordStatus, 0); 
        delay(100); 
        but0Pos = 0; 
        recording_mode = 0; 
      } 
    }
    
    
    
    
    
    
    // zoom field: 1x, 5x  
    if (zoom_mode == 0 and sw0Pos == 1) { 
      ((CanonEOS*)ptp)->Zoom(5); 
      delay(100); 
      zoom_mode = 1; 
      ffstep = 1; 
      bfstep = 0x8001; 
    }  
    if (zoom_mode == 1 and sw0Pos == 0) { 
      ((CanonEOS*)ptp)->Zoom(1); 
      delay(100); 
      zoom_mode = 0; 
      ffstep = 2; 
      bfstep = 0x8002; 
    }  







         // ISO auto, 100,160,320,640,1250,2500
              // mein ISO Auto, 100,  200,  400,  800,  1600, 3200, 6400, 12800(H)
    uint8_t iso_values[9] = {0, 0x48, 0x50, 0x58, 0x60, 0x68, 0x70, 0x78, 0x80};   // orig war   0, 0x48, 0x4D, 0x55, 0x5D, 0x65, 0x6D       };  
    if (encoder1Pos > 0) { 
      if (iso_mode < 8) { 
        iso_mode++; 
        Eos.SetProperty(EOS_DPC_Iso, iso_values[iso_mode]); 
      } 
      delay(50); 
    } 
    else if (encoder1Pos < 0) { 
      if (iso_mode > 0) { 
        iso_mode--; 
        Eos.SetProperty(EOS_DPC_Iso, iso_values[iso_mode]);               
      } 
      delay(50); 
    } 
    encoder1Pos = 0; 







    // orig. BLENDE f1.2,1.4,1.6,1.8,2.0,....f16  
    // meine BLENDE                 3.5,  4,    4.5,  5,    5.6,  6.3,  7.1,  8,    9,    10,   11,   13,   14,   16,   18,   20,   22
    uint8_t aperture_values[17] = { 0x25, 0x28, 0x2b, 0x2d, 0x30, 0x33, 0x35, 0x38, 0x3b, 0x3d, 0x40, 0x43, 0x45, 0x48, 0x4b, 0x4d, 0x4f  };   // orig war  [23] ... 0x0d, 0x10, 0x13, 0x15, 0x18, 0x1b, 0x1d, 0x20, 0x23, 0x25, 0x28, 0x2b, 0x2d, 0x30, 0x33, 0x35, 0x38, 0x3b, 0x3d, 0x40, 0x43, 0x45, 0x48  }; 
    if (encoder2Pos > 0) { 
      if (aperture_mode < 16) { //orig. war 22
        aperture_mode++; 
        Eos.SetProperty(EOS_DPC_Aperture, 
        aperture_values[aperture_mode]); 
      } 
      delay(50); 
    } 
    else if (encoder2Pos < 0) { 
      if (aperture_mode > 0) { 
        aperture_mode--; 
        Eos.SetProperty(EOS_DPC_Aperture, 
        aperture_values[aperture_mode]); 
      } 
      delay(50); 
    } 
    encoder2Pos = 0; 



//=============================================================================
    // meine Verschlußzeiten            30,   40,   50,   60,   80,   100,  125, 160,   200,  250,  320,  400,  500,  640,  800,  1000, 1250, 1600, 2000, 2500, 3200, 4000
    uint8_t shutterspeed_values[22] = { 0x60, 0x63, 0x65, 0x68, 0x6b, 0x6d, 0x70, 0x73, 0x75, 0x78, 0x7b, 0x7d, 0x80, 0x83, 0x85, 0x88, 0x8B, 0x8d, 0x90, 0x93, 0x95, 0x98  };
   if (encoder3Pos > 0) { 
      if (shutterspeed_mode < 21) { 
        shutterspeed_mode++; Serial.println("shutter forward"); // debugging
        Eos.SetProperty(EOS_DPC_ShutterSpeed, 
        shutterspeed_values[shutterspeed_mode]); 
      } 
      delay(50); 
    } 
    else if (encoder3Pos < 0) { 
      if (shutterspeed_mode > 0) { 
        shutterspeed_mode--; 
        Eos.SetProperty(EOS_DPC_ShutterSpeed, 
        shutterspeed_values[shutterspeed_mode]); 
      } 
      delay(50); 
    } 
    encoder3Pos = 0; 

//================================================================




    // FOCUS ACTION  
    while (encoder0Pos != 0) { 
      if (encoder0Pos > 0) { 
        encoder0Pos = 0;
        Serial.println("Focus forward"); // debugging
        Serial.println(ffstep); // debugging 
        ((CanonEOS*)ptp)->MoveFocus(ffstep); // vorwärts
        delay(10); 
      } 
      else if (encoder0Pos < 0) { 
        encoder0Pos = 0; 
        Serial.println("Focus backward"); // debugging
        Serial.println(bfstep); // debugging 
        ((CanonEOS*)ptp)->MoveFocus(bfstep); //rückwärts
        delay(10); 
      }  
    } 
    encoder0Pos = 0; 
  } 
}
 
Hast Du LiveView eingeschaltet? Fokus funktioniert nur bei aktivem LiveView.

Moin, natürlich, ganz so doof bin ich nun auch wieder nicht :ugly:

Ich muss eh immer wiefolgt vorgehen, da sonst das ganze System nicht funktioniert :
1. Poweron Arduinoboard
2. Poweron Kamera
3. Usb-Kabel von der Kamera an das USB-Host-Shield stöpseln, dann sagt mir die Kamera sowieso, das ich in den Livebild-Modus schalten soll.

Der Debugger sagt mir auch, das der Fokus-Encoder Daten sendet (2 bei Vorwärts / -32766 bei Rückwärts).

Evtl. ein Bug in einer der Libs ?

Ich bin mehrmals Zeile für Zeile der ARemote-V102.pdf durchgegangen und das stimmt eigentlich alles, darum bin ich jetzt mit meinem Latein am Ende :(
 
Good News, es funzt :top: :top:

Der Fehler lag in der Kameraeinstellung : Movie-Servo-AF
diese war von Werk aus aktiviert, nach der deaktivierung geht das nun reibungslos, ich freu mich grad wie ein Schneekönig !!!!!

Ich dachte halt es reicht, wenn man NUR den Schalter am Objektiv auf MF stellt... tja wie es immer so schön heisst..... RTFM ... :ugly:

Vielen lieben Dank Manfred für Deinen Support !!!!!
 
Good News, es funzt :top: :top:

Der Fehler lag in der Kameraeinstellung : Movie-Servo-AF
diese war von Werk aus aktiviert, nach der deaktivierung geht das nun reibungslos, ich freu mich grad wie ein Schneekönig !!!!!

Ich dachte halt es reicht, wenn man NUR den Schalter am Objektiv auf MF stellt... tja wie es immer so schön heisst..... RTFM ... :ugly:

Vielen lieben Dank Manfred für Deinen Support !!!!!

Gern geschehen. Das Objektiv musst Du aber nicht auf MF umstellen.
 
So, hab mal ein Foto im Anhang von der Steuerung, gerade noch das Wippschalterchen miteingebunden, für die 3 Fokus-Geschwindigkeiten...

Macht Spaß damit zu arbeiten, eine Klasse Idee und der Code war eigentlich gar nicht so schwer wie anfangs gedacht.

Das Ganze jetzt in Wireless und die Sache wär perfekt, darüber meditiere ich auch schon ein paar Tage. Bei weiterer Entwicklung melde ich mich wieder :)

Grüßle
MTE
 

Anhänge

hallo,

zuallererst: vielen Dank für Euere wunderbare Arbeit!!

Ich habe heute erste Versuche mit Schärfen und Rec-On bzw. Off gestartet und bin auf follgendes Problem gestoßen:

wenn ich die Funktion ((CanonEOS*)ptp)->SwitchLiveView(true/false); benutze, geht der Spiegel der Kamera zwar auf bzw. wieder zu, jedoch gibt die Kamera (5DMII), nachdem LiveView eigentlich aktiviert sein sollte und der Spiegel hochklappt, kein Bildsignal aus. Benutze ich jedoch die für LiveView vorgesehene Taste an der Kamera, dann kommt ein Bildsignal daher.

Habt Ihr zufällig Erfahrungen damit bzw. einen Lösungsansatz?

lg Florian
 
WERBUNG
Zurück
Oben Unten