void main(void) { clock_int_48MHz(); while (1) { nivel_alto(vermelho_pedestre); nivel_baixo(vermelho_carro); nivel_alto(verde_carro); tempo(10000); nivel_baixo(verde_carro); if (flag_pedestre) { nivel_alto(amarelo_carro); tempo_ms(1000); nivel_baixo(amarelo_carro); nivel_alto(vermelho_carro); nivel_baixo(vermelho_pedestre); nivel_alto(verde_pedestre); tempo_ms(5000); nivel_baixo(verde_pedestre); flag_pedestre = 0; } } }
void Semaforo3_verde(void * self) { Semaforo3 * semaforo = (Semaforo3*) self; nivel_baixo(semaforo->pino_amarelo); nivel_baixo(semaforo->pino_vermelho); nivel_alto(semaforo->pino_verde); }
void Semaforo3_init(Semaforo3* semaforo, unsigned int vermelho, unsigned int amarelo, unsigned int verde) { semaforo->pino_vermelho = vermelho; semaforo->pino_amarelo = amarelo; semaforo->pino_verde = verde; semaforo->vermelho = &Semaforo3_vermelho; semaforo->amarelo = &Semaforo3_amarelo; semaforo->verde = &Semaforo3_verde; nivel_baixo(semaforo->pino_vermelho); nivel_baixo(semaforo->pino_amarelo); nivel_baixo(semaforo->pino_verde); }
void Task_3(void) { while(1) { nivel_baixo(pin_a1); nivel_alto(pin_a0); PORTB = set_seg_2[i/10]; OS_Delay(5); nivel_alto(pin_a1); nivel_baixo(pin_a0); PORTB = set_seg_2[i%10]; OS_Delay(5); } }
void main (void) { clock_int_4MHz(); while (1) { nivel_alto(pin_b6); tempo_ms(500); nivel_baixo(pin_b6); tempo_ms(500); nivel_alto(pin_b7); tempo_ms(500); nivel_baixo(pin_b7); tempo_ms(500); } }
void interrupcao() { if (serial_interrompeu) { serial_interrompeu=0; comando = le_serial(); switch (comando){ case '1': PORTB = 0b110000; break; case '2': PORTB = 0b11101101; break; case '3': PORTB = 0b11111001; break; case '4': PORTB = 0b10110011; break; case '5': PORTB = 0b11011011; break; case '6': PORTB = 0b11011111; break; case '7': PORTB = 0b11110000; break; case '8': PORTB = 0b11111111; break; case '9': PORTB = 0b11111011; break; case '0': PORTB = 0b11111110; break; case 'D': pisca=0; nivel_baixo(pin_b7); break; case 'P': pisca=1;nivel_alto(pin_b7); break; } } }
//#pragma interrupt interrupcao void interrupt interrupcao(){ if (INTCONbits.TMR0IF) { //espera o estouro do timer0 -> TMR0L=0 INTCONbits.TMR0IF = 0; //limpa a flag de interrupção i++; if(i>255){i=0;} if(i>=comand[1]){nivel_alto(pinored);} else {nivel_baixo(pinored);} if(i>=comand[2]){nivel_alto(pinogreen);} else {nivel_baixo(pinogreen);} if(i>=comand[3]){nivel_alto(pinoblue);} else {nivel_baixo(pinoblue);} TMR0L = TMR0L + 16; // load time before plus 240us/12(48MHz) = 10us x 4 (prescaler 001) = 80us -> T = 80us * 255 =~ 20ms } if (serial_interrompeu) { INTCONbits.TMR0IE = 0;//Desabilita interupção timer 0 serial_interrompeu=0; comando[n] = le_serial(); if (comando[n]==79) {flagb=1;n=0;} if (m>13 && comando[0]==65) {m=n; flag=1;} if (comando[n]=='R'){n=0;comando[0] = 'R';} //UTILIZAR VALORES DECIMAIS EM DOIS DIGITOS. ex:06, 23, 15, etc. if (n>=3 && comando[0]=='R') { comand[1]= comando[1]; //Led RGB anodo comum// comand[2]= comando[2]; comand[3]= comando[3]; n=0; comando[0] = 32; inverte_saida(pin_b7); INTCONbits.TMR0IE = 1; } ++n; m=n; if(n>=29){n=0;} switch (comando[0]){ case 79 : {flag=0; chegou=1;m=0;} case 'L' : {flag=0; n=0; c=1; nivel_alto(pin_b7); envia=1;} //habilita envio online via APK SanUSBLE break; case 'D' : {flag=0; n=0; nivel_baixo(pin_b7); envia=0;} //Desabilita envio break; case 'P': { flag=0; n=0; nivel_alto(pin_b7);envia=0;} //Desabilita envio break; case 'T': {flag=0; n=0; inverte_saida(pin_b7); envia=0;} //Desabilita envio break; } } }
void main(void) { clock_int_48MHz(); TRISB = 0b00000000; TRISA = 0b000000; TRISC = 0b000; nivel_baixo(amarelo_carro); nivel_baixo(verde_carro); nivel_baixo(verde_pedestre); while (1) { nivel_alto(vermelho_pedestre); nivel_baixo(vermelho_carro); nivel_alto(verde_carro); tempo(5000); nivel_baixo(verde_carro); if (flag_pedestre) { nivel_alto(amarelo_carro); tempo_ms(1000); nivel_baixo(amarelo_carro); nivel_alto(vermelho_carro); nivel_baixo(vermelho_pedestre); nivel_alto(verde_pedestre); for (i = 20; i >= 0; i--) { for (z = 0; z < 100; z++) { dezena = i / 10; unidade = i % 10; nivel_baixo(pin_dezena); nivel_alto(pin_unidade); PORTB = seg[dezena]; tempo_ms(5); nivel_baixo(pin_unidade); nivel_alto(pin_dezena); PORTB = seg[unidade]; tempo_ms(5); } } nivel_baixo(verde_pedestre); PORTB = apagado; flag_pedestre = 0; } } }
void Task_1(void) { while(1) { if (flag == 0){ nivel_alto(pin_c0); OS_Delay(5000); nivel_baixo(pin_c0); nivel_alto(pin_c1); OS_Delay(5000); nivel_baixo(pin_c1); flag = 1; }else{ nivel_alto(pin_c2); OS_Delay(1000); nivel_baixo(pin_c2); OS_Delay(1000); } } }
void interrupcao() { unsigned char c; if (serial_interrompeu) { serial_interrompeu = 0; c = le_serial(); // if (c >= '0' && c<= '9') { switch (c) { case 'L': nivel_alto(pin_d7); break; case 'B': nivel_baixo(pin_d7); break; } } } }
//#pragma interrupt interrupcao void interrupt interrupcao(){ if (serial_interrompeu) { serial_interrompeu=0; comando[n] = le_serial(); if (comando[n]==79) {flagb=1;} switch (comando[n]){ case 'L' : { nivel_alto(pin_b7);} break; case 'D' : { nivel_baixo(pin_b7);} //Desabilita envio break; case 'P': {inverte_saida(pin_b7);} //Desabilita envio break; case 'T': {inverte_saida(pin_b7);} //Desabilita envio break; } //////////FUNCAO 4: CONFIGURA RELÓGIO////////////////////Ex: Digitar A4H09 (Hora = 09) , A4D15 (Dia = 15). if (comando[n]=='A'){n=0;comando[0] = 'A';} //UTILIZAR VALORES DECIMAIS EM DOIS DIGITOS. ex:06, 23, 15, etc. if ( comando[1]== '4' && comando[2]== 'H' && n==2) { endereco=2;} //Escreve o endereco das horas if ( comando[1]== '4' && comando[2]== 'M' && n==2) { endereco=1;} //Escreve o endereco dos minutos if ( comando[1]== '4' && comando[2]== 'S' && n==2) { endereco=0;} //Escreve o endereco dos segundos if ( comando[1]== '4' && comando[2]== 'D' && n==2) { endereco=4;} //Escreve o endereco do dia if ( comando[1]== '4' && comando[2]== 'N' && n==2) { endereco=5;} //Escreve o endereco do mes if ( comando[1]== '4' && comando[2]== 'Y' && n==2) { endereco=6;} //Escreve o endereco do ano if ( comando[1]== '4' && comando[3]>='0'&&comando[3]<='9'&& n==3) {numquant=(comando[3]-0x30);} if ( comando[1]== '4' && comando[4]>='0'&&comando[4]<='9'&& n==4) {numquant=numquant*10+(comando[4]-0x30); flagA4=1; } //////////////*////////FUNCAO 5: LÊ RELÓGIO////////////////////////////Ex: A5- Lê o relógio e o calendário if (comando[1]== '5' && n==1){flagA5=1;} ++n; if(n>=5){n=0;} } }
void main(){ clock_int_4MHz(); taxa_serial(19200); while(1) { if(!entrada_pin_e3){Reset();}//pressionar o botão para gravação if(PIR1bits.RCIF) //Flag que indica byte na USART - Serial_avaliable() { PIR1bits.RCIF = 0; //reset flag switch(RCREG)// byte recebido { case 'L': nivel_alto(pin_b7); break;//Chega L acende o led case 'D' : nivel_baixo(pin_b7); break;//Chega D apaga o led } } } }
void main() { clock_int_4MHz(); habilita_interrupcao(recep_serial); taxa_serial(9600); while (1) { if(!entrada_pin_e3){Reset();}//pressionar o botão para gravação nivel_alto(pin_b7); tempo_ms(1000); nivel_baixo(pin_b7); tempo_ms(1000); //tempo_ms(2000); ultoa(d,str); // convert to string and print d - importante para sensores putsUSART(str); tempo_ms(200);// o tempo para envio de mais de um caractere // escreve_serial('A'); //while (envia_byte());// escreve só um byte //------------Transmissão Serial ---------------------------------------------------------------- putsUSART((char *) Txdata); // transmite the string if (avisa_interrompeu == 1) //foi inserido um caracter? { if(inputstr[str_pos - 1] == 'K') //0x0D o último caracter foi o ENTER? {avisa_interrompeu = 0; // printf("Comando digitado %s\r", inputstr); str_pos = 0; //reset da posição na string de buffer } } } }
void interrupcao() { if (serial_interrompeu) { serial_interrompeu=0; avisa_interrompeu=1; inputstr[str_pos] = getcUSART(); //ou le_serial - vai buscar a inputstr à porta série caracter a caracter (em cada iterada) str_pos++;//incrementa a posição de escrita na string de destino if(str_pos == 30){str_pos = 0;} //verifica se a string de 80 caracteres //está cheia e caso o esteja faz reset da posição de escrita na string a 0 //comando = le_serial();//apenas um byte switch (inputstr[0]) //teste da comunicacao serial no Terminal { case 'L' : {pisca=0; nivel_alto(pin_b7);putrsUSART ( (const far rom char *) " Ligado\r\n");while (envia_byte());} //Recebe A e Transmite byte B para teste break; case 'D' : {pisca=0; nivel_baixo(pin_b7);putrsUSART ( (const far rom char *) " Desligado");while (envia_byte());} break; case 'P' : {pisca=1; printf_text(Txdata); printf_data(10); } break; } } }
void main(){ TRISA = 0x00; TRISB = 0x00; TRISC = 0x00; PORTB = 0x7F; clock_int_48MHz(); habilita_interrupcao(recep_serial); taxa_serial(19200); //T0CON BITS = TMR0ON , T08BIT(0=16bits OR 1=8bits), T0CS , T0SE , PSA , T0PS2 T0PS1 T0PS0. //Defaull 1 in all bits. T0CON =0B11000001; //TMR0ON, 8 bits, Prescaler 1:4 (001 - see datasheet) TMR0L = 6; //conta 250us antes de estourar x 4 = 1ms nivel_baixo(pin_c1); nivel_baixo(pin_c2); while(1){ if(!entrada_pin_e3){Reset();}//pressionar o botão para gravação inverte_saida(pin_b7); tempo_ms(500); n=0; flag = 0; if(dia >=0 && dia <=9 && hora >=0 && hora <=23 && minuto >=0 && minuto <=59 && segundo >=0 && segundo <=59){ nivel_baixo(pin_b7); if(dia!=0 || hora!=0 || minuto!=0 || segundo!=0){ nivel_alto(pin_c1); nivel_alto(pin_c2); for(i=dia;i>=0;i--){ for(j=hora;j>=0;j--){ dezhora=j/10; undhora=j%10; for(w=minuto;w>=0;w--){ dezmin=w/10; undmin=w%10; for(x=segundo;x>=0;x--){ if(flag != 1){ dezseg=x/10; undseg=x%10; for(y=0;y<71;y++){ //71 * 14 = 994 ms TMR0L = 0; nivel_alto(pin_c0); nivel_baixo(pin_a5); nivel_baixo(pin_a4); nivel_baixo(pin_a3); nivel_baixo(pin_a2); nivel_baixo(pin_a1); nivel_baixo(pin_a0); PORTB=set_segC[i]; timer0_ms(2); nivel_baixo(pin_c0); nivel_alto(pin_a5); PORTB=set_segC[dezhora]; timer0_ms(2); nivel_baixo(pin_a5); nivel_alto(pin_a4); PORTB=set_segC[undhora]; timer0_ms(2); nivel_baixo(pin_a4); nivel_alto(pin_a3); PORTB=set_segC[dezmin]; timer0_ms(2); nivel_baixo(pin_a3); nivel_alto(pin_a2); PORTB=set_segC[undmin]; timer0_ms(2); nivel_baixo(pin_a2); nivel_alto(pin_a1); PORTB=set_segC[dezseg]; timer0_ms(2); nivel_baixo(pin_a1); nivel_alto(pin_a0); PORTB=set_segC[undseg]; timer0_ms(2); } if (flag == 1){ nivel_baixo(pin_a0); } } }segundo=59; }minuto=59; }hora=23; } nivel_baixo(pin_a0); nivel_baixo(pin_c1); nivel_baixo(pin_c2); flag = 0; } for(a=0;a<2;a++){ for(b=0;b<3;b++){ for(c=0;c<50;c++){ nivel_alto(pin_c0); nivel_baixo(pin_a5); nivel_baixo(pin_a4); nivel_baixo(pin_a3); nivel_baixo(pin_a2); nivel_baixo(pin_a1); nivel_baixo(pin_a0); PORTB=set_theend[5]; tempo_ms(3); nivel_baixo(pin_c0); nivel_alto(pin_a5); PORTB=set_theend[4]; tempo_ms(3); nivel_baixo(pin_a5); nivel_alto(pin_a4); PORTB=set_theend[3]; tempo_ms(3); nivel_baixo(pin_a4); nivel_alto(pin_a2); PORTB=set_theend[2]; tempo_ms(3); nivel_baixo(pin_a2); nivel_alto(pin_a1); PORTB=set_theend[1]; tempo_ms(3); nivel_baixo(pin_a1); nivel_alto(pin_a0); PORTB=set_theend[0]; tempo_ms(3); } PORTB=0x7F; tempo_ms(time); } time=900; } PORTB = 0x7F; dia = -1; hora = -1; minuto = -1; segundo = -1; } } }
void interrupcao(){ if (serial_interrompeu) { serial_interrompeu=0; comando[n] = le_serial(); m=n; //comand[m]=comando[n]; switch (comando[n]){ case 'C': AT1=1; break; case 'I': AT2=1; break; case 'A': AT1=1; break; case 'S': AT1=1; break; case '*': AT1=1; break; case 'Y': {n=0;comando[0] = 'Y';} break; } //***************possibility 1->character*********************** if (comando[0]== 'Y' && n==1){comando[0]== 32; switch(RCREG) { case 'L': nivel_alto(pin_b7); //type in browser address bar: 192.168.1.195/YL flagsw=1; break; case 'D': nivel_baixo(pin_b7); //type in browser address bar: 192.168.1.195/YD break; case 'P': nivel_alto(pin_b7); //type in browser address bar: 192.168.1.195/YP break; case 'T': inverte_saida(pin_b7); //type in browser address bar: 192.168.1.195/YT to toggle Led and open a HTML page flagsw=1; break; } } //***************possibility 2-> word************************** if ( comando[1]== 'O' && comando[2]== 'N') { nivel_alto(pin_b7); // ON } if ( comando[1]== 'O' && comando[2]== 'F' && comando[3]== 'F') { nivel_baixo(pin_b7); // OFF } ++n; if(n>=64){n=0;} } }
void Semaforo2_verde(void * self) { Semaforo2 * semaforo = (Semaforo2*) self; nivel_baixo(semaforo->pino_vermelho); nivel_alto(semaforo->pino_verde); }