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
02.03.2015, 14:51
Beitrag #25
RE: Canon EOS Trigger Box mit Menüsteuerung über Rotary
Um am Tag mit ner Fotodiode Arbeiten zu können nutze ich das Programm hier.
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);}

Im programm wird nicht ein bestimmter schwellenwert eingestellt sondern das programm löst erst bei einer bestimmten differenz aus, egal ob tag oder nacht.
Funktioniert ganz gut.


Wie Weit bist du schon Ralf?
Greez
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.09.2015, 17:21 (Dieser Beitrag wurde zuletzt bearbeitet: 15.09.2015 17:22 von Wampo.)
Beitrag #26
RE: Canon EOS Trigger Box mit Menüsteuerung über Rotary
Hy hallo,

ich muss das thema mal wieder aufwühlen da ich an einem BBQ Monitor sitze und mal wieder das leidige Thema der Menüführung nicht Durchschaun kann.

Im Anhang habe ich mal den bis jetzt bestehenden Code gehängt.


Hier mal die Menüskizze wie ichs mir von der Menüführung vorstelle. Jeder Kasten ist praktische eine andere Darstellung aufm LCD.
   

Bis jetzt führe ich das erste Hauptmenü per switch case aus. Im Hauptmenü werden die ersten vier auswahlmöglichkeiten in einem Array gespeichert.
Jedoch kann ich dieses Array und die Menüführung beim nächsten menü nicht hernehmen.

Das muss doch alles iwie leichter gehen. Ich finde es grad Megakompliziert. Ich finde einige libs bezüglich Menüführung aber nicht mit einem Rotaryencoder sonden nur mit buttons und das wirkt mir zu billig und nicht intuitiv.
Kennt niemand n gutes beispiel für eine Menügestaltung mit Rotary


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

#include <SPI.h>                            //http://arduino.cc/en/Reference/SPI
#include <Thermocouple.h>                   //http://github.com/JChristensen/Thermocouple

//=================================================
// Thermodefinition
// MAX6675 SPI pin definitions
#define csTC1  8                            //chip select for MAX6675 #1
#define csTC2  9                            //chip select for MAX6675 #2
#define csTC3  10                           //chip select for MAX6675 #3  
#define csTC4  11                           //chip select for MAX6675 #4

//Additionally, connect the MAX6675s as follows:
//MISO  Arduino pin 12                      //master in slave out
//SCK   Arduino pin 13                      //serial clock

Thermocouple tc1 = Thermocouple(csTC1);     //thermo initialisierung
Thermocouple tc2 = Thermocouple(csTC2);
Thermocouple tc3 = Thermocouple(csTC3);
Thermocouple tc4 = Thermocouple(csTC4);

//=================================================
// Batteriestatus Variablen
int       batteryPin = A0;           // Analoger Pin zum Batterie
float     batteryValue;              // true battery voltage
int       batteryPercent;            
float     batteryMaxVolts = 5;       // Max Volts (Vollgeladen)
float     batteryMinVolts = 0;       // Min Volts (Akku Entladeschlussspannung, meist 3,6 V/Zelle bei LiPo)
float     batteryAverage = 0;        // Durchnitsswert Volt

//Verfeinerung der gelesenen Werte
const int numReadings = 20;          // wieviel Werte ziehen
int       readings[numReadings];     // the readings from the analog input
int       index = 0;                 // the index of the current reading
int       total = 0;                 // the running total

//=================================================
//Standartvariablen
unsigned long soll1 = 70;
unsigned long soll2 = 70;
#define lcdupdatetime 500
int tp;
byte BUZ_PIN = 4;    // Buzzer
byte BUZ = 1;
byte LED_PIN = 5;
byte BATT = 1;

#define DEBUG 0   // 0 = No Debug
byte ON = 1;
byte OFF = 0;
//=================================================
// Menüführung
int CursorLine = 0;
int DisplayFirstLine = 0;
char* Hauptmenu[]={" Mainscreen"," Sollsettings"," Settings"," Credits"};
char* Einstellungen[]={" Battery"," Volume"," Brightness"," LCD Timeout"};
char* Sollset[]={" Battery"," Volume"," Brightness"," LCD Timeout"};

int MenueItems;

//=================================================
// Encoder
#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
enum pressDuration {normalPress, longPress, veryLongPress };
    long presses[] = { 120, 5000, 6000 };

// 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

//=================================================
// Symbole
byte speaker[8] = {
  0b00001,
  0b00011,
  0b00101,
  0b11001,
  0b11001,
  0b00101,
  0b00011,
  0b00001
};
byte speakon[8] = {
  0b00100,
  0b10010,
  0b01001,
  0b01001,
  0b01001,
  0b01001,
  0b10010,
  0b00100
};

byte mute[8] = {
  0b00000,
  0b00000,
  0b10001,
  0b01010,
  0b00100,
  0b01010,
  0b10001,
  0b00000
};

byte gc[8] = {
  0b11000,
  0b11000,
  0b00111,
  0b01000,
  0b01000,
  0b01000,
  0b00111,
};

byte battfull[8] = {
  0b00100,
  0b11111,
  0b11111,
  0b11111,
  0b11111,
  0b11111,
  0b11111,
  0b11111
};

byte batthalf[8] = {
  0b00100,
  0b11111,
  0b10001,
  0b10001,
  0b10011,
  0b10111,
  0b11111,
  0b11111
};

byte battempty[8] = {
  0b00100,
  0b11111,
  0b10001,
  0b10001,
  0b10001,
  0b10001,
  0b10001,
  0b11111
};

byte block[8] = {
  0b11111,
  0b11111,
  0b11111,
  0b11111,
  0b11111,
  0b11111,
  0b11111,
  0b11111
};

byte flag[8] = {  
  0b11100,
  0b11110,
  0b11111,
  0b11110,
  0b11100,
  0b10000,
  0b10000,
  0b10000
};

byte arrow[8] = {
  0b00000,
  0b00100,
  0b01110,
  0b11111,
  0b11111,
  0b01110,
  0b00100,
  0b00000
};

void setup() {
    lcd.begin(20,4);
    pinMode(BUZ_PIN, OUTPUT);
    pinMode(LED_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 Symbole
    lcd.createChar(0, speaker);
    lcd.createChar(1, speakon);
    lcd.createChar(2, mute);
    lcd.createChar(3, gc);
    lcd.createChar(4, battfull);
    lcd.createChar(5, batthalf);
    lcd.createChar(6, battempty);
    lcd.createChar(7, block);
    lcd.createChar(8, flag);
    lcd.createChar(9, arrow);
    
#if DEBUG==1
    lcd.setCursor ( 0, 0 );
    lcd.print(" Secure Smoker V1.0");
    lcd.setCursor ( 0, 1 );
    lcd.print(" ");
    lcd.setCursor ( 0, 2 );
    lcd.setCursor(0, 2);
    lcd.print("      Start up");
    lcd.setCursor(0, 4);
    for (int i=0; i<20; i++){
    lcd.write((byte)7);
    delay(150);
    }
    tone(BUZ_PIN, 294, 500);
    lcd.noBacklight();
    delay(150);
    tone(BUZ_PIN, 415, 150);
    lcd.backlight();
    delay(300);
    tone(BUZ_PIN, 880, 300);
    lcd.noBacklight();
    delay(150);
    tone(BUZ_PIN, 740, 250);
    lcd.backlight();
    delay(200);
#endif
  MenueItems = sizeof(Hauptmenu)/sizeof(Hauptmenu[0]);
  lcd.clear();
  print_menue();
    }


void loop() {
  static unsigned long btnHeld = 0;
  
  if (turned)
  {
    if (up)
      move_up();
    else
      move_down();
    turned = false;
  }
  else if (fired)
  {
    hauptmenu();
    fired = false;
  }
  if((digitalRead(PUSHP) == LOW) && !btnHeld){
        btnHeld = millis();
        digitalWrite(LED_PIN, HIGH);
        
  }
  if((digitalRead(PUSHP) == HIGH) && btnHeld){
        long t = millis();
        t -= btnHeld;
        digitalWrite(LED_PIN, LOW);
        int dur = veryLongPress;
        for(int i = 0; i<= veryLongPress; i++){
          if(t > presses[i])
             continue;
          dur = i;
          break;
        }
        
        switch (dur) {                 //Menüauswahl mit länge der Drückdauer
  case normalPress:

    break;  
  case longPress:
    
    break;  
  case veryLongPress:
    return;
    break;    
  default:
    break;
  }
  lcd.backlight();
  print_menue();
        btnHeld = 0;
      }
  
    
  }



void hauptmenu() {
  
  switch (CursorLine) {
  case 0:
  delay(150);
  lcd.clear();
  do{updatelcd(); }
  while((digitalRead(PUSHP) == HIGH));
  lcd.clear();
    break;
  case 1:
  
    break;  
  case 2:
    settings();
    break;  
  case 3:
  delay(150);
  lcd.clear();
   do{credits(); }
  while((digitalRead(PUSHP) == HIGH));
  delay(150);
  lcd.clear();
    break;    
  default:
    break;
  }
  print_menue();
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.11.2016, 20:47
Beitrag #27
RE: Canon EOS Trigger Box mit Menüsteuerung über Rotary
ich nehme an, das Projekt ist noch nicht zu Ende, weil Lichtsensoren zu langsam sind.
Einem Blitz geht immer ein Primär-Blitz von der Erde zur Wolke voraus. In dem dadurch geschaffenen "Kanal" fähr dann der fotografierenswerte Blitz von der Wolke zur Erde - bumm.
Als Sensor braucht man einen Empfänger für elektromagnetische Wellen.

Ich habe auch so ein Projekt vor und werde erstmal das Internet fragen nach: Radio-Detektor (Mittelwelle könnte gehen).
Vielleicht geht auch ein alter Kofferradio mit MW, LW, KW.

Vermutlich habe ich erst Zeit dafür ab Mai 2017.
Wäre schön wenn wir und austauschen könnten.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
13.11.2016, 23:13 (Dieser Beitrag wurde zuletzt bearbeitet: 13.11.2016 23:16 von Tommy56.)
Beitrag #28
RE: Canon EOS Trigger Box mit Menüsteuerung über Rotary
(11.11.2016 20:47)Wolfgang50 schrieb:  ich nehme an, das Projekt ist noch nicht zu Ende, weil Lichtsensoren zu langsam sind.
Einem Blitz geht immer ein Primär-Blitz von der Erde zur Wolke voraus. In dem dadurch geschaffenen "Kanal" fähr dann der fotografierenswerte Blitz von der Wolke zur Erde - bumm.
Als Sensor braucht man einen Empfänger für elektromagnetische Wellen.

Ich habe auch so ein Projekt vor und werde erstmal das Internet fragen nach: Radio-Detektor (Mittelwelle könnte gehen).
Vielleicht geht auch ein alter Kofferradio mit MW, LW, KW.

Vermutlich habe ich erst Zeit dafür ab Mai 2017.
Wäre schön wenn wir und austauschen könnten.
Im CHDK-Forum für CANON-Cameras gibt es einige Blitzbilder, die "sich selbst fotografiert" haben. Dort wird die Änderung im Bild der Vorschau zur Auslösung ausgenutzt. Es geht also, wenn die Elektronik schnell genug ist.

Nur mal als Anregung.

Gruß Tommy

Edit: Einige Bilder gibt es leider nicht mehr.
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 717 23.06.2016 07:15
Letzter Beitrag: drimrim
  Grillregelung über PID MarkoM 1 1.870 04.12.2015 04:43
Letzter Beitrag: Scherheinz
  2 LEDs über serielle Schnittstelle steuern Bill 0 1.010 13.08.2015 16:04
Letzter Beitrag: Bill
  Zähler über RC-Fernsteuerung do1xxy 14 1.919 14.04.2015 20:44
Letzter Beitrag: do1xxy
Question [Problem] TFA Nexus über Arduino auf WeatherUnderground übertragen Alfonz_Ritzek 0 1.065 28.03.2015 10:42
Letzter Beitrag: Alfonz_Ritzek
Lightbulb LED Thermometer über WS2812b LED und Dallas DS18B20 Wampo 2 1.724 15.03.2015 17:45
Letzter Beitrag: Wampo
  Lüftersteuerung über Taupunkt daruel 17 10.537 23.08.2014 19:26
Letzter Beitrag: apex
  ArduSmartPilot: Smartphone steuert Modellflugzeug mit Arduino-Bordrechner über BT JueSchwager 1 2.980 19.02.2014 20:33
Letzter Beitrag: Sloompie
Video Mehrere Motoren über den PC ansteuern Lechs 1 2.331 27.10.2013 15:12
Letzter Beitrag: rkuehle

Gehe zu:


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