Robótica Livre
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Ir para baixo
Monica Moreno
Monica Moreno
Mensagens : 685
Data de inscrição : 03/03/2020
Idade : 15
Escola : Colegio Lindaura Ribeiro Lucas

Resolvido 1.17 Empty Resolvido 1.17

Seg Ago 23, 2021 10:06 am
/*
* CURSO DE ROBOTICA 2020;)
*
* Exercicio: 1.17
* Tema: Interrupção
* Atividade: Incrementar um contador e enviar para porta serial usando interrupção
* Descrição: Fazer um pisca com o led vermelho e ligar uma tecla na interrupção. Quando interromper o processador incrementar uma variável e enviar pela porta serial
* Hardware: Ligar uma tecla em D2 configurado como ENTRADA PULLUP e programa-la como interrupção, em outro pino digital um led configurado como SAÍDA, inicializar a serial
* Comandos: pinMode, digitalRead, digitalWrite, PULLUP, attachInterrupt
* Dica1: Use no modo de interrupção as opções LOW, CHANGE, RISING, FALLING e disserte sobre o comportamento de cada uma delas.
* Dica2: A interrupção serve para avisar o processador algum evento externo, pode ser usado para disparar uma rotina de tratamento
* Dica3: Para garantir a nota responda as questões abaixo:
* Questão1: Qual modo de interrupção que aciona o led quando a chave de interrupção muda de estado 0 para 1?   RISING
* Questão2: Quantos pinos de interrupção podem ser usados no arduino nano3?*   D2- D3
* Questão3: Quantos modos de interrupção podem ser configurados no arduino?     4  modos de Interrupção são eles -> LOW  CHANGE  RISING   FALLING  
*/

//DEFINICOES INICIAIS
#define tecla 2 //Definido que pino 2 vai se chamar "tecla"
#define led 3 //Definido que pino 3 vai se chamar "led"

//DECLARAcAO DE VARIAVEIS
volatile bool estado = 0;//Declarado uma variável do tipo bool com um qualificador de variável

//FUNÇÕES INTERRUPÇÃO
void sinaliza() {
Serial.print("estado =");//Imprime na porta serial o texto
estado +2 ; // O valor do estado vai ser 2
Serial.print(estado);//Imprime o valor da variável estado
}

//INICIALIZAÇÃO DO HARDWARE
void setup() {
 Serial.begin(9600); //Porta serial Ligada
 pinMode(led, OUTPUT);//Definido como saída
pinMode(tecla, INPUT_PULLUP);//Definido como entrada eom resistor de INPUT_PULLUP
attachInterrupt(0,sinaliza, FALLING); //Quando a tecla vir a zero roda a rotina(ISR) que é o sinaliza
}
//PROGRAMA PRINCIPAL
void loop() {
digitalWrite (led,HIGH); //Acende o Led
delay(300); //Interompe (300)
digitalWrite(led,LOW);//Apaga o Led
delay(300); //Interompe (300)
}

Bom Dia
Smile Smile

Resolvido 1.17 Wink Wink
Paulo Augusto Batista
Paulo Augusto Batista
Admin
Mensagens : 5115
Data de inscrição : 11/02/2019
Idade : 52
Escola : Colegio Lindaura
https://roboticalivre.forumeiros.com

Resolvido 1.17 Empty Re: Resolvido 1.17

Qui Set 02, 2021 10:08 pm
Monica testei o programa e não funcionou. Olha o que saiu na porta serial quando o processador foi interrompido varias vezes.

estado =0estado =0estado =0estado =0estado =0estado =0estado =0estado =0estado =0estado =0estado =0estado =0estado =0estado =0estado =0estado =0estado =0

Não está incrementando porque na função sinaliza() a variável de incremento está escrita errada, favor corrigir.
Monica Moreno
Monica Moreno
Mensagens : 685
Data de inscrição : 03/03/2020
Idade : 15
Escola : Colegio Lindaura Ribeiro Lucas

Resolvido 1.17 Empty Re: Resolvido 1.17

Qua Out 27, 2021 10:00 am
/*
* CURSO DE ROBOTICA 2020;)
*
* Exercicio: 1.17
* Tema: Interrupção
* Atividade: Incrementar um contador e enviar para porta serial usando interrupção
* Descrição: Fazer um pisca com o led vermelho e ligar uma tecla na interrupção. Quando interromper o processador incrementar uma variável e enviar pela porta serial
* Hardware: Ligar uma tecla em D2 configurado como ENTRADA PULLUP e programa-la como interrupção, em outro pino digital um led configurado como SAÍDA, inicializar a serial
* Comandos: pinMode, digitalRead, digitalWrite, PULLUP, attachInterrupt
* Dica1: Use no modo de interrupção as opções LOW, CHANGE, RISING, FALLING e disserte sobre o comportamento de cada uma delas.
* Dica2: A interrupção serve para avisar o processador algum evento externo, pode ser usado para disparar uma rotina de tratamento
* Dica3: Para garantir a nota responda as questões abaixo:
* Questão1: Qual modo de interrupção que aciona o led quando a chave de interrupção muda de estado 0 para 1? RISING
* Questão2: Quantos pinos de interrupção podem ser usados no arduino nano3?* D2- D3
* Questão3: Quantos modos de interrupção podem ser configurados no arduino? 4 modos de Interrupção são eles -> LOW CHANGE RISING FALLING
*/

//DEFINICOES INICIAIS
#define tecla 2 //Definido que pino 2 vai se chamar "tecla"
#define led1 3 //Definido que pino 3 vai se chamar "led1"

//DECLARAcAO DE VARIAVEIS
bool estado = 0;//Variavel bool estado = 0

//FUNÇÕES INTERRUPÇÃO
void sinaliza() {
Serial.print("estado=");//No caso a funcao for ativada ele ira colocar o valor da linha abaixo
estado=estado+1;//Aqui o valor do estado sera somado a 1
Serial.println(estado);//Ali o valor atribuido ao estado
}

//INICIALIZAÇÃO DO HARDWARE
void setup() {
Serial.begin(9600); //Porta serial Ligada
pinMode(led1, OUTPUT);//Definido como saída
pinMode(tecla, INPUT_PULLUP);//Definido como entrada com resistor de INPUT_PULLUP
attachInterrupt(0,sinaliza, FALLING); //No caso da tecla for pressionada o evento de interrupção vai ser ligado
}
//PROGRAMA PRINCIPAL
void loop() {
digitalWrite (led,HIGH); //Acende o Led
delay(300); //Interompe (300)
digitalWrite(led,LOW);//Apaga o Led
delay(300); //Interompe (300)
}
Refeito
Paulo Augusto Batista
Paulo Augusto Batista
Admin
Mensagens : 5115
Data de inscrição : 11/02/2019
Idade : 52
Escola : Colegio Lindaura
https://roboticalivre.forumeiros.com

Resolvido 1.17 Empty Re: Resolvido 1.17

Ter Nov 16, 2021 9:58 pm
Então, voce sabia que se no define colocar um nome para o pino esse mesmo nome deve ser usado em todo o programa?
Sabia que se ficar trocando os nomes não funciona?
Sabia também que quando, por acaso, o nome for trocado quando vai testar o compilador aponta o erro?
Monica Moreno
Monica Moreno
Mensagens : 685
Data de inscrição : 03/03/2020
Idade : 15
Escola : Colegio Lindaura Ribeiro Lucas

Resolvido 1.17 Empty Exercicio 1.17 Resolvido (Refeito)

Qua Mar 30, 2022 9:34 am
/*
* CURSO DE ROBOTICA 2020
*
* Exercicio: 1.17
* Tema: Interrupção
* Atividade: Incrementar um contador e enviar para porta serial usando interrupção
* Descrição: Fazer um pisca com o led vermelho e ligar uma tecla na interrupção. Quando interromper o processador incrementar uma variável e enviar pela porta serial
* Hardware: Ligar uma tecla em D2 configurado como ENTRADA PULLUP e programa-la como interrupção, em outro pino digital um led configurado como SAÍDA, inicializar a serial
* Comandos: pinMode, digitalRead, digitalWrite, PULLUP, attachInterrupt
* Dica1: Use no modo de interrupção as opções LOW, CHANGE, RISING, FALLING e disserte sobre o comportamento de cada uma delas.
* Dica2: A interrupção serve para avisar o processador algum evento externo, pode ser usado para disparar uma rotina de tratamento
* Dica3: Para garantir a nota responda as questões abaixo:
* Questão1: Qual modo de interrupção que aciona o led quando a chave de interrupção muda de estado 0 para 1?
* Questão2: Quantos pinos de interrupção podem ser usados no arduino nano3?
* Questão3: Quantos modos de interrupção podem ser configurados no arduino?
*/

//DEFINICOES INICIAIS
#define tecla 2 //Definido que tecla vai se chamar pino 2
#define led1 3 //Definido que led1 vai se chamar pino 3

//DECLARAcAO DE VARIAVEIS
bool estado = 0;//Variavel bool estado igual a 0

//FUNÇÕES INTERRUPÇÃO
void sinaliza() {
Serial.print("estado=");//A função quando ativada vai colocar o valor na linha abaixo
estado=estado+1;//Nesta parte do programa o valor vai ser igual a 1
Serial.println(estado);//Valor atribuido do estado
}
//INICIALIZAÇÃO DO HARDWARE
void setup() {
Serial.begin(9600);//Porta Serial ligada
pinMode(led1,OUTPUT);//Programado led1 como "Saida"
pinMode(tecla,INPUT_PULLUP);//Definido como entrada com resistor de INPUT_PULLUP
attachInterrupt(0,sinaliza, LOW); //No caso da tecla for pressionada o evento de interrupção vai ser ligado

}
//PROGRAMA PRINCIPAL
void loop() {
digitalWrite(led1,HIGH);//Liga o led1
delay(250);//Tempo
digitalWrite(led1,LOW);//Desliga o led1
delay(250);//Tempo

}

Refeito Testado e Funcionou
Monica Moreno
Monica Moreno
Mensagens : 685
Data de inscrição : 03/03/2020
Idade : 15
Escola : Colegio Lindaura Ribeiro Lucas

Resolvido 1.17 Empty Re: Resolvido 1.17

Qua Mar 30, 2022 9:39 am
* Questão1: Qual modo de interrupção que aciona o led quando a chave de interrupção muda de estado 0 para 1?
LOW
No meu Programa so funcionou LOW
* Questão2: Quantos pinos de interrupção podem ser usados no arduino nano3?* D2- D3
D2- D3

* Questão3: Quantos modos de interrupção podem ser configurados no arduino? 4 modos de Interrupção são eles ->
1°LOW
2°CHANGE
3°RISING
4°FALLING
Paulo Augusto Batista
Paulo Augusto Batista
Admin
Mensagens : 5115
Data de inscrição : 11/02/2019
Idade : 52
Escola : Colegio Lindaura
https://roboticalivre.forumeiros.com

Resolvido 1.17 Empty Re: Resolvido 1.17

Qui Abr 28, 2022 1:42 am
Oi Monica, vou dar nota 10.0 pelo programa e fazer uma correção nas suas respostas:
- Na quetão 1 a resposta seria falling, pois é na transição do estado e não na permanencia dele, que seria o caso do LOW.
Na pratica o resultado é bem parecido, ambos vão acionar a interrupção, a diferença é um que detecta durante a transição e depois libera a interrupção. Já o LOW mantém interrompido enquanto o pino estiver em nivel baixo.

-Na questão 2 os pinos são o int0 e int1, que são os mesmos que D2 e D3, mas quando está configurado a interrupcão os pinos não tem mais as funções de pinos digitais, daí o correto seria mudar a nomenclatura também. Outra situação que na pratica não muda nada, mais por questão de convenção.
Conteúdo patrocinado

Resolvido 1.17 Empty Re: Resolvido 1.17

Ir para o topo
Permissões neste sub-fórum
Não podes responder a tópicos