Escolar Documentos
Profissional Documentos
Cultura Documentos
__________________________________________________________
Sistemas Digitais 2016/2
Vitória /2016
DESCRIÇÃO DO PRODUTO (PROJETO)
MANUAL DE OPERAÇÃO
MANUAL DE INSTALAÇÃO
3. Portão fechando;
Todos esses estados foram análisados pela função principal, cujo fluxograma foi
apresentado abaixo na figura 3. O tempo máximo, ou limite, representa o tempo no qual
o portão aberto retorna a fechar. Esse tempo é definido pelo usuário.
Para a eliminação de algum ruído no botão e nos fins de curso, foi utilizado
debouce por software, descrito no fluxograma da figura 5 .
Figura 3: Fluxograma da rotina principal.
Figura 4: Função do tratamento do botão acionador do portão.
Figura 5: Debounce.
ANEXO A – CÓDIGO FONTE DO FIRMWARE
Definições gerais:
#include <LiquidCrystal.h>
const int botaoPin = 2;
const int fimDeCursoAberto = 3;
const int fimDeCursoFechado = 4;
const int infraVermelho = 5;
const int ledPinVerd = 6;
const int ledPinVerm = 7;
const int potenciometro = A0;
const int pottime = A3;
int temp = 0;
int cont = 0;
long tempo = 0;
Setup:
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);//inicializa lcd
pinMode(botaoPin, INPUT_PULLUP);
pinMode(fimDeCursoAberto, INPUT_PULLUP);
pinMode(fimDeCursoFechado, INPUT_PULLUP);
pinMode(infraVermelho, INPUT_PULLUP);
pinMode(potenciometro, INPUT);
pinMode(pottime, INPUT);
pinMode(ledPinVerm, OUTPUT);
pinMode(ledPinVerd, OUTPUT);
attachInterrupt (0, radioReceptor, FALLING);}
Função Principal:
void loop() {
digitalWrite(ledPinVerm, LOW);
digitalWrite(ledPinVerd, LOW);
float POT = analogRead(potenciometro);
Serial.println(POT);
while (1) {
//Delay para contar 5 seg
atualiza();
//delay (50);
Serial.println(POT);
// Tempo de 5 segundo
if (temp == tempo && cont == 2) {
cont = 3;
temp = 0;
}
if (temp == tempo && cont == 4) {
cont = 3;
temp = 0;
}
if (temp == tempo && cont == 6) {
cont = 3;
temp = 0;
}
// Serial.println(temp);
// Serial.println(cont);
//Leitura do potenciometro
if (analogRead(potenciometro) > 500) {
digitalWrite(ledPinVerm, LOW);
digitalWrite(ledPinVerd, LOW);
// Serial.println("Carga muito alta, motor desligado\n");
while (1) {
}
}
//Infravermelho
if (digitalRead(infraVermelho) == LOW && cont == 3) {
delay(100);
if (digitalRead(infraVermelho) == LOW) {
// Serial.println("Portao obstruido \n");
digitalWrite(ledPinVerm, LOW);
digitalWrite(ledPinVerd, LOW);
cont = 8;
}
}
//Fins de curso
if (digitalRead(fimDeCursoAberto) == LOW && cont == 1) {
delay(100);
if (digitalRead(fimDeCursoAberto) == LOW) {
// Serial.println("Portao totalmente aberto \n");
digitalWrite(ledPinVerm, LOW);
digitalWrite(ledPinVerd, LOW);
cont = 6;
temp = 0;
}
}
else if (cont == 1) {
digitalWrite(ledPinVerm, HIGH);
digitalWrite(ledPinVerd, HIGH);
// Serial.println("Portao Abrindo \n");
}
else if (cont == 2) {
digitalWrite(ledPinVerm, LOW);
digitalWrite(ledPinVerd, LOW);
// Serial.println("Portao parado e aberto\n");
temp++;
}
else if (cont == 3) {
digitalWrite(ledPinVerm, HIGH);
digitalWrite(ledPinVerd, LOW);
// Serial.println("Portao Fechando \n");
}
else if (cont == 4) {
digitalWrite(ledPinVerm, LOW);
digitalWrite(ledPinVerd, LOW);
// Serial.println("Portao parado e aberto\n");
temp++;
}
else if (cont == 5) {
cont = 1;
}
else {
temp++;
if (cont == 8) {
cont = 3;
}
}
}
}
void atualiza() {
int Tempo = analogRead(pottime);
float Time = Tempo * (150.0 / 1023);
// Serial.println(Tempo);