Pesquisar neste blog

24/02/2020

Display 7 segmentos com PIC 16F877A (2)

Laço de repetição no display de 7 segmentos usando goto














Código feito em mikro PRO for

void main() {

      trisb = 0;//definindo todos os pinos como saída
      portb = 0; //desligando

      inicio:
      portb = 0b00111111;//forma binária, 'imprimndo o [0]'
      delay_ms(500);

      portb = 0b00000110;//'imprimndo o [1]'
      delay_ms(500);

      portb = 91; //forma decimal, 'imprimindo o [2]'
      delay_ms(500);

      portb = 79;  // [3]
      delay_ms(500);//0,5s de espera

      portb = 0x66; //forma hexadecimal [4]
      delay_ms(500);

      portb = 0x6D; //forma hexadecimal  [5]
      delay_ms(500);

      portb = 0x7D; // [6]
      delay_ms(500);

      portb = 0x7;// forma hexadecimal  [7]
      delay_ms(500);

      portb = 0b01111111;//[8]
      delay_ms(500);

      portb = 0b01100111; //[9]
      delay_ms(500);
      goto inicio;  //retorna para para o inicio
}

Desafio 1

Fazer o Led piscar conforme o gráfico












Resolução:

Código feito em CCS C Compiler

#include <16F877A.h>
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES BROWNOUT                 //Reset when brownout detected
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected

#use delay(clock=20000000)

void main(){

   while(TRUE){
      output_low(PIN_B2);
   
      for(int i = 0; i< 50; i++){
         for(int j = 0; j < 100; j++){
            output_high(PIN_B2);
            delay_us(i*(1000/50));
            output_low(PIN_B2);
            delay_us(1000-(1*(1000/50)));
         }
      }
   }

}


18/02/2020

Pisca Leds 3 com PIC 16F877A

Objetivo: Piscar leds consequentemente usando for

















Código feito em CCS C Compiler

#include <16F877a.h>
#use delay(crystal=20MHz)

void main(){
   char pins[] = {PIN_B0,PIN_B1,PIN_B2,PIN_B3,PIN_B4};
 
   while(TRUE){
      for(int i=0; i<=4; i++){
         output_high(pins[i]);
         delay_ms(250);
         output_low(250);
         delay_ms(250);
      }
   
      for(i=5; i>=1; i--){
         output_high(pins[i-1]);
         delay_ms(250);
         output_low(pins[i-1]);
         delay_ms(250);
      }
   }
}

Display 7 segmentos usando PIC 16F877A (1)




















Código feito em mikro PRO for

void main() {
      trisb = 0;//definindo todos os pinos como saída
      portb = 0; //desligando
   
      portb = 0b00111111;//forma binária, 'imprimndo o [0]'
      delay_ms(500);
   
      portb = 0b00000110;//'imprimndo o [1]'
      delay_ms(500);
   
      portb = 91; //forma decimal, 'imprimindo o [2]'
      delay_ms(500);
   
      portb = 79;  // [3]
      delay_ms(500);//0,5s de espera
   
      portb = 0x66; //forma hexadecimal [4]
      delay_ms(500);
   
      portb = 0x6D; //forma hexadecimal  [5]
      delay_ms(500);
   
      portb = 0x7D; // [6]
      delay_ms(500);
   
      portb = 0x7;// forma hexadecimal  [7]
      delay_ms(500);
   
      portb = 0b01111111;//[8]
      delay_ms(500);
   
      portb = 0b01100111; //[9]
      delay_ms(500);
}

PiscaLed 2 com PIC 16F877A

Objetivo: Ligar e desligar vários leds consequentemente

Simulador usando Proteus 8.8


















Código feito no software mikroC Pro for, versão 7.2

void main() {
    trisb = 0;

    /*portb.rb0 = 1;
    portb.rb1 = 1;
    portb.rb2 = 1;
    portb.rb3 = 1;
    portb.rb4 = 1;
    portb.rb5 = 1;
    portb.rb6 = 1;
    portb.rb7 = 1;*/
 
    //método2 para ligar todos leds
    //portb = 0b11111111;//substitui o método acima, economizando linhas
 
    //método3  para ligar todos leds
    portb = 255;//forma em decimal
    //portb = 231;  //fazendo teste com com a porta 231
    delay_ms(500);//desligando os leds começando por rb7
 
    portb.RB7 = 0;
    delay_ms(500);
 
    portb.RB6 = 0;
    delay_ms(500);
 
    portb.rb5 = 0;
    delay_ms(500);//espera 0,5s
 
    portb.rb4 = 0;
    delay_ms(500);
 
    portb.RB3 = 0;
    delay_ms(500);
 
    portb.RB2 = 0;
    delay_ms(500);
 
    portb.rb1 = 0;
    delay_ms(500);
 
    portb.rb0 = 0;
    delay_ms(500);
}

17/02/2020

Pisca Led1 com PIC 16F877A

Software Proteus 8.8
























Código feito em CCS C Compiler

#include <16F877A.h>
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES BROWNOUT                 //Reset when brownout detected
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected

#use delay(clock=20000000)

void main(){

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   // TODO: USER CODE!!
   while(true){
      output_high(PIN_B2);
      delay_ms(1000);
      output_low(PIN_B2);
      delay_ms(1000);
   }

}

30/01/2020

Programa 18

Número aleatório no Arduíno com display 7 segmentos

Emulador feito no tinkercad.com















#define pinA 10
#define pinB 9
#define pinC 6
#define pinD 7
#define pinE 8
#define pinF 11
#define pinG 12
#define pinPD 5
#define pinBotao 2

int numero = 10;
boolean botaoAtu = false;
boolean botaoAnt = false;

void setup() {
  // put your setup code here, to run once:
  pinMode(pinBotao, INPUT);

  pinMode(pinA, OUTPUT);
  pinMode(pinB, OUTPUT);
  pinMode(pinC, OUTPUT);
  pinMode(pinD, OUTPUT);
  pinMode(pinE, OUTPUT);
  pinMode(pinF, OUTPUT);
  pinMode(pinG, OUTPUT);
  pinMode(pinPD, OUTPUT);

  randomSeed( analogRead(A0) );
}

void loop() {
  // put your main code here, to run repeatedly:
  botaoAtu = digitalRead(pinBotao);

  if (botaoAtu && !botaoAnt) {
     numero = random(10);
  }
  botaoAnt = botaoAtu;

  switch (numero) {
      case 0:
        digitalWrite(pinA, HIGH);
        digitalWrite(pinB, HIGH);
        digitalWrite(pinC, HIGH);
        digitalWrite(pinD, HIGH);
        digitalWrite(pinE, HIGH);
        digitalWrite(pinF, HIGH);
        digitalWrite(pinG, LOW);
        digitalWrite(pinPD, LOW);
        break;

      case 1:
        digitalWrite(pinA, LOW);
        digitalWrite(pinB, HIGH);
        digitalWrite(pinC, HIGH);
        digitalWrite(pinD, LOW);
        digitalWrite(pinE, LOW);
        digitalWrite(pinF, LOW);
        digitalWrite(pinG, LOW);
        digitalWrite(pinPD, LOW);
        break;

      case 2:
        digitalWrite(pinA, HIGH);
        digitalWrite(pinB, HIGH);
        digitalWrite(pinC, LOW);
        digitalWrite(pinD, HIGH);
        digitalWrite(pinE, HIGH);
        digitalWrite(pinF, LOW);
        digitalWrite(pinG, HIGH);
        digitalWrite(pinPD, LOW);
        break;

      case 3:
        digitalWrite(pinA, HIGH);
        digitalWrite(pinB, HIGH);
        digitalWrite(pinC, HIGH);
        digitalWrite(pinD, HIGH);
        digitalWrite(pinE, LOW);
        digitalWrite(pinF, LOW);
        digitalWrite(pinG, HIGH);
        digitalWrite(pinPD, LOW);
        break;

      case 4:
        digitalWrite(pinA, LOW);
        digitalWrite(pinB, HIGH);
        digitalWrite(pinC, HIGH);
        digitalWrite(pinD, LOW);
        digitalWrite(pinE, LOW);
        digitalWrite(pinF, HIGH);
        digitalWrite(pinG, HIGH);
        digitalWrite(pinPD, LOW);
        break;

      case 5:
        digitalWrite(pinA, HIGH);
        digitalWrite(pinB, LOW);
        digitalWrite(pinC, HIGH);
        digitalWrite(pinD, HIGH);
        digitalWrite(pinE, LOW);
        digitalWrite(pinF, HIGH);
        digitalWrite(pinG, HIGH);
        digitalWrite(pinPD, LOW);
        break;

      case 6:
        digitalWrite(pinA, HIGH);
        digitalWrite(pinB, LOW);
        digitalWrite(pinC, HIGH);
        digitalWrite(pinD, HIGH);
        digitalWrite(pinE, HIGH);
        digitalWrite(pinF, HIGH);
        digitalWrite(pinG, HIGH);
        digitalWrite(pinPD, LOW);
        break;

      case 7:
        digitalWrite(pinA, HIGH);
        digitalWrite(pinB, HIGH);
        digitalWrite(pinC, HIGH);
        digitalWrite(pinD, LOW);
        digitalWrite(pinE, LOW);
        digitalWrite(pinF, LOW);
        digitalWrite(pinG, LOW);
        digitalWrite(pinPD, LOW);
        break;

      case 8:
        digitalWrite(pinA, HIGH);
        digitalWrite(pinB, HIGH);
        digitalWrite(pinC, HIGH);
        digitalWrite(pinD, HIGH);
        digitalWrite(pinE, HIGH);
        digitalWrite(pinF, HIGH);
        digitalWrite(pinG, HIGH);
        digitalWrite(pinPD, LOW);
        break;

      case 9:
        digitalWrite(pinA, HIGH);
        digitalWrite(pinB, HIGH);
        digitalWrite(pinC, HIGH);
        digitalWrite(pinD, HIGH);
        digitalWrite(pinE, LOW);
        digitalWrite(pinF, HIGH);
        digitalWrite(pinG, HIGH);
        digitalWrite(pinPD, LOW);
        break;

      default:
        digitalWrite(pinA, LOW);
        digitalWrite(pinB, LOW);
        digitalWrite(pinC, LOW);
        digitalWrite(pinD, LOW);
        digitalWrite(pinE, LOW);
        digitalWrite(pinF, LOW);
        digitalWrite(pinG, LOW);
        digitalWrite(pinPD, HIGH);
        break;
 
  }

  delay(10);
}

Créditos para:  https://cursodearduino.net/

22/01/2020

Programa 17

Função com Arduíno

#define pinLedVm 2
#define pinLedVd 3
#define pinBotao 4

boolean pisca = false;

boolean leBotao(int porta);
void piscaLED(int porta, int tempo);

void setup() {
  pinMode(pinLedVd, OUTPUT);
  pinMode(pinLedVm, OUTPUT);
  pinMode(pinBotao, INPUT_PULLUP);
}

void loop() {

  if (leBotao(pinBotao)) {
     pisca = !pisca;
  }
 

  if (pisca) {
     piscaLED(pinLedVm, 200);
     piscaLED(pinLedVd, 500);
  }
}


boolean leBotao(int porta) {
  static boolean estadoAnterior[14] = {true,true,true,true,true,true,true,true,true,true,true,true,true,true};
   
  boolean estadoBotao = digitalRead(porta);
  boolean ligado = false;
  if (!estadoBotao && estadoAnterior[porta]) {
     ligado = true;
  }
  estadoAnterior[porta] = estadoBotao;

  return ligado;
}


void piscaLED(int porta, int tempo) {
  static unsigned long delay1[14] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0};

  if ((millis() - delay1[porta]) < tempo) {
     digitalWrite(porta, HIGH);
  } else {
     digitalWrite(porta, LOW);
  }

  if ((millis() - delay1[porta]) >= (tempo * 2) ) {
     delay1[porta] = millis();
  }
}

14/01/2020

Programa 16

Delay e millis no Arduíno



#define pinLedVd 10
#define pinLedVm 8
#define pinBotao 2

boolean estadoBotao = true;
boolean estAntBotao = true;
boolean estadoPisca = false;

unsigned long delay1 = 0;

void setup() {
  pinMode(pinLedVd, OUTPUT);
  pinMode(pinLedVm, OUTPUT);
  pinMode(pinBotao, INPUT_PULLUP);

  digitalWrite( pinLedVd, HIGH);
}

void loop() {

  estadoBotao = digitalRead(pinBotao);
  if (!estadoBotao && estAntBotao) {
     estadoPisca = !estadoPisca;
  }
  estAntBotao = estadoBotao;

  if (estadoPisca) {

    if ((millis() - delay1) >= 500) {
       digitalWrite( pinLedVm, HIGH);
    }

    if ((millis() - delay1) < 500) {
       digitalWrite( pinLedVm, LOW);
    }
   
    if ((millis() - delay1) >= 1000) {
      delay1 = millis();
    }
  } else {
    digitalWrite( pinLedVm, LOW);
  }

  delay(10);
}

Programa 15 -

Impressão e contador no Arduíno usando display LCD

Simulação feita no Tinkercad





















#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
     // set up the LCD's number of columns and rows:
     lcd.begin(16, 2);
     // Print a message to the LCD.
     lcd.print("DEUS E MAIOR ");
}

void loop() {
     // set the cursor to column 0, line 1
     // (note: line 1 is the second row, since counting begins with 0):
     lcd.setCursor(0, 1);
     // print the number of seconds since reset:
     lcd.print(millis() / 500);
}


Palavras chave:

Printing and counter in Arduino using LCD display
Impresión y contador en Arduino usando pantalla LCD
Priontáil agus cuntar in Arduino ag baint úsáide as taispeáint LCD
Druk en toonbank in Arduino met LCD-skerm
Drukowanie i liczenie w Arduino za pomocą wyświetlacza LCD
Друк та лічильник в Ардуїно за допомогою РК-дисплея
Skriva ut och räknar i Arduino med LCD-skärm
הדפסה ודלפק בארדואינו באמצעות צג LCD
Nyithak lan kontra ing Arduino nggunakake tampilan LCD
Ispis i šalter u Arduinu pomoću LCD zaslona
Печат и брояч в Arduino с помощта на LCD дисплей

13/01/2020

Programa 14 - Letras na tabela ASC

Imprimir caracteres usando while














#define pinBotao 2

void setup() {
  pinMode(pinBotao, INPUT_PULLUP);//PULLUP = evita a nececidade de 1 resistor
  Serial.begin(9600);//comunicação serial
}

void loop() {
  int n3 = 0;

  //laço de números

  for(int n1 = 0; n1 < 50; n1++){
   Serial.print(char((n1 % 10)+48));
   if(digitalRead(pinBotao) == LOW){//se a leitura for igual a desligado
    delay(400);
    break;
   }
   delay(50);
  }
  Serial.println();//pula uma linha

  //LAÇO DAS LETRAS MAIÚSCULAS
  letrasMaiusculas://endereço
  int n2 = 0;
 
  while (n2 < 50){
    //25 letras maíusculas na tabela ASC
    Serial.print(char((n2 % 25)+ 65));
    n2++;
    if(digitalRead(pinBotao) == LOW){
      delay(400);
      continue;//vai enviar para o while novamente
    }
    delay(50);
  }
  Serial.println();

  //laço das letras minúsculas
  do{
    n3 = random(25);//sorteando numero
    Serial.print(char(n3 + 97));//letra de a - z
    if(digitalRead(pinBotao) == LOW){
      delay(400);
      Serial.println();
      n2 = 0;
      goto letrasMaiusculas;//mudar para um endereço especificado
    }
    delay(50);
  }while (n3 != 16);//enquanto não for a letra q minúscula na tabela ASC

  Serial.println();
}

Saída gerada

12/01/2020

Programa 13 - Binario, hexadecimal e octal

Binario, hexadecimal e octal no Arduino

int valor1, valor2, valor3, valor4;

void setup() {
  valor1 = 25;
  valor2 = 13;

  Serial.begin(9600);

  Serial.print("Valor1: = ");
  Serial.print(valor1);

  Serial.print("\nValor2: = ");
  Serial.print(valor2);

  Serial.print("\n\nValor1 em binário = ");//exibe na tela
  Serial.print(valor1, BIN);// imprime o valor1 em binário

  Serial.print("\nValor2 em decimal: = ");
  Serial.print(valor2, DEC);

  Serial.print("\nValor1 em hexadecimal = ");
  Serial.print(valor1, HEX);

  Serial.print("\nValor2 em octal = ");
  Serial.print(valor2, OCT);
}

void loop() {

}

Saída gerada
















10/01/2020

Programa 12 - Soma e subtração no Arduino

Soma e subtração no Arduino

int valor1, valor2;
float soma, sub, divi, mult, resto, resFinal;

void setup() {
  valor1 = 25;
  valor2 = 13;

  soma = valor1 + valor2;
  sub = valor1 - valor2;
  divi = valor1 / valor2;
  mult = valor1 * valor2;
  resto = int (valor1) % int(valor2); // convertendo para inteiro

  resFinal = (soma * sub - divi + mult )/resto;

  Serial.begin(9600);
  Serial.print("Valor1: = ");//exibe na tela
  Serial.print(valor1);// imprime o valor1

  Serial.print("\nValor2: = ");
  Serial.print(valor2);

  Serial.print("\n\nSoma: = ");
  Serial.print(soma);

  Serial.print("\nSubtração: = ");
  Serial.print(sub);

  Serial.print("\nDivisaoão: = ");
  Serial.print(divi);

  Serial.print("\nMultiplicação: = ");
  Serial.print(mult);

  Serial.print("\nResto: = ");
  Serial.print(resto);

  Serial.print("\nResultado final: = ");
  Serial.print(resFinal);
}

void loop() {

}

Saída gerada


















09/01/2020

Programa 11

Contador usando Arduíno 
























//Portas analógicas
int pinos[9] = {12,11,10,9,8,7,6,5,4};
//int pinLed;

float minimo = 65;
float maximo = 1020;
float valorLDR;//guardar o valor nessa variavel
float luminosidade;

void setup() {
  // iniciando o pinLed
  for(int pinLed = 0; pinLed <= 8; pinLed++){
    pinMode(pinos[pinLed], OUTPUT);//portas digitais de saidas que irao ligar e desligar
  }

  pinMode(A0, INPUT);//porta analogica
}

void loop() {
  //
  valorLDR = analogRead(A0);//ler e guardar o valor nessa variavel
  luminosidade = ((valorLDR - minimo)/(maximo - minimo)) * 10;
  luminosidade = (luminosidade - 10) * -1 ;

  //acender a luminosidade de acordo com a faixa
  for(int pinLed = 0; pinLed <= 8; pinLed++){
    if(pinLed < luminosidade){
      digitalWrite(pinos[pinLed], HIGH);//ligar o led
    }else {
      digitalWrite(pinos[pinLed], LOW);//deligar o led
    }
  }
}

Programa 10

Usando Array no Arduíno com sensor de luz






















//Portas analógicas
int pinos[9] = {12,11,10,9,8,7,6,5,4};
//int pinLed;

float minimo = 65;
float maximo = 1020;
float valorLDR;//guardar o valor nessa variavel
float luminosidade;

void setup() {
  // iniciando o pinLed
  for(int pinLed = 0; pinLed <= 8; pinLed++){
    pinMode(pinos[pinLed], OUTPUT);//portas digitais de saidas que irao ligar e desligar
  }

  pinMode(A0, INPUT);//porta analogica
}

void loop() {
  //
  valorLDR = analogRead(A0);//ler e guardar o valor nessa variavel
  luminosidade = ((valorLDR - minimo)/(maximo - minimo)) * 10;
  luminosidade = (luminosidade - 10) * -1 ;

  //acender a luminosidade de acordo com a faixa
  for(int pinLed = 0; pinLed <= 8; pinLed++){
    if(pinLed < luminosidade){
      digitalWrite(pinos[pinLed], HIGH);//ligar o led
    }else {
      digitalWrite(pinos[pinLed], LOW);//deligar o led
    }
  }
}

Programa 9

Ligar leds no Arduíno usando Array





















int pinLed[9] = {12,11,10,9,8,7,6,5,4};
int numeroLed;
char digitado;

void setup() {
  int x;

  for(int x = 0; x <= 0; x++){
    pinMode(pinLed[x], OUTPUT);
  }

  Serial.begin(9600);
}

void loop() {
  digitado = ' ';
  numeroLed = 0;
 
  while (digitado != 'P'){//enquanto for menor que 8 acrescenta 1
    digitalWrite(pinLed[numeroLed], LOW);//apagou
   
    numeroLed += 1;
    if(numeroLed > 8){//se for maior
      numeroLed = 0;//reseta
    }
    digitalWrite(pinLed[numeroLed], HIGH);

  //verificar se tem alguma informação na porta serial
  if(Serial.available()){//se existir alguma informação na porta serial, se foi enviado informação para o arduino
    digitado = Serial.read();//lendo informação
    }

    delay(50);
  }

  delay(5000);
 
}



08/01/2020

Programa 8

Ascender leds com Arduino usando Array


























int pinLed[9] = {12,11,10,9,8,7,6,5,4};
int numeroLed;

void setup() {
  int x;

  for(int x = 0; x <= 0; x++){
    pinMode(pinLed[x], OUTPUT);
  }

}

void loop() {
  numeroLed = 0;

  while (numeroLed <= 8){
    digitalWrite(pinLed[numeroLed], HIGH);
    delay(50);

    numeroLed += 1;
  }

  numeroLed = 8;
  while(numeroLed >= 0){
    digitalWrite(pinLed[numeroLed], LOW);
    delay(500);

    numeroLed -= 1;
  }
}

Créditos para https://cursodearduino.net/

07/01/2020

Programa 7

Soma no Arduíno

int x, y, z, soma;

void setup() {
  // put your setup code here, to run once:
  //arduino começa a se comunicar com o computador
  Serial.begin(9600);//9600 velocidade

  x = 10;
  y = 20;
  z = 50;
  soma = x + y + z;
  Serial.print("Valor de x = ");
  Serial.print(x);

  Serial.print("\nValor de y = ");
  Serial.print(y);

  Serial.print("\nValor de z = ");
  Serial.print(z);

  Serial.print("\nSoma = ");
  Serial.print(soma);
}

void loop() {
  // put your main code here, to run repeatedly:

}

Créditos para https://cursodearduino.net/

Programa 6

Acender sequencial de Leds em Arduino


























int pinLed[9] = {12,11,10,9,8,7,6,5,4};//portas
int numeroLed;

void setup() {
  int i;
  //repetir 0 vezes
  for(i =0; i <= 8; i++){
    pinMode(pinLed[i], OUTPUT);//repete várias vezes
  }
}

void loop() {
  //ligar os leds ascendente
  for(numeroLed = 0; numeroLed <=8; numeroLed++){
    digitalWrite(pinLed[numeroLed], HIGH);
    delay(200);
  }

  //desliga decrescente
  for(numeroLed = 8; numeroLed>= 0; numeroLed--){
    digitalWrite(pinLed[numeroLed], LOW);//desliga
    delay(800);
  }

}

Créditos para https://cursodearduino.net/

Programa 5

Acender Led no Arduino com botão de pressão

















int pinVermelho = 10;
int pinAmarelo = 9;
int pinVerde = 8;
int pinBotao = 7;
int pinPedestreVermelho = 3;
int pinPedestreVerde = 2;

int faseSemaforo;

int estadoBotao;
int estadoAnteriorBotao;

int tempoPisca;
int estadoPisca;

void setup() {
  // put your setup code here, to run once:

  pinMode(pinVerde, OUTPUT);
  pinMode(pinAmarelo, OUTPUT);
  pinMode(pinVermelho, OUTPUT);
  pinMode(pinBotao, INPUT);
  pinMode(pinPedestreVerde, OUTPUT);
  pinMode(pinPedestreVermelho, OUTPUT);

  faseSemaforo = 1;

  estadoAnteriorBotao = digitalRead(pinBotao);

  tempoPisca = 0;
  estadoPisca = HIGH;
}

void loop() {
  // put your main code here, to run repeatedly:

  estadoBotao = digitalRead(pinBotao);

  if ((estadoBotao == LOW) && (estadoAnteriorBotao == HIGH)) {
   
     if (faseSemaforo < 4) {
       faseSemaforo = faseSemaforo + 1;
     } else {
       faseSemaforo = 1;
     }
  }

  estadoAnteriorBotao = estadoBotao;

  if (faseSemaforo == 1) {    //SEMAFORO ABERTO (VERDE)
     digitalWrite(pinVerde, HIGH);
     digitalWrite(pinAmarelo, LOW);
     digitalWrite(pinVermelho, LOW);

     digitalWrite(pinPedestreVerde, LOW);
     digitalWrite(pinPedestreVermelho, HIGH);   
  }

  if (faseSemaforo == 2) {   //SEMAFORO AMARELO
     digitalWrite(pinVerde, LOW);
     digitalWrite(pinAmarelo, HIGH);
     digitalWrite(pinVermelho, LOW);

     digitalWrite(pinPedestreVerde, LOW);
     digitalWrite(pinPedestreVermelho, HIGH);     
  }

  if (faseSemaforo == 3) {   //SEMAFORO FECHADO (VERMELHO)
     digitalWrite(pinVerde, LOW);
     digitalWrite(pinAmarelo, LOW);
     digitalWrite(pinVermelho, HIGH);
   
     digitalWrite(pinPedestreVerde, HIGH);
     digitalWrite(pinPedestreVermelho, LOW);     
  }

  if (faseSemaforo == 4) {   //SEMAFORO PEDESTRE PISCANDO
     digitalWrite(pinVerde, LOW);
     digitalWrite(pinAmarelo, LOW);
     digitalWrite(pinVermelho, HIGH);

     tempoPisca = tempoPisca + 1;
     if (tempoPisca == 400) {
        estadoPisca = !estadoPisca;
        tempoPisca = 0;
     }
   
     digitalWrite(pinPedestreVerde, LOW);
     digitalWrite(pinPedestreVermelho, estadoPisca);     
   
  }

  delay(100);
}

Créditos para https://cursodearduino.net/

Programa 4

Ascender Led no Arduino com botão de pressão

void setup() {

  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(7, INPUT);

}

void loop() {

  int estadoBotao;
  estadoBotao = digitalRead(7);//ao apertar o botão irá controlar os estados do led

  digitalWrite(10, estadoBotao);
  digitalWrite(9, estadoBotao);
}

Créditos para https://cursodearduino.net/

Programa 3

Acender Led em Arduino com intervalo de tempo

void setup() {

  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);

}

void loop() {

  int intervaloPisca;
  intervaloPisca = 700;

  digitalWrite(10, HIGH);
  digitalWrite(9, LOW);
  delay(intervaloPisca);//500 milesegundos

  digitalWrite(10, LOW);
  digitalWrite(9, HIGH);
  delay(intervaloPisca);
}

Créditos para https://cursodearduino.net/

Programa 2

Acender Led com intervalo de tempo em Arduino

void setup() {
  // put your setup code here, to run once:
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);

}

void loop() {
  // put your main code here, to run repeatedly:
  int intervaloPisca;
  intervaloPisca = 700;

  digitalWrite(10, HIGH);
  digitalWrite(9, LOW);
  delay(intervaloPisca);//500 milesegundos

  digitalWrite(10, LOW);
  digitalWrite(9, HIGH);
  delay(intervaloPisca);
}

Créditos para https://cursodearduino.net/

02/01/2020

Programa 1 - Ligar led

Acender Led no arduino

void setup() {
  // put your setup code here, to run once:
  pinMode(10, OUTPUT);//ligar
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(10, HIGH);//liga
  delay(1000);//a cada 1 seg
  digitalWrite(10, LOW);//desliga
  delay(1000);
}

Créditos para  https://cursodearduino.net/ 

22/12/2019

SAP_Ev2

Simulação do modelo de um SAP1 no Logisim
Autor: Professor Giuliano - Microprocessadores - IFMT - Engenharia da Computação 2019/2
SAP1















Clique aqui para fazer o download do arquivo feito no Logisim versão 2.7

20/12/2019

HashSet em java

package conceito;
import java.util.HashSet;
import java.util.Set;

public class Main1 {

    public static void main(String[] args) {
        // TODO code application logic here
        Set<String> lista = new HashSet<String>();
        lista.add("a");
        lista.add("a");//só vai adicionar elementos não repetidos
        lista.add("b");
        lista.add("c");
        lista.add("d");
        lista.add("d");só vai adicionar elementos não repetidos
       
        for(String s : lista){
            System.out.println(lista);
        }
    }
   
}
Saída gerada

















CPU Simples no Logisim




























Clique aqui para fazer o download do arquivo feito no Logisim versão 2.7

13/12/2019

PostegreSQL / PGAdmin no Java

O objetivo desta atividade é a modelagem do banco de dados e o desenvolvimento de um sistema para controle e gerenciamento de torneios de tênis de mesa. Um torneio dever ter um nome, uma data de início/fim e o endereço onde será realizado, além de dados de contato do administrador do torneio (e-mail e telefone). Um torneio é composto por diversos Eventos, que por sua vez podem filtrar os participantes com base em diversos critérios:


  • a. individual ou duplas; 
  • b. sexo: masculino, feminino ou sem restrição de sexo; 
  • c. por idade: Rating (baseado na data de nascimento do jogador) define um intervalo de idade permitido neste evento; 


  • d. pelo nível de jogo: Ranking (pontuação acumulada do jogador que define a qualidade do seu jogo) onde será definido um intervalo pelo qual o participante poderá disputar. Esses critérios podem ser cumulativos ou não, ou seja, pode haver eventos individuais com restrição de ranking mas sem restrição de sexo e rating, da mesma forma que pode ter evento de duplas com restrição de sexo e rating mas sem restrição de ranking. No Evento deve ser possível ainda definir o modelo de disputa que poderá variar entre: disputa em grupos GR, eliminação simples ES ou uma combinação entre grupos e eliminação simples. Deve ser permitida a definição do tamanho dos grupos e a formatação das chaves de eliminação quando, houverem não houverem quantidade suficiente de participantes para a formatação dos grupos de forma homogênea (grupos de 3, 4 ou 5 jogadores) ou para a definição das chaves de mata mata (ES) quando a quantidade de jogadores não for múltiplo de 2. Deve ainda ser permitido ao sistema realizar a impressão dos grupos e chaves de eliminação simples em formato impresso e digital. Por fim deve ser possível fazer o controle financeiro das inscrições dos jogadores nos Eventos dos Torneios. As informações acima descritas servem apenas para dar um norte inicial aos trabalhos, segue abaixo mais links de informações para melhor entendimento do objeto a ser analisado, que pode se deve ser ampliado, conforme maior maturidade no ambiente de negócio do cliente.

















Resolução:

































Informações da caixa de diálogo








Informações incluídas







































Simulando jogo






































Dados incluídos no Banco de Dados







































Clique aqui para fazer o download do arquivo feito em Java e no PostegreSQL

Pilha em Java (Balanceamento)


/*ESCREVA UM PROGRAMA PARA VERIFICAR SE UMA EXPRESSAO MATEMATICA
TEM OS PARENTESES AGRUPADOS DE FORMA CORRETA ISTO É
1 - SE O NUMERO DE PARENTESES A ESQUERDA E A DIREITA SAO IGUAIS E
2 - SE TODO PARENTESE ABERTO É SEGUIDO POSTERIORMENTE POR UM FECHAMENTO
DE PARENTESE

 */
package hierarquiaMatematica;

import java.util.Stack;
/** EX: 06
 * A + B [D + C)
 * @author HENRIQUE
 */
public class ExpressaoMat {
   
    final static String ABRE = "([{";
    final static String FECHA = ")]}";
   
    public static boolean verificaSimbolos(String expressao){
        boolean balanceado = true;
        Stack<Character> pilha = new Stack<Character>();

        int index = 0;
        char simbolo, topo;
       
        while(index < expressao.length()){
            simbolo = expressao.charAt(index);
           
            if(ABRE.indexOf(simbolo)> -1){
                pilha.push(simbolo);
            }else if(FECHA.indexOf(simbolo)> -1){
                if(pilha.isEmpty()){
                    return false;
                }else{
                    topo = pilha.pop();
                    if(ABRE.indexOf(topo) != FECHA.indexOf(simbolo)){
                        return false;
                    }
                }
            }index++;
        }
        return true;
    }
   
    public static void main(String[] args) {
       
        imprimeResultado("A + B");
        imprimeResultado("A + B + (C - D)");
        imprimeResultado("{[()]{[](){()}");
        imprimeResultado("{[(]}[]()[()}");//desbalanceado
        imprimeResultado("A + B + C - D");//OK
    }
    public static void imprimeResultado(String expressao){
        System.out.println(expressao+" está balanceado ? "+verificaSimbolos(expressao));
    }
}


12/12/2019

Analisador léxico e sintático em java

Clique aqui para fazer o download do arquivo feito em Java
Autor: Mateus Marques - IFMT - Engenharia da Computação - 2018/2


Clique aqui para fazer o download do arquivo feito em Java
Autor: Luis Alexandre - IFMT - Engenharia da Computação - 2018/2


Clique aqui para fazer o download do arquivo feito em Java
Autor: Tales - IFMT - Engenharia da Computação - 2019/2


Clique aqui para fazer o download do arquivo feito em Pyton
Autor: Adriano - IFMT - Engenharia da Computação - 2019/2

Clique aqui para fazer o download do arquivo feito em Pyton
Autor: Lucas - IFMT - Engenharia da Computação - 2019/2

15/11/2019

Banco de Dados em Java 2 / Incluir

Inserir dados no PostreSQL usando Java

package apps;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/**
 *
 * @author HENRIQUE
 */
public class FabricaConexao {
    private static final String URL = "jdbc:postgresql://localhost:5432/produto";
    private static final String DRIVE = "org.postgresql.Driver";
    private static final String USER = "postgres";
    private static final String PASS = "123";
 
    public static Connection obterConexao(){
        Connection conexao = null;
     
        try{
            Class.forName(DRIVE);
            conexao = DriverManager.getConnection(URL, USER, PASS);
        }catch (ClassNotFoundException cnf){
            System.out.println("Driver não encontrado - "+cnf.getMessage());
        }catch (SQLException sqle){
            System.out.println("Erro ao conectar no banco - "+sqle.getMessage());
        }
        return conexao;
     
    }
 
}
___________________ / / _____________________

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package apps;
import java.sql.Connection;
import java.sql.SQLException;
/**
 *
 * @author HENRIQUE
 */
public class TesteFabricaConexao {
    public static void main(String[] args) {
        Connection conexao;
        try{
            conexao = FabricaConexao.obterConexao();
            System.out.println("Conexao estabelecida");
            conexao.close();
            System.out.println("Conexão encerrada");
        }catch (SQLException sqle){
            System.out.println("Conexão não estabelecida - "+sqle.getMessage());
        }
    }
}
__________________ / / _____________________

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package apps;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.swing.JOptionPane;
/**
 *
 * @author HENRIQUE
 */
public class Incluir2 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        Connection conexao = FabricaConexao.obterConexao();
        PreparedStatement comando = null;
        String nome = JOptionPane.showInputDialog("Forneça o nome do grupo de produto");
        float promocao = Float.parseFloat(JOptionPane.showInputDialog("Forneça o percentual de promoção do grupo: "));
        float margem = Float.parseFloat(JOptionPane.showInputDialog("Forneça o percentual da margem de lucro do produto: "));
        String sql = "INSERT INTO grupoproduto (nome, promocao, margemlucro ) VALUES";
        sql += "("+nome+", "+promocao+", "+margem+" )";
        
        try {
            comando = conexao.prepareStatement("INSERT INTO grupoproduto (nome, promocao, margemlucro ) VALUES (?, ?, ?)");
            comando.setString(1, nome);
            comando.setFloat(2, promocao);
            comando.setFloat(3, margem);
            comando.executeUpdate();
            System.out.println("Inclusao realizada com sucesso");
        }catch (SQLException ex){
            System.out.println("Erro ao incluir grupo de produto"+ex.toString());
        }finally {
            try{
                comando.close();
                conexao.close();
            }catch (SQLException ex){
                System.out.println("Erro ao desconectar "+ex.toString());
            }
        }
        
    }
    
}
__________________ / / ____________________









































































Executando o algoritmo























SAP_1

Microprocessador de um SAP feito no Logisim









































Clique aqui para fazer o download do arquivo feito no Logisim 2.7

Clique aqui para fazer o download do arquivo de instruções

O barbeiro sonolento























  •  Descrição do problema


  1.  A analogia de uma barbearia com um barbeiro.
  •  A barbearia possui
  1.  Uma cadeira para corte de cabelo
  2.  Uma sala de espera com um número determinado de cadeiras
  •  Quando o barbeiro finaliza o corte de cabelo de um cliente
  1.  Ele libera o cliente e vai até a sala de espera para ver se há algum cliente esperando
  2.  Se há algum cliente esperando, ele trás consigo um dos clientes corta o seu cabelo
  3. Se não há clientes esperando então ele volta para a cadeira de corte para dormir


  • Quando um cliente chega à barbeariaO cliente olha o que o barbeiro está fazendo.


  1. Se o barbeiro estiver dormindo, ele o acorda e senta na cadeira.
  2. Se o barbeiro estiver trabalhando então o cliente vai para a sala de espera
  3. Se houver uma cadeira livre na sala de espera então ele senta e aguarda sua vez
  4. Se não houver cadeira livre na sala de espera então o cliente vai embora.


Alunos: Luís Fernando, Henrique Souza, Luana Novais e Eberty Miranda

Créditos para: Luís Fernando autor do algoritmo

Clique aqui para fazer o download do arquivo feito no Java