• Herzlich willkommen im "neuen" DSLR-Forum!

    Wir hoffen, dass Euch das neue Design und die neuen Features gefallen und Ihr Euch schnell zurechtfindet.
    Wir werden wohl alle etwas Zeit brauchen, um uns in die neue Umgebung einzuleben. Auch für uns ist das alles neu.

    Euer DSLR-Forum-Team

  • 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 ...

  • DSLR-Forum Fotowettbewerb neu erfunden!
    Nach wochenlanger intensiver Arbeit an der Erneuerung des Formates unseres internen Fotowettbewerbes ist es Frosty als Moderator
    und au lait als Programmierer gelungen, unseren Wettbewerb auf ein völlig neues Level zu heben!
    Lest hier alle Infos zum DSLR-Forum Fotowettbewerb 2.0
    Einen voll funktionsfähigen Demowettbewerb kannst du dir hier ansehen.
  • Neuer Partner: AkkuShop.de
    Akkus, Ladegeräte und mehr (nicht nur) für Digitalkameras und Drohnen
  • Neuer Gutscheincode unseres Partners Schutzfolien24:
    DSLR-Forum2024
    Dauerhaft 10% Rabatt auf alle Displayschutzfolien der Eigenmarken "Upscreen", "Brotec", "Savvies".
    Der Code ist für alle Geräteklassen gültig.
  • Stimmt ab über die Sieger des DSLR-Forum Fotowettbewerbs April 2024.
    Thema: "Sprichwörtlich"

    Nur noch bis zum 30.04.2024 23:59!
    Jeder darf abstimmen!
    Zur Abstimmung und Bewertung hier lang
WERBUNG

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

Hi

gibt es irgendwie die Möglichkeit, die 2 Befehle ShutterButton_Halfway und ShutterButton_Completely noch mit einzubinden ?

Ich habe leider grad keinen Optokoppler zur Hand, sonst hätte ich das mit einem Klinkenkabel gelöst.

Andererseits möchte ich das alles per USB steuern, da ich eine Wireless-Lösung für das ganze fast fertig habe :cool:

Schaut euch einfach mal das Wixel - Modul an... läuft bisher Superfluffig das Ganze.

Nähere Infos und eine Doku gibts wenn ich das Teil Bugfrei fertiggestellt habe :)

Grüßle
MTE
 
Moin,
hier mal eine kurze Zusammenfassung wie ich euer Projekt für meinen Zweck quasi umgeändert
habe und noch erweitern will :

Ich hab mir, nachdem ich euren Remote nachgebaut hab noch nen motorgesteuerten Dolly
(Prototyp) hier aufgebaut und dachte mir, das man das doch sicher auch per Wireless umsetzen kann.

Daraufhin hab ich eben das Wixel-Modul entdeckt und mir davon 2 Stück geordert, die Dinger
Rocken und sind supereinfach einzubinden.

Derzeitiger Stand : Ich kann jetzt eben komplett per Funk die Remotefunktionen an die Kamera
übertragen. Zudem noch den Motor (und seine Geschwindigkeit) steuern, der den Dollytisch
fährt.

Nun ist eben noch die Idee dabei entstanden ein kleines Timelapse-Menü miteinzubinden und das
Ganze auch wireless zu übertragen, dazu brauche ich aber die entsprechnenden Commands, um den
Auslöseknopf der Kamera per USB zu bedienen.

Im Endeffekt hat man dann 2 Geräte:

Den Receiver mit 2 Ausgängen, 1 USB-Kabel zur Kamera, 1 zum Motor.

Das Zweite Gerät ist der Transmitter mit einem Nokia5110-LCD und den Encodern und Tastern
dran.

Über Funk schicke ich dann quasi z.B ein Char 'a', das am Receiver als "Starte Motor Richtung links" interpretiert wird.

Nun stecke ich aber gerade fest !

Um den Shutterbutton auch per USB zu nutzen muss ich wohl nach eigener Recherche die Library
selber ändern, aber puhh... das ist mir ne Spur zu hoch...

Ich hab jetzt endlich mal per stundenlanger Googlesuche diese Codeschnipsel entdeckt...

Code:
     public enum ShutterButtonCommand : uint
     {
-        ShutterButton_OFF = 0x00000000,
-        ShutterButton_Halfway = 0x00000001,
-        ShutterButton_Completely = 0x00000003,
-        ShutterButton_Halfway_NonAF = 0x00010001,
-        ShutterButton_Completely_NonAF = 0x00010003,

Wie und wo muss ich das einfügen damit ich das nutzen kann ?
 
Zuletzt bearbeitet:
Ich habe meine 3 .inos mal in ein Zip gepackt und auf meinem Server hochgeladen, weil ich sie hier leider nicht mitanhängen konnte. Download -> hier <-

Achtung :
Für den Transmitter sind es 2 Codes, da mir die Pins ausgegangen sind und ich somit einen 2. Atmega328P per IIC (Wire) mitangebunden hab...
 
Mann bin ich doof :ugly:

im EOSCapture.pde von der PTP20-Library ist ja ein Paradebeispiel von Code...naja manchmal sieht man den Wald vor lauter Bäumen nicht...

Ich werd das jetzt mal ausgiebig testen und dann wieder berichten :)
 
So, ich bin fast fertig mit dem Projekt dann gehts an die Doku.

Hat jemand zufällig das Okii-source.zip wie in Reply #65 / Seite 7 von diesem Thread ?
Ich krieg nämlich die 4 Fokus-Savepoints nicht sauber hin und wäre an dem Code sehr interessiert...

Grüßle
 
Guten Tag!
Ich entschuldige mich im Voraus für mein Deutsch. Diese Google TRANSLATIO. Shutterbutton (HalfReleaseShutterButton) will an die Steuereinheit auf der Basis des Arduino verbinden. Aber nie gefunden, welcher Code zu fotoaparat für diese Schaltfläche zu senden. Eine Datei Okii-source.zip kann ich nicht herunterladen. Kann mir jemand
zakaz@dukatoil.com
Oder kann jemand, was Codes in Appliances für diese senden. Vielen Dank im Voraus. Obischayu senden fertigen Modul. Viele denken, dass es sinnvoll sein,
 
Guten Morgen, allerseits,

Ich habe hier einen Versuchsaufbau mit einem Arduino Uno, mit dem ich unter Verwendung von PTO 2.0 und USB (https://github.com/felis/PTP_2.0) eine EOS 600D ansteuere. Ich kann zwei Fokuspunkte setzen und mit 2 Tasten oder einem Drehenkoder den Fokus einstellen, dies auch bei laufender Aufnahme ("Record"). Ferner kann ich Zoom auf 1x, 5x un 10x setzen. Mit 3 LEDs werden die Einstellung der Fokuspunkte und die Record-Funktion angezeigt. Mehr brauche ich nicht

Leider leider gibt es aber das Problem, dass ich bei LifeView die Aufnahme (Record) zwar starten und beenden kann, jedoch nur einmal. Danach ist die Kamera anscheinend über USB nicht mehr ansprechbar. Von Hand ist sie noch bedienbar. Auch die von mir implementierten Funktionen (z.B. Record-LED ein/eus funktionieren noch.

Meine C++ - Kenntnisse reichen leider nicht aus, um das PTP 2.0 richtig zu verstehen und ggf. z debuggen. Kann mir jemand weiterhelfen ???
 
Guten Morgen, allerseits,

Ich habe hier einen Versuchsaufbau mit einem Arduino Uno, mit dem ich unter Verwendung von PTO 2.0 und USB (https://github.com/felis/PTP_2.0) eine EOS 600D ansteuere. Ich kann zwei Fokuspunkte setzen und mit 2 Tasten oder einem Drehenkoder den Fokus einstellen, dies auch bei laufender Aufnahme ("Record"). Ferner kann ich Zoom auf 1x, 5x un 10x setzen. Mit 3 LEDs werden die Einstellung der Fokuspunkte und die Record-Funktion angezeigt. Mehr brauche ich nicht

Leider leider gibt es aber das Problem, dass ich bei LifeView die Aufnahme (Record) zwar starten und beenden kann, jedoch nur einmal. Danach ist die Kamera anscheinend über USB nicht mehr ansprechbar. Von Hand ist sie noch bedienbar. Auch die von mir implementierten Funktionen (z.B. Record-LED ein/eus funktionieren noch.

Meine C++ - Kenntnisse reichen leider nicht aus, um das PTP 2.0 richtig zu verstehen und ggf. z debuggen. Kann mir jemand weiterhelfen ???
 
Guten Morgen, allerseits,

Ich habe hier einen Versuchsaufbau mit einem Arduino Uno, mit dem ich unter Verwendung von PTO 2.0 und USB (https://github.com/felis/PTP_2.0) eine EOS 600D ansteuere. Ich kann zwei Fokuspunkte setzen und mit 2 Tasten oder einem Drehenkoder den Fokus einstellen, dies auch bei laufender Aufnahme ("Record"). Ferner kann ich Zoom auf 1x, 5x un 10x setzen. Mit 3 LEDs werden die Einstellung der Fokuspunkte und die Record-Funktion angezeigt. Mehr brauche ich nicht

Leider leider gibt es aber das Problem, dass ich bei LifeView die Aufnahme (Record) zwar starten und beenden kann, jedoch nur einmal. Danach ist die Kamera anscheinend über USB nicht mehr ansprechbar. Von Hand ist sie noch bedienbar. Auch die von mir implementierten Funktionen (z.B. Record-LED ein/eus funktionieren noch.

Meine C++ - Kenntnisse reichen leider nicht aus, um das PTP 2.0 richtig zu verstehen und ggf. z debuggen. Kann mir jemand weiterhelfen ???

Hi

poste hier mal Deinen Code, evtl. kann ich Dir helfen ;)

Grüßle
 
@mte:

Der Code ist im Wesentlichen bei Stoecki abgekupfert ("ARemote") und bei mir derzeit als Folge des vielen Rumprobierens ziemlich unschön geworden. Ich habe inzwischen bemerkt, dass die sog. "Funktion "EOS_DPC_EVFRecordStatus" nur ein einfaches #define in der canoneos.h ist. Man kann dieses auskommentieren, ohne dass beim Kompilieren ein Fehler entsteht. Trotzdem funktioniert die Record-Funktion, wenn auch nur einmal.

Ich hoffe, dass das Hochladen des Codes klappt, das ich sowas noch nie gemacht habe. Wenn nicht, melde dich bitte noch mal.
 

Anhänge

Hi

also der Code Deiner Rec-Sektion passt und müsste eigentlich einwandfrei funktionieren, wurde ja 1:1 von Stoeckis Pdf übernommen.

In der Ptp20 solltest auch nix ändern, ausser die Sachen vom Pdf vorgegeben....

Seltsam, versuch mal nur die Recordfunktion in ein neues sketch zu isolieren und schau ob der Fehler weiterhin besteht. Evtl. ist auch in der 600D was falsch eingestellt.

Noch ein Tipp :
Da der Code mehr wie unübersichtlich ist, gib den jeweiligen Buttons, Encoders namen. Also anstatt but0 lieber recBtn, so behält man den Überblick und findet Fehler schneller ;)
 
Hi, mte,
Danke, dass du meinen Code angesehen hast und für deine Tipps. Ich habe also die Record-Funktion schrittweise isoliert und unnötige Variable entfernt. Ich bin schließlich an einen Punkt gekommen wo praktisch nur noch die Record- Funktion übrig war. Tatsächlich funktionierte die Aufnahme nun mehrmals.

Ich habe dann diese Version gespeichert und weiter versucht, durch schrittweises Wiedereinfügen der ursprünglichen Funktionen den Fehler einzukreisen. Als dies nicht zum Erfolg führte, habe ich nochmal die "isolierte" Version geladen. Der o.g.Fehler war nun wieder da.

Ich habe dannach auch bei anderen Versuchen beobachtet, dass es manchmal einmal, in seltenen Fällen sogar drei mal geht und dann nicht mehr.

Ich kann jetzt nur annehmen, dass die 600D an dieser Stellen mit der verfügbaren PTP2.0 eben doch nicht richtig funktioniert. Als das PTP2.0 geschrieben wurde, hats die 600D eben noch nicht gegeben. Es wird ja auch berichtet, dass sich die Kamerahersteller nicht immer genau an die Standards halten.

Mich würde nun aber doch noch interessieren, ob es Besitzer der 600D gibt, die den Record - Modus über das "Arduino-PTP 2.0" steuern können.
(Über den USB-Verbindung zum Windows-Computer gehts natürlich).
 
Moin,

nein da ist definitiv irgenwo noch ein Bug in Deinem Code, ich selbst habe die 700D und da funktioniert alles problemlos.

Hier mal einer meiner umgeschriebenen Codes, mit definierten Namen der Taster und Funktionen ist es einfach übersichtlicher, vielleicht kannst ja was damit anfangen ;)

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

// Pindefinitionen
// die Encoderpins sind hier vertauscht als im Bauplan, da ich sie falschherum (an den Encodern direkt !) gelötet habe :)
#define blende_encoderPinA   A1  // Blende, A0 
#define blende_encoderPinB   A0  // Blende, A1 

#define iso_encoderPinA      A3  // ISO, A2 
#define iso_encoderPinB      A2  // ISO, A3

#define shutter_encoderPinA  A5  // Verschlußzeit, A4
#define shutter_encoderPinB  A4  // Verschlußzeit, A5

#define fokus_encoderPinA     3  // Fokus, D2 
#define fokus_encoderPinB     2  // Fokus, D3
// Buttonpins
#define zoomsw                4  // Zoomschalter (Zoom 5x), D4 
#define recled                5  // Record-LED D5
#define recbtn                6  // Roter Drucktaster (Record), D6
#define fokuspeedswI          7 // Fokuspeed-Umschalter I  D7
#define fokuspeedswII         8 // Fokuspeed-Umschalter II D8

// Positionen
volatile int fokus_encoderPos   = 0; 
volatile int iso_encoderPos     = 0;
volatile int blende_encoderPos  = 0; 
volatile int shutter_encoderPos = 0;
volatile int zoomswPos          = 0;
volatile int recbtnPos          = 0;
volatile int fokuspeedswIPos    = 0;
volatile int fokuspeedswIIPos   = 0;

// Schrittgrößen für Fokusencoder
volatile int fokus_forward_step  =      2; // Fokus vorwärts, geht von 1-3
volatile int fokus_backward_step = 0x8002; // Fokus rückwärts, geht von 0x8001 - 0x8003, .......
// Modis
volatile int iso_mode            = 0;
volatile int aperture_mode       = 0;
volatile char recording_mode     = 0;
volatile char zoom_mode          = 0;
volatile char shutter_mode       = 0; 
volatile int fokuspeedswI_mode   = 0;
volatile int fokuspeedswII_mode  = 0;


// BOUNCE Umschalter und Taster 
Bounce bouncer_recbtn = Bounce( recbtn,10 );  
Bounce bouncer_zoomsw = Bounce( zoomsw,10 ); 
Bounce bouncer_fokuspeedswI = Bounce(   fokuspeedswI,10 );
Bounce bouncer_fokuspeedswII = Bounce( fokuspeedswII,10 ); 

int fokus_encoderPinALast   = LOW;
int iso_encoderPinALast     = LOW;
int blende_encoderPinALast  = LOW;
int shutter_encoderPinALast = LOW;  // Verschlußzeit
int n                       = LOW; 
// Initialisierung Encoder, Umschalter, Taster und LED
void initEncoder() { 
  // Encoder
  pinMode(fokus_encoderPinA, INPUT);  
  digitalWrite(fokus_encoderPinA, HIGH);       // turn on pullup resistor 
  pinMode(fokus_encoderPinB, INPUT);  
  digitalWrite(fokus_encoderPinB, HIGH);

  pinMode(iso_encoderPinA, INPUT);  
  digitalWrite(iso_encoderPinA, HIGH);
  pinMode(iso_encoderPinB, INPUT);  
  digitalWrite(iso_encoderPinB, HIGH);

  pinMode(blende_encoderPinA, INPUT);  
  digitalWrite(blende_encoderPinA, HIGH);
  pinMode(blende_encoderPinB, INPUT);  
  digitalWrite(blende_encoderPinB, HIGH);

  pinMode(shutter_encoderPinA, INPUT);  
  digitalWrite(shutter_encoderPinA, HIGH);
  pinMode(shutter_encoderPinB, INPUT);  
  digitalWrite(shutter_encoderPinB, HIGH);

  // Umschalter und Taster 
  pinMode(zoomsw, INPUT);  
  digitalWrite(zoomsw, HIGH); 

  pinMode(fokuspeedswI, INPUT);  
  digitalWrite(fokuspeedswI, HIGH);

  pinMode(fokuspeedswII, INPUT);  
  digitalWrite(fokuspeedswII, HIGH);

  pinMode(recbtn, INPUT);  
  digitalWrite(recbtn, HIGH); 
  // LED
  pinMode(recled, OUTPUT); 
  digitalWrite(recled, LOW);

  fokus_encoderPinALast = digitalRead(fokus_encoderPinA); 
  iso_encoderPinALast = digitalRead(iso_encoderPinA); 
  blende_encoderPinALast = digitalRead(blende_encoderPinA); 
  shutter_encoderPinALast = digitalRead(shutter_encoderPinA);
} 


// READ ENCODER & BUTTONS
void readEncoder() {
  static int8_t last[5]; //bei 4 Encodern muss das [5] sein
  int8_t neu = 0; 
  int8_t diff = 0;

  // Encoder - FOKUS
  neu = 0; 
  if (digitalRead(fokus_encoderPinA) == HIGH) { 
    neu = 3; 
  } 
  if (digitalRead(fokus_encoderPinB) == 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 
    fokus_encoderPos += (diff & 2) - 1;  // bit 1 = direction (+/-) 
  }  

  // Encoder - ISO
  neu = 0; 
  if (digitalRead(iso_encoderPinA) == HIGH) { 
    neu = 3; 
  } 
  if (digitalRead(iso_encoderPinB) == 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 
    iso_encoderPos += (diff & 2) - 1;      // bit 1 = direction (+/-) 
  }




  // Encoder - Blende
  neu = 0; 
  if (digitalRead(blende_encoderPinA) == HIGH) { 
    neu = 3; 
  } 
  if (digitalRead(blende_encoderPinB) == 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 
    blende_encoderPos += (diff & 2) - 1;      // bit 1 = direction (+/-) 
  }  

  // Encoder - Verschlußzeit
  neu = 0; 
  if (digitalRead(shutter_encoderPinA) == HIGH) { 
    neu = 3; 
  } 
  if (digitalRead(shutter_encoderPinB) == 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 
    shutter_encoderPos += (diff & 2) - 1;      // bit 1 = direction (+/-) 
  }  



  // Button Debouncing
  // read recbtn with arduion debounce library  
  bouncer_recbtn.update(); 
  int value_recbtn = bouncer_recbtn.read(); 
  if ( value_recbtn == LOW) { 
    recbtnPos = 1; 
  } 
  else { 
    recbtnPos = 0; 
  } 


  // read zoomsw with arduion debounce library  
  bouncer_zoomsw.update(); 
  int value_zoomsw = bouncer_zoomsw.read(); 
  if ( value_zoomsw == LOW) { 
    zoomswPos = 1; 
  } 
  else { 
    zoomswPos = 0; 
  }

  // read fokuspeedswI with arduion debounce library
  bouncer_fokuspeedswI.update(); 
  int value_fokuspeedswI = bouncer_fokuspeedswI.read(); 
  if ( value_fokuspeedswI == LOW) { 
    fokuspeedswIPos = 1; 
  } 
  else { 
    fokuspeedswIPos = 0; 
  }

  // read fokuspeedswII with arduion debounce library
  bouncer_fokuspeedswII.update(); 
  int value_fokuspeedswII = bouncer_fokuspeedswII.read(); 
  if ( value_fokuspeedswII == LOW) { 
    fokuspeedswIIPos = 1; 
  } 
  else { 
    fokuspeedswIIPos = 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(); 
}

// Camstatehandler -Disconnected
void CamStateHandlers::OnDeviceDisconnectedState(PTP *ptp) { 
  if (stateConnected == stConnected || stateConnected == stInitial) { 
    stateConnected = stDisconnected; 
    Notify(PSTR("Camera disconnected.\r\n")); 
  } 
} 
// Camstatehandler -Modes
void CamStateHandlers::OnDeviceInitializedState(PTP *ptp) {
  if (stateConnected == stDisconnected || stateConnected == stInitial) { 
    stateConnected = stConnected; 
    fokus_encoderPos = 0; 
    iso_encoderPos = 0; 
    blende_encoderPos = 0; 
    shutter_encoderPos = 0;
  }
  if (stateConnected == stConnected) {

    // Rec-Mode  
    if (recbtnPos > 0) { 
      if (recording_mode == 0) { 
        Eos.SetProperty(EOS_DPC_EVFRecordStatus, 4); 
        delay(100); 
        recbtnPos = 0; 
        recording_mode = 1; 
        digitalWrite(recled, HIGH);
      } 
      else { 
        Eos.SetProperty(EOS_DPC_EVFRecordStatus, 0); 
        delay(100); 
        recbtnPos = 0; 
        recording_mode = 0;
        digitalWrite(recled, LOW);
      }
    }

    // Zoom-Mode 5x  
    if (zoom_mode == 0 and zoomswPos == 1) { 
      ((CanonEOS*)ptp)->Zoom(5); 
      delay(100); 
      zoom_mode = 1;
      //Serial.println("Zoom = AN");
      //Serial.println(fokus_forward_step);
      //Serial.println(fokus_backward_step);
      //Serial.println("=========");  
      //fokus_forward_step = 3; 
      //fokus_backward_step = 0x8003; 
    }
    // Zoom-Mode 1x
    if (zoom_mode == 1 and zoomswPos == 0) { 
      ((CanonEOS*)ptp)->Zoom(1); 
      delay(100); 
      zoom_mode = 0;
      //Serial.println("Zoom = AUS");
      //Serial.println(fokus_forward_step);
      //Serial.println(fokus_backward_step);
      //Serial.println("==========");
      //fokus_forward_step = 2; 
      //fokus_backward_step = 0x8002; 
    }


    //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    // FokuspeedswI (Umschalter auf I ist feinste Fokusierung)

    if (fokuspeedswI_mode == 0 and fokuspeedswIPos == 1) { 
      //delay(100); 
      fokuspeedswI_mode = 1; 
      fokus_forward_step = 1; 
      fokus_backward_step = 0x8001;
      //Serial.println("Fokus-SW I = An");
      //Serial.println(fokus_forward_step);
      //Serial.println(fokus_backward_step);
      //Serial.println("==============="); 
    } 
    if (fokuspeedswI_mode == 1 and fokuspeedswIPos == 0) { 
      //delay(100); 
      fokuspeedswI_mode = 0; 
      fokus_forward_step = 2; 
      fokus_backward_step = 0x8002;
      //Serial.println("Fokus-SW I = Aus");
      //Serial.println(fokus_forward_step);
      //Serial.println(fokus_backward_step);
      //Serial.println("================");
    }  

    // FokuspeedswII (Umschalter auf II ist gröbste Fokusierung)
    if (fokuspeedswII_mode == 0 and fokuspeedswIIPos == 1) { 
      //delay(100); 
      fokuspeedswII_mode = 1; 
      fokus_forward_step = 3; 
      fokus_backward_step = 0x8003;
      //Serial.println("Fokus-SW II = An");
      //Serial.println(fokus_forward_step);
      //Serial.println(fokus_backward_step);
      //Serial.println("==============="); 
    } 
    if (fokuspeedswII_mode == 1 and fokuspeedswIIPos == 0) { 
      //delay(100); 
      fokuspeedswII_mode = 0; 
      fokus_forward_step = 2; 
      fokus_backward_step = 0x8002;
      //Serial.println("Fokus-SW II = Aus");
      //Serial.println(fokus_forward_step);
      //Serial.println(fokus_backward_step);
      //Serial.println("================");
    }  

    // 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    };
    if (iso_encoderPos > 0) { 
      if (iso_mode < 8) { 
        iso_mode++; 
        Eos.SetProperty(EOS_DPC_Iso, iso_values[iso_mode]); 
      } 
      delay(50); 
    } 
    else if (iso_encoderPos < 0) { 
      if (iso_mode > 0) { 
        iso_mode--; 
        Eos.SetProperty(EOS_DPC_Iso, iso_values[iso_mode]);               
      } 
      delay(50); 
    }
    iso_encoderPos = 0; 


    // 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      };
    if (blende_encoderPos > 0) { 
      if (aperture_mode < 16) { //orig. war 22
        aperture_mode++; 
        Eos.SetProperty(EOS_DPC_Aperture, 
        aperture_values[aperture_mode]); 
      } 
      delay(50); 
    } 
    else if (blende_encoderPos < 0) { 
      if (aperture_mode > 0) { 
        aperture_mode--; 
        Eos.SetProperty(EOS_DPC_Aperture, 
        aperture_values[aperture_mode]); 
      } 
      delay(50); 
    } 
    blende_encoderPos = 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 shutter_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 (shutter_encoderPos > 0) { 
      if (shutter_mode < 21) { 
        shutter_mode++;
        Eos.SetProperty(EOS_DPC_ShutterSpeed, 
        shutter_values[shutter_mode]); 
      } 
      delay(50); 
    } 
    else if (shutter_encoderPos < 0) { 
      if (shutter_mode > 0) { 
        shutter_mode--; 
        Eos.SetProperty(EOS_DPC_ShutterSpeed, 
        shutter_values[shutter_mode]); 
      } 
      delay(50); 
    } 
    shutter_encoderPos = 0; 



    // Fokus Funktion
    while (fokus_encoderPos != 0) { 
      if (fokus_encoderPos > 0) { 
        fokus_encoderPos = 0;
        ((CanonEOS*)ptp)->MoveFocus(fokus_forward_step); // vorwärts
        //Serial.println(fokus_forward_step);
        delay(50); 
      } 
      else if (fokus_encoderPos < 0) { 
        fokus_encoderPos = 0; 
        ((CanonEOS*)ptp)->MoveFocus(fokus_backward_step); //rückwärts
        //Serial.println(fokus_backward_step);
        delay(50); 
      }  
    } 
    fokus_encoderPos = 0; 
  }
}

EDIT :
Ähm, wenn ich so nachdenke, könnte es auch evtl. ein Bug an Deiner Hardware sein, welches USB-Host-Modul benutzt Du ?
 
Zuletzt bearbeitet:
Moin, mte,

Ich habe z. Zt. den USB Host von Sain Smart (V.??) in Betrieb. Ich hätte auch noch einen USB Host Mini V.1.8 von DuinoFun hier, den ich eigentlich in der endgültigen Anordnung einsetzen wollte. Die elektrische Anpassung an den normalen Uno wäre aber ja recht umständlich. Welchen USB-Host verwendest du denn?

Ich habe noch herausgefunden, dass es eine PTP20 library mit bereits implementierter Video-Record Funktion gibt:

https://github.com/felis/PTP_2.0, "Video record on/off property def. added"

Da ist die gleiche Adresse wie in der Stoecky-Version definiert und auch noch ein alternativer Wert für "Record Off" (= 3). Ich habe die gesamte neue PTP20 mit der "Isolierten" Arduino version probiert. Keine Verbesserung, mit 3 gehts gar nicht und mit 0 wie gehabt nur 1 mal.

Ich habe auch mal die Shutter - Funktion eingebunden. Funktioniert, aber auch nur einmal.

Die USB-Verbindung hatte ich ja auch schon im Verdacht gehabt, da ja weder die Kamera noch der Arduino hängt. Aber Focus und Zoom funktionieren ja, solange nicht "recod off" vollzogen wird.

Ich werde jetzt mal deine Version mit der Stoeky-Lib erproben.

Ergänzung: Das war ja schnell gemacht, aber leider besteht das selbe Problem bei mir auch mit deiner SW.

Schönen Sonntag.
 
Zuletzt bearbeitet:
Hi

generell funktionieren nur Klone, die 1:1 identisch mit dem Original von Circuits@home sind...ich habe das hier -> klick, ist ein ITEAD-Klon.

Ich habe natürlich vorher die Schaltpläne pin für pin verglichen, damit ich nicht die Katze im Sack kaufe, das funzt einwandfrei ! Ein USB-Host-Mini hab ich mir dann noch für meine Wireless-Mini Variante bei Lipoly.de bestellt, funktioniert auch ohne Probleme. Dieses Projekt werde ich auch bald vorstellen, komme nur derzeit nicht dazu, zuviel um die Ohren grad.

Leider weiss ich grad keinen Tipp mehr, aber ich tendiere zu einem Hardware-Bug.

Bugtechnisch habe ich in meiner Entwicklung auch viel kurioses durchlebt :D, der schlimmste war z.B. das mit angeschlossenem Netzteil (ACK-E8) sich die Kamera immer so nach 5 Minuten vom Host getrennt hat, mit nur eingelegtem Akku war das nicht der Fall...jetzt nach ungefähr 500 Atmel-uploads geht es komischerweise, echt mal seltsam :)

Wünsch Dir auch noch nen erholsamen Sonntag :)
 
Hey zusammen,


Ich besitze eine Canon 77D. Ich wollte mir ein Batteriegriff zulegen, jedoch habe ich festgestellt, dass es die nur ohne Iso-, Zoom+/- usw Taste gibt.
Die 77D hat im Batterieschacht auch keine entsprechenden Kontakte zur Steuerung.

So bin ich nun zu euch gestoßen und bin doch sehr interessiert.

Meine Idee ist nun, mir einen entsprechenden Griff selbst zu bauen (oder einen bestehenden zu upgraden).

Gibts jemanden, der das ganze mit einem Uno umsetzen konnte?
Hab leider keine saubere Doku von dem Projekt hier gefunden, wo alles beschrieben wird.

Schöne Grüße in die Vergangenheit:
Jonas
 
WERBUNG
Zurück
Oben Unten