Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define PIN_STATUS 13
- #define PIN_IR_LED 12
- #define FREQ 38400 // IR frequence
- const int analogInPin = A0; // Analog input pin that the potentiometer is attached to
- //shutter sequence (on,off,on,off ... in microsecond)
- unsigned long sequence[] = {
- 2000,27830,390,1580,410,3580,400,63200,2000,27830,390,1580,410,3580,400,0};
- int seq_l;
- int delayVal;
- //oscd is a delay in microsecond used at each oscillation.
- int oscd;
- int getTime(){
- int sensorValue = analogRead(analogInPin);
- return ((sensorValue*0.82)/10);
- }
- void oscillate(int pin, unsigned long n, int shine){
- int ir_status=0;
- while(n>0){
- n--;
- delayMicroseconds(oscd);
- ir_status = !ir_status;
- digitalWrite(pin, ir_status && shine);
- }
- }
- void snap(){
- int i;
- digitalWrite(PIN_STATUS, 1);
- for(i=0;i<seq_l;i++){
- oscillate(PIN_IR_LED, sequence[i], i%2==0);
- }
- digitalWrite(PIN_STATUS, 0);
- }
- void setup() {
- Serial.begin(9600);
- int min=1, max=100, i;
- int last_oscd=0;
- unsigned long before, intervalle;
- oscd=max;
- seq_l = sizeof(sequence)/sizeof(unsigned long);
- pinMode(PIN_STATUS, OUTPUT);
- pinMode(PIN_IR_LED, OUTPUT);
- while(last_oscd!=oscd){
- last_oscd=oscd;
- oscd=(min+max)>>1;
- before=millis();
- oscillate(PIN_STATUS, FREQ, 1);
- intervalle=millis()-before;
- if(intervalle >= 1000) max=oscd;
- else min=oscd;
- }
- for(i=0;i<seq_l;i++){
- sequence[i] = (sequence[i] * FREQ) / (intervalle * 1000);
- }
- }
- void loop() {
- delayVal = getTime()+2;
- for (int i=0;i<delayVal;i++){
- delay(1000);
- Serial.println(delayVal);
- delayVal = getTime()+2;
- }
- snap();
- }
Add Comment
Please, Sign In to add comment