Estou criando um projeto onde tenho botões em modo resistivo nas entradas A1 e A2.

O problema ocorre que eu gostaria de conseguir executar as funções da entrada A1 e da A2 ao mesmo tempo e o processador só executa um por vez. Ví que posso aplicar o recurso de Thread, mas ainda estou aprendendo sobre o assunto e não sei se seria o melhor indicado.

Como não tenho conhecimento em programação, peço ajuda para qual método usar para resolver o meu problema. 

Segue abaixo, o sketch:


/**************************************************************
* *
* Sketch: Arduino MEGA - MEIO *
* Autor: Raphael Passos *
* Data de criação: 20 de Maio de 2016 *
* Versao: 1.0 *
* *
* Função: Sketch principal. *
* *
**************************************************************/

int botaoM1 = A1; // Sinal de Controle M1 entrando na porta analógica A1.
int botaoM2 = A2; // Sinal de Controle M2 entrando na porta analógica A2.
int estadoBotaoM1;
int estadoBotaoM2;
int totalInterno = 2; // Luz Total Interno ligado a porta digital 2.
int canhao1 = 6; // Canhão1 ligado a porta digital 6.
int canhao2 = 7; // Canhão1 ligado a porta digital 7.
int canhao3 = 8; // Canhão1 ligado a porta digital 8.
int canhao4 = 9; // Canhão1 ligado a porta digital 9.
int canhao5 = 10; // Canhão1 ligado a porta digital 10.
int canhao6 = 11; // Canhão1 ligado a porta digital 11.
int canhao7 = 12; // Canhão1 ligado a porta digital 12.
int focoBrancoFrio1 = 31; // Led BrancoFrio1 ligado a porta digital 31.
int focoBrancoFrio2 = 33; // Led BrancoFrio2 ligado a porta digital 33.
int focoBrancoFrio3 = 35; // Led BrancoFrio3 ligado a porta digital 35.
int focoBrancoFrio4 = 37; // Led BrancoFrio4 ligado a porta digital 37.
int focoBrancoQuente1 = 39; // Led BrancoQuente1 ligado a porta digital 39.
int focoBrancoQuente2 = 41; // Led BrancoQuente2 ligado a porta digital 41.
int focoBrancoQuente3 = 43; // Led BrancoQuente3 ligado a porta digital 43.
int luminaria = 45; // Luminaria ligada a porta digital 45.
void setup() {
pinMode(botaoM1, INPUT);
pinMode(botaoM2, INPUT);
pinMode(totalInterno, OUTPUT);
pinMode(canhao1, OUTPUT);
pinMode(canhao2, OUTPUT);
pinMode(canhao3, OUTPUT);
pinMode(canhao4, OUTPUT);
pinMode(canhao5, OUTPUT);
pinMode(canhao6, OUTPUT);
pinMode(canhao7, OUTPUT);
pinMode(focoBrancoFrio1, OUTPUT);
pinMode(focoBrancoFrio2, OUTPUT);
pinMode(focoBrancoFrio3, OUTPUT);
pinMode(focoBrancoFrio4, OUTPUT);
pinMode(focoBrancoQuente1, OUTPUT);
pinMode(focoBrancoQuente2, OUTPUT);
pinMode(focoBrancoQuente3, OUTPUT);
pinMode(luminaria, OUTPUT);
pinMode(totalInterno, LOW);
pinMode(canhao1, LOW);
pinMode(canhao2, LOW);
pinMode(canhao3, LOW);
pinMode(canhao4, LOW);
pinMode(canhao5, LOW);
pinMode(canhao6, LOW);
pinMode(canhao7, LOW);
pinMode(focoBrancoFrio1, LOW);
pinMode(focoBrancoFrio2, LOW);
pinMode(focoBrancoFrio3, LOW);
pinMode(focoBrancoFrio4, LOW);
pinMode(focoBrancoQuente1, LOW);
pinMode(focoBrancoQuente2, LOW);
pinMode(focoBrancoQuente3, LOW);
pinMode(luminaria, LOW);
}
void loop() {
estadoBotaoM1 = analogRead(botaoM1); //
estadoBotaoM2 = analogRead(botaoM2); //
estadoBotaoM1 = 1023; //
estadoBotaoM2 = 1023; //
while (estadoBotaoM1 >= 790 && estadoBotaoM2 >=750) { // Valor abaixo deste
estadoBotaoM1 = analogRead(botaoM1); //
estadoBotaoM2 = analogRead(botaoM2); //
}
if (estadoBotaoM1 < 980 && estadoBotaoM2 < 980) { // Valor máximo alcancado pelo resistor
}
// Botão M11. Ascende a luz Total Interno.
if (estadoBotaoM1 >= 950 && estadoBotaoM1 <= 980) { //
analogWrite(totalInterno, 255);
}
else {
analogWrite(totalInterno, 0);
}
// Botão M12. Ascende os Canhões em intensidade mínima.
if (estadoBotaoM1 >= 910 && estadoBotaoM1 <= 930) {
Sequencia1();
}
else {
Apagado1();
}
// Botão M13. Ascende uma sequência ondulatória dos Canhões.
if (estadoBotaoM1 >= 860 && estadoBotaoM1 <= 890) {
Sequencia2();
}
else {
Apagado1();
}
// Botão M14. Ascende uma sequência aleatória dos Canhões.
if (estadoBotaoM1 >= 830 && estadoBotaoM1 <= 850) {
Sequencia3();
}
else {
Apagado1();
}
// Botão M15. Ascende os Canhões em intensidade máxima.
if (estadoBotaoM1 >= 790 && estadoBotaoM1 <= 825) {
Sequencia4();
}
else {
Apagado1();
}
// Botão M21. Ascende os Focos Brancos Quentes em efeito Strobo.
if (estadoBotaoM2 >= 950 && estadoBotaoM2 <= 980) {
FocoBrancoQuenteStrobo();
}
else {
Apagado2();
}
// Botão M22. Ascende os Focos Brancos Quentes.
if (estadoBotaoM2 >= 910 && estadoBotaoM2 <= 930){
FocoBrancoQuente();
}
else {
Apagado2();
}
// Botão M23. Ascende os Focos Brancos Frios.
if (estadoBotaoM2 >= 860 && estadoBotaoM2 <= 890) {
FocoBrancoFrio();
}
else {
Apagado2();
}
// Botão M24. Ascende os Focos Brancos Frios em efeito Strobo.
if (estadoBotaoM2 >= 830 && estadoBotaoM2 <= 850) {
FocoBrancoFrioStrobo();
}
else {
Apagado2();
}
// Botão M25. Ascende Foco Branco Quente e Frio em efeito Strobo.
if (estadoBotaoM2 >= 800 && estadoBotaoM2 <= 820) {
FocoBrancoQuenteFrioStrobo();
}
else {
Apagado2();
}
// Botão M26. Ascende a luminária.
if (estadoBotaoM2 >= 760 && estadoBotaoM2 <= 790) {
Luminaria();
}
else {
Apagado2();
}
}
void Apagado1() {
analogWrite(canhao1, 0);
analogWrite(canhao2, 0);
analogWrite(canhao3, 0);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 0);
}
void Apagado2() {
digitalWrite(totalInterno, LOW);
digitalWrite(focoBrancoFrio1, LOW);
digitalWrite(focoBrancoFrio2, LOW);
digitalWrite(focoBrancoFrio3, LOW);
digitalWrite(focoBrancoFrio4, LOW);
digitalWrite(focoBrancoQuente1, LOW);
digitalWrite(focoBrancoQuente2, LOW);
digitalWrite(focoBrancoQuente3, LOW);
analogWrite(luminaria, 0);
}
void Sequencia1() {
analogWrite(canhao1, 1);
analogWrite(canhao2, 1);
analogWrite(canhao3, 1);
analogWrite(canhao4, 1);
analogWrite(canhao5, 1);
analogWrite(canhao6, 1);
analogWrite(canhao7, 1);
}

// SEQUENCIA DE PISCADA EM SÉRIE.
void Sequencia2() {
// 1 SEQUÊNCIA
analogWrite(canhao1, 255);
analogWrite(canhao2, 0);
analogWrite(canhao3, 0);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 0);
delay(75);
// 2 SEQUÊNCIA
analogWrite(canhao1, 25);
analogWrite(canhao2, 255);
analogWrite(canhao3, 0);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 0);
delay(75);
// 3 SEQUÊNCIA
analogWrite(canhao1, 1);
analogWrite(canhao2, 25);
analogWrite(canhao3, 255);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 0);
delay(75);
// 4 SEQUÊNCIA
analogWrite(canhao1, 0);
analogWrite(canhao2, 1);
analogWrite(canhao3, 25);
analogWrite(canhao4, 255);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 0);
delay(75);
// 5 SEQUÊNCIA
analogWrite(canhao1, 0);
analogWrite(canhao2, 0);
analogWrite(canhao3, 1);
analogWrite(canhao4, 25);
analogWrite(canhao5, 255);
analogWrite(canhao6, 0);
analogWrite(canhao7, 0);
delay(75);
// 6 SEQUÊNCIA
analogWrite(canhao1, 0);
analogWrite(canhao2, 0);
analogWrite(canhao3, 0);
analogWrite(canhao4, 1);
analogWrite(canhao5, 25);
analogWrite(canhao6, 255);
analogWrite(canhao7, 0);
delay(75);
// 7 SEQUÊNCIA
analogWrite(canhao1, 0);
analogWrite(canhao2, 0);
analogWrite(canhao3, 0);
analogWrite(canhao4, 0);
analogWrite(canhao5, 1);
analogWrite(canhao6, 25);
analogWrite(canhao7, 255);
delay(75);
}

// SEQUENCIA DE PISCADA ALEATÓRIA.
void Sequencia3() {
analogWrite(canhao1, 255);
analogWrite(canhao2, 0);
analogWrite(canhao3, 0);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 0);
delay(15);
analogWrite(canhao1, 0);
analogWrite(canhao2, 0);
analogWrite(canhao3, 0);
analogWrite(canhao4, 255);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 0);
delay(15);
analogWrite(canhao1, 0);
analogWrite(canhao2, 255);
analogWrite(canhao3, 0);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 0);
delay(15);
analogWrite(canhao1, 0);
analogWrite(canhao2, 0);
analogWrite(canhao3, 0);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 255);
delay(15);
analogWrite(canhao1, 0);
analogWrite(canhao2, 0);
analogWrite(canhao3, 0);
analogWrite(canhao4, 255);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 0);
delay(15);
analogWrite(canhao1, 0);
analogWrite(canhao2, 0);
analogWrite(canhao3, 0);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 255);
analogWrite(canhao7, 0);
delay(15);
analogWrite(canhao1, 0);
analogWrite(canhao2, 255);
analogWrite(canhao3, 0);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 0);
delay(15);
analogWrite(canhao1, 0);
analogWrite(canhao2, 0);
analogWrite(canhao3, 0);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 255);
delay(15);
analogWrite(canhao1, 0);
analogWrite(canhao2, 0);
analogWrite(canhao3, 0);
analogWrite(canhao4, 255);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 0);
delay(15);
analogWrite(canhao1, 0);
analogWrite(canhao2, 255);
analogWrite(canhao3, 0);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 0);
delay(15);
analogWrite(canhao1, 0);
analogWrite(canhao2, 0);
analogWrite(canhao3, 0);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 255);
delay(15);
analogWrite(canhao1, 0);
analogWrite(canhao2, 255);
analogWrite(canhao3, 0);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 0);
delay(15);
analogWrite(canhao1, 0);
analogWrite(canhao2, 0);
analogWrite(canhao3, 0);
analogWrite(canhao4, 255);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 0);
delay(15);
analogWrite(canhao1, 255);
analogWrite(canhao2, 0);
analogWrite(canhao3, 0);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 0);
delay(15);
analogWrite(canhao1, 0);
analogWrite(canhao2, 0);
analogWrite(canhao3, 0);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 255);
analogWrite(canhao7, 0);
delay(15);
analogWrite(canhao1, 0);
analogWrite(canhao2, 0);
analogWrite(canhao3, 255);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 0);
delay(15);
analogWrite(canhao1, 0);
analogWrite(canhao2, 0);
analogWrite(canhao3, 0);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 255);
delay(15);
analogWrite(canhao1, 0);
analogWrite(canhao2, 0);
analogWrite(canhao3, 0);
analogWrite(canhao4, 255);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 0);
delay(15);
analogWrite(canhao1, 0);
analogWrite(canhao2, 0);
analogWrite(canhao3, 255);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 0);
delay(15);
analogWrite(canhao1, 0);
analogWrite(canhao2, 0);
analogWrite(canhao3, 0);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 255);
analogWrite(canhao7, 0);
delay(15);
analogWrite(canhao1, 255);
analogWrite(canhao2, 0);
analogWrite(canhao3, 0);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 0);
delay(15);
analogWrite(canhao1, 255);
analogWrite(canhao2, 0);
analogWrite(canhao3, 0);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 0);
delay(15);
analogWrite(canhao1, 0);
analogWrite(canhao2, 0);
analogWrite(canhao3, 255);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 0);
delay(15);
analogWrite(canhao1, 0);
analogWrite(canhao2, 0);
analogWrite(canhao3, 0);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 255);
analogWrite(canhao7, 0);
delay(15);
analogWrite(canhao1, 0);
analogWrite(canhao2, 0);
analogWrite(canhao3, 255);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 0);
delay(15);
analogWrite(canhao1, 0);
analogWrite(canhao2, 0);
analogWrite(canhao3, 0);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 255);
analogWrite(canhao7, 0);
delay(15);
analogWrite(canhao1, 0);
analogWrite(canhao2, 255);
analogWrite(canhao3, 0);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 0);
delay(15);
analogWrite(canhao1, 0);
analogWrite(canhao2, 0);
analogWrite(canhao3, 0);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 255);
delay(15);
analogWrite(canhao1, 0);
analogWrite(canhao2, 0);
analogWrite(canhao3, 255);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 0);
delay(15);
analogWrite(canhao1, 255);
analogWrite(canhao2, 0);
analogWrite(canhao3, 0);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 0);
delay(15);
analogWrite(canhao1, 0);
analogWrite(canhao2, 0);
analogWrite(canhao3, 0);
analogWrite(canhao4, 0);
analogWrite(canhao5, 255);
analogWrite(canhao6, 0);
analogWrite(canhao7, 0);
delay(15);
analogWrite(canhao1, 255);
analogWrite(canhao2, 0);
analogWrite(canhao3, 0);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 0);
delay(15);
analogWrite(canhao1, 0);
analogWrite(canhao2, 0);
analogWrite(canhao3, 0);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 255);
analogWrite(canhao7, 0);
delay(15);
analogWrite(canhao1, 0);
analogWrite(canhao2, 255);
analogWrite(canhao3, 0);
analogWrite(canhao4, 0);
analogWrite(canhao5, 0);
analogWrite(canhao6, 0);
analogWrite(canhao7, 0);
delay(15);
analogWrite(canhao1, 0);
analogWrite(canhao2, 0);
analogWrite(canhao3, 0);
analogWrite(canhao4, 0);
analogWrite(canhao5, 255);
analogWrite(canhao6, 0);
analogWrite(canhao7, 0);
delay(15);
}
void Sequencia4() {
analogWrite(canhao1, 255);
analogWrite(canhao2, 255);
analogWrite(canhao3, 255);
analogWrite(canhao4, 255);
analogWrite(canhao5, 255);
analogWrite(canhao6, 255);
analogWrite(canhao7, 255);
}
void FocoBrancoQuenteStrobo() {
digitalWrite(focoBrancoQuente1, HIGH);
delay(60);
digitalWrite(focoBrancoQuente1, LOW);
digitalWrite(focoBrancoQuente2, HIGH);
delay(60);
digitalWrite(focoBrancoQuente2, LOW);
digitalWrite(focoBrancoQuente3, HIGH);
delay(60);
digitalWrite(focoBrancoQuente3, LOW);
}
void FocoBrancoQuente() {
digitalWrite(focoBrancoQuente1, HIGH);
digitalWrite(focoBrancoQuente2, HIGH);
digitalWrite(focoBrancoQuente3, HIGH);
}
void FocoBrancoFrio() {
digitalWrite(focoBrancoFrio1, HIGH);
digitalWrite(focoBrancoFrio2, HIGH);
digitalWrite(focoBrancoFrio3, HIGH);
digitalWrite(focoBrancoFrio4, HIGH);
}
void FocoBrancoFrioStrobo() {
digitalWrite(focoBrancoFrio1, HIGH);
delay(50);
digitalWrite(focoBrancoFrio1, LOW);
digitalWrite(focoBrancoFrio2, HIGH);
delay(50);
digitalWrite(focoBrancoFrio2, LOW);
digitalWrite(focoBrancoFrio3, HIGH);
delay(50);
digitalWrite(focoBrancoFrio3, LOW);
digitalWrite(focoBrancoFrio4, HIGH);
delay(50);
digitalWrite(focoBrancoFrio4, LOW);
}
void FocoBrancoQuenteFrioStrobo() {
digitalWrite(focoBrancoFrio1, HIGH);
delay(30);
digitalWrite(focoBrancoFrio1, LOW);
digitalWrite(focoBrancoFrio2, HIGH);
delay(30);
digitalWrite(focoBrancoFrio2, LOW);
digitalWrite(focoBrancoFrio3, HIGH);
delay(30);
digitalWrite(focoBrancoFrio3, LOW);
digitalWrite(focoBrancoFrio4, HIGH);
delay(30);
digitalWrite(focoBrancoFrio4, LOW);
digitalWrite(focoBrancoQuente1, HIGH);
delay(30);
digitalWrite(focoBrancoQuente1, LOW);
digitalWrite(focoBrancoQuente2, HIGH);
delay(30);
digitalWrite(focoBrancoQuente2, LOW);
digitalWrite(focoBrancoQuente3, HIGH);
delay(30);
digitalWrite(focoBrancoQuente3, LOW);
}
void Luminaria() {
analogWrite(luminaria, 100);
}

Exibições: 178

Responder esta

Respostas a este tópico

Oi RP, boa noite.
Em primeiro lugar, recomendo voce ler o tópico : http://labdegaragem.com/forum/topics/sugest-o-de-como-postar.
Perceba que ao postar seu código na área de texto, fez o seu tópico ficar com um inicio tão extenso, que poucos amigos ariscam " viajar " até o final dele.
Em segundo, procure ser claro e objetivo com seu texto.
Por exemplo. Não entendi o que voce quis dizer com:
" eu gostaria de conseguir executar as funções da entrada A1 e da A2 ao mesmo tempo ".
Entenda que com processadores de um unico nucleo, como e o caso dos processadores do arduino, isto não é possivel.
Existem soluções que nos dão esta sensação, pela velocidade que elas ocorrem.
O uso do de threads é uma delas.
Mas na realidade o que voce precisa, e porque?
Rui

Boa noite Rui.

Valeu pela dica sobre "sugestões de postagem". Irei seguir daqui pra frente. 

Sobre o meu problema: tenho 5 funções ativadas pela entrada A1 e 6 pela entrada A2. 

Quero apertar um botão que está na entrada A1 e que uma determinada função referente aquele botão seja executada e apertar um botão, que está na entrada A2 e que outra função também seja executada simultaneamente.

Ao que tudo indica, realmente devo usar o thread, só não é um conceito tão simples pelo que ví até agora. Valeu pela dica e atenção.

Raphael

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço