• Nenhum resultado encontrado

Capítulo IV – Desenvolvimento do Protótipo

4.4.3.5. Código do Módulo Adaptador

O módulo adaptador tem um funcionamento semelhante ao do módulo dispensador, no entanto, neste módulo, as configurações das tomas são efetuadas de X em X horas e não de forma livre. Também não existem mecanismos de verificação do sucesso da toma, pelo que possui um funcionamento mais simples.

Inicialmente, e à semelhança do módulo dispensador, o sistema aguarda pelo momento (hora e minuto) em que a toma se realiza. Assim que os valores do tempo atual, provenientes do RTC, coincide com os valores das variáveis responsáveis por indicarem o momento da toma do módulo adaptador, o programa entra num trecho de código. Neste, inicialmente é dada a indicação de que os alertas podem ser lançados e, à semelhança do módulo dispensador, são efetuados cálculos que permitem determinar o momento em que os alertas devem ser cessados.

//Executa assim que chega o momento da toma

if((myRTC.hours == tomaHoraA && myRTC.minutes == tomaMinutoA) && estadoLedA == 0) {

//Permite que o código dos alertas do módulo correspondente seja

executado

estadoLedA = 1;

//Define o momento em que os alertas são interrompidos

momentoDesligaLedMinuto = tomaMinutoA + tempoDesligaAlarmesA;

//Implementa a mudança de hora

if(momentoDesligaLedMinuto < 60) { momentoDesligaLedHora = tomaHoraA; } else {

momentoDesligaLedMinuto = momentoDesligaLedMinuto - 60; momentoDesligaLedHora = tomaHoraA + 1;

//Implementa a mudança de dia if(momentoDesligaLedHora == 24) { momentoDesligaLedHora = 0; }

} }

Após ser dada a indicação de que os alertas do módulo adaptador podem ser emitidos, a execução entra num trecho que simplesmente liga o LED verde e a buzina, de forma intermitente. Estes alertas são emitidos até que o tempo de duração definido nas configurações

das tomas termine, ou que o utilizador pressione o botão de pressão, interrompendo instantaneamente os alarmes.

if(estadoLedA == 0) {

digitalWrite(ledVerdeMA,LOW); digitalWrite(buzzer,LOW);

//Emite os alertas do módulo adaptador

} else if(estadoLedA == 1 && alarmesDesligadosUtilizador == 0) { digitalWrite(ledVerdeMA,HIGH); digitalWrite(buzzer,HIGH); delay(500); digitalWrite(ledVerdeMA,LOW); digitalWrite(buzzer,LOW); delay(750);

//Caso o botão de pressão seja pressionado, desliga os alertas do

módulo adaptador

if(digitalRead(botaoPressao) == LOW) { alarmesDesligadosUtilizador = 1; }

}

Assim que tiver decorrido o tempo calculado anteriormente, uma condição que especifica que o tempo atual é igual ao tempo em que os alertas do módulo adaptador são cessados é satisfeita e, deste modo, a execução passa para um novo bloco de código. Neste trecho é contabilizada uma dose e os alertas são cessados. Visto que, para este módulo, foi utilizada o regime de tomas de X em X horas, é necessário determinar qual o horário para a próxima toma. Para isso, é retirado o valor definido nas configurações da toma para o intervalo de tempo até à próxima toma. Com a soma deste valor ao valor da hora da última toma, é possível verificar a nova hora a que deve ser realizada a próxima toma. Este processo é contínuo e realizado de forma indefinida enquanto o módulo se encontrar em utilização.

//Quando chega o momento de interromper os alertas, executa este trecho

else if(myRTC.hours == momentoDesligaLedHora && myRTC.minutes == momentoDesligaLedMinuto && estadoLedA == 1) {

numAlertasA++; //Reinicia as variáveis momentoDesligaLedHora = 0; momentoDesligaLedMinuto = 0; alarmesDesligadosUtilizador = 0;

//Atualiza os dados da próxima toma

tomaMinutoA = tomaMinutoA;

tomaHoraA = tomaHoraA + tomaHoraEmHora;

//Implementa a mudança de dia

if(tomaHoraA >= 24) { tomaHoraA = tomaHoraA - 24; } estadoLedA = 0; }

4.5. Nota Conclusiva

Após a leitura deste Capítulo, pode-se concluir que o protótipo foi desenvolvido com êxito, seguindo a estrutura e a arquitetura idealizadas no Capítulo anterior.

Foram necessárias várias tentativas e correções para se culminar num protótipo funcional. Inicialmente, existiu a necessidade de corrigir as imperfeições da estrutura física do dispositivo resultantes dos defeitos da impressão, no entanto, conseguiu-se ultrapassar as limitações e defeitos existentes no início, obtendo-se, assim, uma estrutura física aceitavelmente coesa.

Após isso, foi efetuada a montagem dos periféricos e a sua respetiva ligação ao Arduino. Durante este processo surgiu uma dificuldade acrescida uma vez que houve a necessidade de arranjar solução para que os periféricos ficassem presos à estrutura e para que os fios e cabos de ligação não se desencaixassem do Arduino durante o manuseamento do dispensador. Foi também necessário um processo de testes de tentativa-erro para garantir que todas as ligações e os respetivos periféricos se encontravam em pleno funcionamento e estáveis.

Com toda a estrutura mecânica preparada, foi possível desenvolver o código que especifica o comportamento do dispositivo. O mesmo foi redigido de modo a facilitar o trabalho futuro de integração de mais módulos e da base de dados. Surgiram, inicialmente, dificuldades relativamente ao consumo energético do sistema, o que comprometia a autonomia do dispositivo sendo pois, que ao final de algum tempo, o dispositivo se reiniciava por falta de energia, tornando a sua utilização inviável uma vez que perdia a capacidade de realizar as dispensas de forma adequada. Desta forma, houve necessidade de implementar mecanismos

que permitissem reduzir a quantidade de processamento efetuada e, com isto, proporcionar uma redução do consumo energético. O código que implementa o funcionamento do dispositivo foi desenvolvido com sucesso, sendo que, após as alterações necessárias, o dispensador comportava-se da forma pretendida. O processo de desenvolvimento decorreu em simultâneo à realização de testes ao sistema. Foram simuladas várias situações que, de alguma forma, pudessem quebrar a estrutura programada originando, assim, erros de execução. Foram introduzidas as validações necessárias para contornar o surgimento destes problemas. Apesar de ser impossível garantir que não possa surgir nenhum erro ou incoerência na execução do programa, existiu o cuidado de tentar reduzir ao máximo a probabilidade das suas ocorrências. É de referir que a arquitetura estipulada, assim como os materiais e componentes utilizados, foram escolhidos tendo em vista o desenvolvimento de um protótipo simples e fácil de utilizar e interpretar por qualquer pessoa.

Embora o protótipo não esteja perfeito, este revela-se funcional, demonstrando bons indicadores e potencialidades de melhoria para o futuro. É então possível concluir que esta etapa foi efetuada com bastante êxito. Agora, é necessária a realização de testes de usabilidade, de forma a validar a sua utilização em ambiente real.