4x4 keypad to set a delay length for intervalometer


hi

i'm pretty new arduino, though have been running trough various projects week , have learnt much.  time put of use!

i building intervalometer sony camera.  have found source code trigger shutter , can amend delay length via timebetweenshots variable.  however, want use 4x4 keypad select different delay lengths programmed each key.  example, if want 3 second shutter delay, press '1' on keypad.

i managed include potentiometer code adjust length, though able second delay, switched keypad.

how can use keypad change timebetweenshots variable?

here code far:

code: [select]
// declarations
unsigned long timebetweenshots = 1000;    // time in ms 60000 = 60 seconds
int irled = 12;                // ir output signal anode of ir led
// cathode of ir led ground through 150 ohm resistor.
int begin = 13;               // indicates shutter start on led
int potpin = a2;    // select input pin potentiometer

// code send shutter release command b4b8f
int scodebits[] = {1,0,1,1,0,1,0,0,1,0,1,1,1,0,0,0,1,1,1,1};


#include <keypad.h>

const byte numrows= 4; //number of rows on keypad
const byte numcols= 4; //number of columns on keypad

//keymap defines key pressed according row , columns appears on keypad
char keymap[numrows][numcols]=
{
{'1', '2', '3', 'a'},
{'4', '5', '6', 'b'},
{'7', '8', '9', 'c'},
{'*', '0', '#', 'd'}
};

//code shows the keypad connections arduino terminals
byte rowpins[numrows] = {9,8,7,6}; //rows 0 3
byte colpins[numcols]= {5,4,3,2}; //columns 0 3

//initializes instance of keypad class
keypad mykeypad= keypad(makekeymap(keymap), rowpins, colpins, numrows, numcols);


void setup()
{
  // setup irled , begin led pins outputs
  pinmode(irled, output);      // sets digital pin output
  pinmode(begin, output);      // sets digital pin output
}


 

// infinite loop
void loop(){


  digitalwrite(begin, high);  // signal begin led on

  (int i=1; <= 3; i++)  // send command 3 times per sony specs
  {
    header();                    // send start header
    (int i=0; <= 19; i++)  // loop send bits
    {
          if(scodebits[i] == 1)  // data_is_one sent ?
          {
            data_is_one();              // yes, send data_is_one bit
          }
          else                  // no, data_is_zero sent
          {
            data_is_zero();              // send data_is_zero bit
          }
    }
    delay(11);                  // delay padding give approx 45ms between command starts
  }
  digitalwrite(begin, low);     // begin led off
  delay(timebetweenshots);      // hang wasting time before next shot
}

// routine give 40khz burst signal
void burst()                   // 40khz burst
{
  digitalwrite(irled, high);   // sets pin on
  delaymicroseconds(10);       // pauses 13 microseconds  (fudged 10us delay)   
  digitalwrite(irled, low);    // sets pin off
  delaymicroseconds(8);        // pauses 12 microseconds   (fudged 8us delay)
}

// routine give quiet period of data
void quiet()                   // quiet burst
{
  digitalwrite(irled, low);    // sets pin off
  delaymicroseconds(10);       // pauses 13 microseconds   (fudged 10us delay) 
  digitalwrite(irled, low);    // sets pin off
  delaymicroseconds(8);        // pauses 12 microseconds    (fudged 8us delay)
}

// routine send header data burst
// allows ir receiver set agc (gain)
// header burst timing 96 * 0.025us = 2.4ms
// quiet timing 24 * 0.025us = 600us
void header()
{
    (int i=1; <= 96; i++){
      burst();                // 40khz burst
    }
    (int i=1; <= 24; i++){
      quiet();                // no 40 khz
    }
}

// routine send 1 data burst
// burst timing 48 * 0.025us = 1.2ms
// quiet timing 24 * 0.025us = 600us
void data_is_one()
{
    (int i=1; <= 48; i++){
      burst();                // 40khz burst
    }
    (int i=1; <= 24; i++){
      quiet();                // no 40 khz
    }
}

// routine send 0 data burst
// burst timing 24 * 0.025us = 600us
// quiet timing 24 * 0.025us = 600us
void data_is_zero()
{
    (int i=1; <= 24; i++){
      burst();                // 40 khz burst
    }
    (int i=1; <= 24; i++){
      quiet();                // no 40 khz
    }
}


any assistance appreciated.

my advice first keypad working simple test sketch separate rest of code. may able use 1 of examples included keypad library(file > examples > keypad). test sketch print pressed key serial monitor. save test sketch use test if need troubleshoot keypad later. once have working easier incorporate working keypad code project.


Arduino Forum > Using Arduino > Programming Questions > 4x4 keypad to set a delay length for intervalometer


arduino

Comments

Popular posts from this blog

DHT11 Time out error using v0.4.1library

Sketch upload fails with Java error (___REMOVE___/bin/avrdude)!

Arduino Uno + KTY81/210 temperature sensor