https://www.scandig.info/Verschluss.htmlDie Hersteller unterboten sich seit den 60er Jahren gegenseitig mit immer kürzeren Verschlusszeiten. In den 60er Jahren war 1/1000 Sekunde der Standard, in den 70er wurde 1/2000 Sekunde zum Standard. In den 80er Jahren konnte Nikon mit 1/4000 Sekunde (FM2) und 1/8000 Sekunde (F-801) gleich zwei Meilensteine hintereinander setzen. Das Wettrennen um die kürzestmögliche Verschlusszeit endete jedoch schon Anfang der 90er Jahre. Die 1/12000 Sekunde der Minolta Dynax 9xi ist seit 1992 von keiner anderen Kamera mit Schlitzverschluss unterboten worden.
Code: Alles auswählen
#include <Adafruit_GFX.h>
#include <Adafruit_SH110X.h>
// OLED settings 1.3 Zoll
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define i2c_Address 0x3c ///< See datasheet for Address; 0x3c for 128x64 OLED
Adafruit_SH1106G display = Adafruit_SH1106G(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// shutter speed tester settings
#define RECEIVER_PIN A3 // pin to read the light sensor output.
#define TIMEOUT 8000000 // timeout value for analogPulsIn().
#define THRESHOLD 200 // analogPlusIn() thinks HI, if the light sensor value is higher than this value.
#define MIN_DURATION 500 // usecs. ignore the duration if it is lower than this value.
unsigned long analogPulseIn(uint8_t pin, uint8_t state, unsigned long timeoutInMicros, int threshold = THRESHOLD) {
unsigned long startTime = micros();
// Wait until the previous pulse stops.
while (true) {
unsigned int value = analogRead(pin);
if ((state == HIGH && value < threshold) || (state == LOW && value >= threshold)) {
break;
}
if (micros() - startTime >= timeoutInMicros) {
return 0;
}
}
// Wait until the pulse starts.
while (true) {
unsigned int value = analogRead(pin);
if ((state == HIGH && value >= threshold) || (state == LOW && value < threshold)) {
break;
}
if (micros() - startTime >= timeoutInMicros) {
return 0;
}
}
unsigned long time0 = micros();
// Wait until the pulse stops.
while (true) {
unsigned int value = analogRead(pin);
if ((state == HIGH && value < threshold) || (state == LOW && value >= threshold)) {
break;
}
if (micros() - startTime >= timeoutInMicros) {
return 0;
}
}
unsigned long endTime = micros();
return (endTime - time0);
}
void displayInitialScreen() {
display.setTextSize(1);
display.setTextColor(SH110X_WHITE);
display.setCursor(0,0);
display.setTextSize(1);
display.setCursor(8,14);
display.println("Shuttertester V1.21");
display.setTextSize(2);
display.setCursor(8,30);
display.println("Bereit f\201r");
display.setCursor(8,48);
display.println("Messung!!!");
display.display();
}
void displayDuration(unsigned long duration) {
double msecs = duration / 1000.0;
String text = String("") + msecs + String(" ms");
display.setCursor(5,20);
display.println(text);
Serial.println(text);
}
void displaySpeed(unsigned long duration) {
String text;
if (duration >= 1000000.0) {
double secs = duration / 1000000.0;
text = String("") + secs + String(" s");
} else {
double speeed = 1000000.0 / duration;
text = String("1/") + speeed + String(" s");
}
display.setCursor(5,45);
display.println(text);
Serial.println(text);
}
void displayResult(unsigned long duration) {
display.clearDisplay();
displayDuration(duration);
displaySpeed(duration);
display.display();
}
void setup() {
pinMode(RECEIVER_PIN, INPUT);
Serial.begin(9600);
display.begin(i2c_Address, true);
display.clearDisplay();
}
void loop() {
displayInitialScreen();
unsigned long duration = analogPulseIn(RECEIVER_PIN, HIGH, TIMEOUT);
if (duration > MIN_DURATION) {
displayResult(duration);
delay(2500);
}
display.clearDisplay();
}
Code: Alles auswählen
delay(2500);
Code: Alles auswählen
delay(500);