Fala galera queria mostrar para vocês o programa de multithread/processamento paralelo que adaptei para arduino. Pode ser usado para outros projetos que necessitam de um processamento paralelo com dois ou mais delays diferentes.
São 4 Leds um pisca a cada 100ms, outro a 500ms, outro a 1000ms e outro a 2000ms.
O projeto usa:
-Arduino UNO
-4 resistores limitadores de corrente para os LEDs
-4 Leds usei um verde, azul, vermelho, amarelo
-e jumpers
Montagem:
-Ligue os Leds usando os resistores limitadores de corrente:
-Verde na digital 7
-Azul na digital 8
-Vermelho na digital 9
-Amarelo na digital 10
Código utilizado e as bibliotecas para download: https://www.mediafire.com/?8o9zq6jnfuqo1ux.
São duas bibliotecas a Utility e a TimedAction que devem ser extraídas para a pasta libraries do arduino, em seguida reinicie a ide e carregue o código para o seu arduino.
Codigo:
---------------------------------------------------------------------------------------------------------
//Titulo: Multiprocessamento para 4 LEDs piscando com tempos diferentes
//Autor: Felipe R. -- Felipe129
//Versão: 1.24.0
//Adaptado de: https://create.arduino.cc/projecthub/reanimationxp/how-to-multithread-an-arduino-protothreading-tutorial-dd2c37
//Pode ser adaptado para uso com outros sistemas duvidas [EDITADO]
/*
* Resumo:
* Led Amarelo pisca a cada 100ms
* Led Vermelho pisca a cada 500ms
* Led Azul pisca a cada 1000ms
* Led Verde pisca a cada 3000ms
*/
/*Ligação esquematica:
*Arduino UNO
*4 LEDs ligados
*Verde na digital 7
*Azul na digital 8
*Vermelho na digital 9
*Amarelo na digital 10
*/
//Bibliotecas já atualizadas
#include <Utility.h>
#include <TimedAction.h>
//Funções para cada ação
void GreenLedON(){ //LED Verde liga
digitalWrite (7, HIGH);
}
void BlueLedON(){ //LED Azul liga
digitalWrite (8, HIGH);
}
void RedLedON(){ //LED Vermelho liga
digitalWrite (9, HIGH);
}
void YellowLedON(){ //LED Amarelo liga
digitalWrite (10, HIGH);
}
void GreenLedOFF(){ //LED Verde desliga
digitalWrite (7, LOW);
}
void BlueLedOFF(){ //LED Azul desliga
digitalWrite (8, LOW);
}
void RedLedOFF(){ //LED Vermelho desliga
digitalWrite (9, LOW);
}
void YellowLedOFF(){ //LED Amarelo desliga
digitalWrite (10, LOW);
}
//Crio as ações para o multiprocessamento de cada LED on/off
TimedAction GreenLedThreadON = TimedAction(2000,GreenLedON);
TimedAction BlueLedThreadON = TimedAction(1000,BlueLedON);
TimedAction RedLedThreadON = TimedAction(500,RedLedON);
TimedAction YellowLedThreadON = TimedAction(100,YellowLedON);
TimedAction GreenLedThreadOFF = TimedAction(2000,GreenLedOFF);
TimedAction BlueLedThreadOFF = TimedAction(1000,BlueLedOFF);
TimedAction RedLedThreadOFF = TimedAction(500,RedLedOFF);
TimedAction YellowLedThreadOFF = TimedAction(100,YellowLedOFF);
void setup() {
pinMode(7, OUTPUT); //LED Verde
pinMode(8, OUTPUT); //LED Azul
pinMode(9, OUTPUT); //LED Vermelho
pinMode(10, OUTPUT); //LED Amarelo
}
void loop() {
//Chamo os multithreads para ligar e desligar cada um
GreenLedThreadON.check();
BlueLedThreadON.check();
RedLedThreadON.check();
YellowLedThreadON.check();
delay(20); //tempo que o led ficara ligado //tempo de delay apos executar as funçoes de ligar para desligar o LED
GreenLedThreadOFF.check();
BlueLedThreadOFF.check();
RedLedThreadOFF.check();
YellowLedThreadOFF.check();
delay(20);//tempo que o led ficara ligado //tempo de delay apos executar as funçoes de ligar para desligar o LED
}
----------------------------------------------------------------------------------------------------------
Referencias a: https://create.arduino.cc/projecthub/reanimationxp/how-to-multithread-an-arduino-protothreading-tutorial-dd2c37
Qualquer duvida manda um SOS