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.
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