terça-feira, 9 de abril de 2019

Semaforo com Interrupção e LCD

/*
  Semaforo cruzamento 2 vias
  sm1
  VM1  pino 3
  AM1  pino 2
  VD1  pino 1

  sm2
  VM2  pino 6
  AM2  pino 5
  VD2  pino 4

  Vermelho  VM tempo 11s
  Amarelo   AM tempo 1s
  Verde     VD tempo 10s

  Modificado em 16 out 2016
  by Luiz O.Pilger Antonio
  Modificado em 09/04/2019
*/

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Inicializa o display no endereco 0x27
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

byte VMP = 10;
byte VDP = 9;

byte VM2 = 8;
byte AM2 = 7;
byte VD2 = 6;

byte VM1 = 5;
byte AM1 = 4;
byte VD1 = 3;

const byte interruptPin = 2;
volatile byte state = LOW;
// A função de configuração é executada uma vez quando você pressiona reset ou liga a placa
void setup() {
  lcd.begin (16, 2);
  // inicializa os pinos digital VM, AM e VD como saída
  pinMode(VM1, OUTPUT);
  pinMode(AM1, OUTPUT);
  pinMode(VD1, OUTPUT);

  pinMode(VM2, OUTPUT);
  pinMode(AM2, OUTPUT);
  pinMode(VD2, OUTPUT);

  pinMode(VMP, OUTPUT);
  pinMode(VDP, OUTPUT);

  pinMode(interruptPin, INPUT_PULLUP);
  //attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE);
  //attachInterrupt(digitalPinToInterrupt(interruptPin), blink, RISING);
  attachInterrupt(digitalPinToInterrupt(interruptPin), blink, FALLING); //Configurando a interrupção);
}

// A função de loop é repetidamente de forma infinita
void loop() {
  // =========================================
  // etapa 1 - 1=verde 2=vermelho
  lcd.setCursor(0, 1);
  lcd.print("1-VD 2-VM P-VM");
  //sm 1
  digitalWrite(VM1, LOW);  // Desiga o Vermelho 1
  digitalWrite(AM1, LOW);  // Desiga o Amarelo  1
  digitalWrite(VD1, HIGH); // Liga o Verde      1
  //sm 2
  digitalWrite(VM2, HIGH); // Liga o Vermelho   2
  digitalWrite(AM2, LOW);  // Desiga o Amarelo  2
  digitalWrite(VD2, LOW);  // Desiga o Verde    2
  //
  digitalWrite(VMP, HIGH); // Liga o Vermelho   P
  digitalWrite(VDP, LOW);  // Desiga o Verde  P
  // tempo
  delay(5000);            // tempo de 10s
  // =========================================
  // etapa 2 - 1=amarelo 2=vermelho
  lcd.setCursor(0, 1);
  lcd.print("1-AM 2-VM P-VM");
  // sm 1
  digitalWrite(VM1, LOW);  // Desiga o Vermelho 1
  digitalWrite(AM1, HIGH); // Liga o Amarelo    1
  digitalWrite(VD1, LOW);  // Desiga o Verde    1
  // sm 2
  digitalWrite(VM2, HIGH); // Liga o Vermelho   2
  digitalWrite(AM2, LOW);  // Desiga o Amarelo  2
  digitalWrite(VD2, LOW);  // Desiga o Verde    2

  digitalWrite(VMP, HIGH); // Liga o Vermelho   P
  digitalWrite(VDP, LOW);  // Desiga o Verde  P
  // tempo
  delay(1000);             // tempo de 1s
  // =========================================
  // etapa 3 - 1=vermelho 2=verde
  lcd.setCursor(0, 1);
  lcd.print("1-VM 2-VD P-VM");
  //sm 1
  digitalWrite(VM1, HIGH); // Liga o Vermelho   1
  digitalWrite(AM1, LOW);  // Desiga o Amarelo  1
  digitalWrite(VD1, LOW);  // Desiga o Verde    1
  // sm2
  digitalWrite(VM2, LOW);  // Desiga o Vermelho 2
  digitalWrite(AM2, LOW);  // Desiga o Amarelo  2
  digitalWrite(VD2, HIGH); // Liga o Verde      2

  digitalWrite(VMP, HIGH); // Liga o Vermelho   P
  digitalWrite(VDP, LOW);  // Desiga o Verde  P
  delay(5000);            // tempo de 10s
  // =========================================
  // etapa 4 - 1=vermelho 2=amarelo
  lcd.setCursor(0, 1);
  lcd.print("1-VM 2-AM P-VM");
  //sm 1
  digitalWrite(VM1, HIGH); // Liga o Vermelho   1
  digitalWrite(AM1, LOW);  // Desiga o Amarelo  1
  digitalWrite(VD1, LOW);  // Desiga o Verde    1
  // sm2
  digitalWrite(VM2, LOW);  // Desiga o Vermelho 2
  digitalWrite(AM2, HIGH); // Desiga o Amarelo  2
  digitalWrite(VD2, LOW);  // Liga o Verde      2

  digitalWrite(VMP, HIGH); // Liga o Vermelho   P
  digitalWrite(VDP, LOW);  // Desiga o Verde  P
  delay(1000);             // tempo de 1s

  if (state == HIGH) {
    lcd.setCursor(0, 0);
    lcd.print("Pedestre Passe");
    lcd.setCursor(0, 1);
    lcd.print("1-VM 2-VM P-VD");
    //sm 1
    digitalWrite(VM1, HIGH); // Liga o Vermelho   1
    digitalWrite(AM1, LOW);  // Desiga o Amarelo  1
    digitalWrite(VD1, LOW);  // Desiga o Verde    1
    // sm 2
    digitalWrite(VM2, HIGH); // Liga o Vermelho   2
    digitalWrite(AM2, LOW);  // Desiga o Amarelo  2
    digitalWrite(VD2, LOW);  // Desiga o Verde    2

    digitalWrite(VMP, LOW); // Liga o Vermelho   P
    digitalWrite(VDP, HIGH);  // Desiga o Verde  P
    delay(5000);
    lcd.setCursor(0, 0);
    lcd.print("Pedeste aguarde");
    state = LOW;
  }
}

void blink() {


  state = HIGH;
}

quinta-feira, 4 de abril de 2019

Código Referncia para Interrupção do Arduino

//***************** Interrupções Aula 1  *********************************

/* Instituição: Escola Técnica Parobé
  Autor: Professor Luis Antonio  e Aransegui     **Atenção: Programas sem boas práticas não serão aceitos***
  Data 04/04/2019
  Versão 0.1.1*/

//Parametrização e Otimização do Projeto


#define ledPin 13 // Define rótulo ledPin ao pino 13
#define interruptPin 2 // Define Rótulo interruptPin ao pino 2

// No Arduino UNO, somente os pinos 1 e 2 são recomendados

// Declaração de Funções(Planejar antes do Início)

void panico();// Declara o método,função ou subrotina para acionar o Led

//Declaração de Variáveis


volatile byte state = LOW; // Determina nível baixo para a variável state em memória temporá

// Configuração do do Projeto

void setup() {
  pinMode(ledPin, OUTPUT);// define pino como saída
  pinMode(interruptPin, INPUT_PULLUP);// Configura a interrupção para
  attachInterrupt(digitalPinToInterrupt(interruptPin), panico, CHANGE);// Ativa a INT0 com os parâmetros (pino, função,novo estado)
}

// Acionamento do Led

void acionaLed() {
  digitalWrite(ledPin, state);// Ativa o pino 13 em HIGH
}

//Funções em Loop,Obs.: Aqui devem ser colocadas as funções ou subrotinas que farão parte do programa

 void loop() {
  digitalWrite(ledPin,state);
  //panico();// roda o método para acionar led
}

// Método chamado pela interrupção no pino 2

void panico() {
  state = !state;// inverte o estado de state no pino 2
}

Interrupção Arduino

www.arduino.cc/reference/pt/language/functions/external-interrupts/attachinterrupt/


Portal de Silicio