You are on page 1of 9

1 long x;//Variavel para mostrar o desenvolvimento do codigo no Serial Monitor.

2
3 void setup()
4 {
5 pinMode(D1, OUTPUT);//Define D1 como Saida.
6 pinMode(D2, OUTPUT);//Define D2 como Saida.
7 pinMode(D3, OUTPUT);//Define D3 como Saida.
8
9 Serial.begin(9600);//Inicia a comunicaçao Serial para provar que o codigo nao trava.
10 }
11
12 void loop()
13 {
14 led();//Sub rotina para acender os LED`s.
15
16 Serial.println(x++);//Mostra no serial monitor o desenvolvimento do codigo.
17 }
18
19 void led()//Sub rotina para acender os LED`s.
20 {
21 digitalWrite(D1, 1);//Acende o led 1.
22 delay(1000);//Aguarda 1 segundo.
23 digitalWrite(D2, 1);//Acende o led 2.
24 delay(1000);//Aguarda 1 segundo.
25 digitalWrite(D3, 1);//Acende o led 3.
26 delay(1000);//Aguarda 1 segundo.
27 digitalWrite(D1, 0);//-
28 digitalWrite(D2, 0);//-
29 digitalWrite(D3, 0);//-Apaga os 3 leds.
30 delay(1000);//Aguarda 1 segundo.
31 }
Ω
1 #include <user_interface.h>;//Biblioteca necessaria para acessar os Timer`s.
2
3 os_timer_t tmr0;//Cria o Timer. Maximo de 7 Timer's.
4
5 volatile byte status;//Variavel armazenada na RAM para Status do LED.
6 long x;//Variavel para mostrar o funcionamento do Codigo.
7
8 void setup()
9 {
10 os_timer_setfn(&tmr0, led, NULL); //Indica ao Timer qual sera sua Sub rotina.
11 os_timer_arm(&tmr0, 1000, true); //Inidica ao Timer seu Tempo em mS e se sera repetido ou apenas uma vez (l
12 //Neste caso, queremos que o processo seja repetido, entao usaremos TRUE.
13
14 pinMode(D1, OUTPUT);//Define D1 como Saida.
15 pinMode(D2, OUTPUT);//Define D2 como Saida.
16 pinMode(D3, OUTPUT);//Define D3 como Saida.
17
18 Serial.begin(9600);//Inicia a comunicaçao Serial.
19 }
20
21 void loop()
22 {
23 leitura();//Sub rotina para processar os LED`s.
24
25 //O codigo irá funcionar normalmente sem que haja delays e acendendo os LED`s no intervalo definido.
26 //Para demonstraçao, abra o Serial monitor e voce vera que o codigo continua normalmente.
27
28 Serial.println(x++);//Print para provar que o codigo nao trava. Abra o Serial monitor e veja
29 //que o codigo continua rodando enquanto os LED`s piscam a cada 1 Segundo.
30 }
31
32 void leitura()//Sub rotina para processar os LED`s.
33 {
34 switch (status)
35 {
36 case(1)://Caso status seja 1, acenda o led 1.
37 digitalWrite(D1, 1);
38 break;
39
40 case(2)://Caso status seja 2, acenda o led 2.
41 digitalWrite(D2, 1);
42 break;
43
44 case(3)://Caso status seja 3, acenda o led 3.
45 digitalWrite(D3, 1);
46 break;
47
48 case(4)://Caso status seja 4, Apague os 3 LED`s.
49 digitalWrite(D1, 0);
50 digitalWrite(D2, 0);
51 digitalWrite(D3, 0);
52 break;
53 }
54 }
55
56 void led(void*z)//Sub rotina ISR do Timer sera acessada a cada 1 Segundo e mudara o status do LED.
57 {
58 if (status == 4)//Verifica se o maximo foi alcançado para resetar a contagem.
59 {
60 status = 0;
61 }
62
63 status++;
64 }
1 os_timer_setfn(&tmr0, led, NULL);

1 os_timer_arm(&tmr0, 1000, true);


José Morais
Estudante de Engenharia da Computação pela USC, pretende se aprimorar e fazer a diferença nesta
imensa área da tecnologia. Apaixonado por IoT, sistemas embarcados, microcontroladores e
integração da computação nos mais diversos fins práticos e didáticos.

You might also like