Dúvida ligação máquina fotográfica DSLR ao Arduino

Bem,acho que ando a puxar demais pela cabeça...ainda não consegui perceber como controlar as sequências com oito bits,consigo perceber a ideia de ver isto como sequências e estados que se vão repetindo,mas a sequência de pinos não consigo compreender...

Consegui por o código a compilar,mas não o compreendi e não consigo trabalhar com ele...

//
unsigned long time;

#define PASSOS     8

const char luz_exteriorPin = 9;
const char pushButtonPin = 13;  //botão de inicio ligado ao pinp 13
const char cameraPin = 10;   //shutter da máquina ligado ao pino 10
const char valvulaPin = 11;  //válvula ligada ao pino 11
const char flashPin = 12;    //flash ligado ao pino 12

//sequências... 
/*
As sequências são definidas por bits. cada unsigned char tem 8 bits. 
Estados                  0     1    2     3    4    5     6     7
bit 0 - Luz exterior     1 -- 0 -- 0 -- 0 -- 0 -- 0 -- 0 -- 1
bit 1 - válvula          0 -- 1 -- 0 -- 1 -- 0 -- 0 -- 0 -- 0
bit 2 - obturador        0 -- 1 -- 1 -- 1 -- 1 -- 1 -- 1 -- 0
bit 3 - flash.           0 -- 0 -- 0 -- 0 -- 0 -- 1 -- 0 -- 0

*/
unsigned char sequencia_pinos[8]; //imagine que a sequência tem 8 estados
unsigned long sequencia_tempos[8]; //tempos entre sequências...

void executa_sequencia(unsigned long start) {
   unsigned char seq_counter = 0; 
   
   for (int i = 0; i < PASSOS; i++) { //percorre as sequencias
      do {
          digitalWrite(luz_exteriorPin, (sequencia_pinos[i] & 0x1));
          digitalWrite(valvulaPin, (sequencia_pinos[i] >> 1) & 0x1);
          digitalWrite(cameraPin, (sequencia_pinos[i] >> 2) & 0x1);
          digitalWrite(flashPin, (sequencia_pinos[i] >> 3) & 0x1);
      }while (millis() - start <= sequencia_tempos[i]);  
      start = millis(); //reinicializa temporizacção
   }//end for   
       
}

void setup()
 {
//inicializa sequencia de pinos.
   sequencia_pinos[0] = 0b00000001;
   sequencia_pinos[1] = 0b00000000;
   sequencia_pinos[2] = 0;
   sequencia_pinos[3] = 0b00000010;
   sequencia_pinos[4] = 0b00000100;
   sequencia_pinos[5] = 0b00001100;
   sequencia_pinos[6] = 0b00000100;
   sequencia_pinos[0] = 0b00000001;

//inicializa sequencia de tempo.  
   sequencia_tempos[0] = 1000; //1000 para testar e ver se tudo funciona como deve ser. 
   sequencia_tempos[1] = 1000;
   sequencia_tempos[2] = 1000;
   sequencia_tempos[3] = 1000;
   sequencia_tempos[4] = 1000;
   sequencia_tempos[5] = 1000;
   sequencia_tempos[6] = 1000;
   sequencia_tempos[7] = 1000;
   sequencia_tempos[8] = 1000;


   pinMode(pushButtonPin,INPUT);    //inicia o botão como input
   pinMode(cameraPin,OUTPUT);    //inicia o shutter como output
   pinMode(valvulaPin,OUTPUT);   //inicia a válvula como output
   pinMode(flashPin,OUTPUT);     //inicia o flash como output

     
 }

 
 void loop() { 
    if (digitalRead(pushButtonPin) == 1) { //carregaste no botão
        executa_sequencia(millis());
    }


 }

bubulindo:
Nota que isto tem bugs, mas é muito mais flexível pois podes aumentar o numero de saidas e tempos à sequência. Se perceberes como é feita a configuração das saídas com os tempos estás lançado. :slight_smile:
Tenta ver se compila e se faz o que pretendes (coloca uma sequência simples com alterações de luzes em todos os níveis para testar)
Se isto funcionar, depois é uma questão de adicionar o LCD. Isso será o mais complicado. :\ LOL

Se me puderes abrir os olhos ali na parte do void setup() e na sequência de pinos talvez compreenda...
Adicionar o LCD é ainda mais complicado ainda?
Então acho que é melhor ficar por aqui,LOL