Time lapse

From NYC Resistor Wiki
Jump to: navigation, search
  1. // DE-DP001 Interface Example for Arduino / ATMEGA168
  2. // Full of bugs =P
  3. // matt@nycresistor.com
  4.  
  5. #define DATAOUT 11//MOSI
  6. #define SPICLOCK 13//sck
  7. #define DIMM 9//DIMM
  8. #define APP 4
  9. #define SHUT 3
  10. #define FOC 2
  11.  
  12. byte numbers[9];
  13.  
  14. int shotcount;
  15.  
  16. char spi_transfer(volatile char data)
  17. {
  18.   SPDR = data;
  19.   //
  20.   while (!(SPSR & (1<<SPIF)))
  21.   {
  22.   };
  23.   return SPDR;
  24. }
  25.  
  26. void setup()
  27. {
  28.   byte i;
  29.   byte clr;
  30.   pinMode (DATAOUT, OUTPUT);
  31.   pinMode (SPICLOCK, OUTPUT);
  32.   pinMode (10, OUTPUT);
  33.   pinMode (FOC, OUTPUT);
  34.   pinMode (SHUT, OUTPUT);
  35.   pinMode (APP, OUTPUT);
  36.   pinMode (DIMM, OUTPUT);
  37.   digitalWrite(DIMM, HIGH);
  38.  
  39.   numbers[0] = 0x3F;
  40.   numbers[1] = 0x06;
  41.   numbers[2] = 0x5B;
  42.   numbers[3] = 0x4F;
  43.   numbers[4] = 0x66;
  44.   numbers[5] = 0x6D;
  45.   numbers[6] = 0x7D;
  46.   numbers[7] = 0x07;
  47.   numbers[8] = 0x7F;
  48.   numbers[9] = 0x6F;
  49.  
  50.   SPCR = 0b01010010;
  51.   clr = SPDR;
  52.   delay(32);
  53. }
  54.  
  55. byte write_led(int value1 , int value2, int value3, int value4)
  56. {
  57.   digitalWrite(DIMM,LOW);
  58.   //2 byte opcode
  59.  spi_transfer(value1);
  60.  spi_transfer(value2);
  61.  spi_transfer(value3);
  62.  spi_transfer(value4);
  63.   delay(36);
  64.   digitalWrite(DIMM,HIGH); //release chip, signal end transfer
  65.  
  66. }
  67.  
  68. byte cam_shot() {
  69.   digitalWrite(FOC, HIGH);
  70.   delay(10);
  71.   digitalWrite(FOC, LOW);
  72.   delay(10);
  73.   digitalWrite(SHUT, HIGH);
  74.   delay(2);
  75.   digitalWrite(SHUT, LOW);
  76.   shotcount++;
  77. }
  78.  
  79. byte display(int count) {
  80.   byte first_digit;
  81.   byte second_digit;
  82.   byte third_digit;
  83.   byte fourth_digit;
  84.  
  85.   int newcount;
  86.  
  87.   int bucket = count / 1000;
  88.   newcount = count - (bucket * 1000);
  89.   first_digit = numbers[bucket];
  90.  
  91.   bucket = newcount / 100;
  92.   newcount = newcount - (bucket * 100);
  93.   second_digit = numbers[bucket];
  94.  
  95.   bucket = newcount / 10;
  96.   newcount = newcount - (bucket * 10);
  97.   third_digit = numbers[bucket];
  98.  
  99.   bucket = count % 10;
  100.   fourth_digit = numbers[bucket];
  101.  
  102.   write_led(fourth_digit, third_digit, second_digit, first_digit);
  103. }
  104.  
  105. void loop() 
  106. {
  107.   cam_shot();
  108.   display(shotcount);
  109.   delay(10000); // Display refresh  
  110. }
Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox