Gin News Postado Maio 22, 2021 em 18:24 Compartilhar Postado Maio 22, 2021 em 18:24 (editado) Boa tarde, pessoal. Eu preciso explicar cada detalhe desse código que vai ser usado num arduino para criar um relógio de LEDs mas não estou entendendo, então por isso venho aqui pedir para alguém me esclarecer sobre esse código, por favor. unsigned int i,n,k,d,y; unsigned long previousTime = 0; byte hours = 12; // start time byte minutes = 15; byte seconds = 00; int val; void setup() { DDRD = 0xFE; DDRB = 0xFF; DDRC = 0xFE; PORTC = 0x01; PORTD = 0x03; PORTB = 0x00; if(hours == 12) hours = 0; } void loop() { while(bit_is_clear(PINC, 0)) { } if (millis() >= (previousTime)) { previousTime = previousTime + 1000; seconds = seconds +1; if (seconds == 60) { seconds = 0; minutes = minutes +1; } if (minutes == 60) { minutes = 0; hours = hours +1; } if (hours == 12) { hours = 0; } } k=30; n=0; while(n < 60) { PORTC |= (1<<5); if ((k==0) || (k==5) || (k==10) || (k==15) || (k==20) || (k==25) || (k==30) || (k==35) || (k==40) || (k==45) || (k==50) || (k==55)) { PORTC |= (1<<4); PORTC |= (1<<3); } if ((k==0) || (k==15) || (k==30) || (k==45)) { PORTC |= (1<<2); PORTC |= (1<<1); } if((k == hours*5) || (( k == 0 ) && (hours == 0))) { PORTD |= (1<<2); PORTD |= (1<<3); PORTD |= (1<<4); PORTD |= (1<<5); PORTD |= (1<<6); PORTD |= (1<<7); PORTB |= (1<<0); } if(k == minutes) { PORTD |= (1<<2); PORTD |= (1<<3); PORTD |= (1<<4); PORTD |= (1<<5); PORTD |= (1<<6); PORTD |= (1<<7); PORTB |= (1<<0); PORTB |= (1<<1); PORTB |= (1<<2); } if(k == seconds) { PORTD |= (1<<2); PORTD |= (1<<3); PORTD |= (1<<4); PORTD |= (1<<5); PORTD |= (1<<6); PORTD |= (1<<7); PORTB |= (1<<0); PORTB |= (1<<1); PORTB |= (1<<2); PORTB |= (1<<3); PORTB |= (1<<4); } delayMicroseconds(140); PORTD = 0x03; PORTB = 0x00; PORTC = 0x01; PORTD |= (1<<2); delayMicroseconds(30); PORTD &= ~(1<<2); delayMicroseconds(600); n++; k++; if(k == 60) k=0; } while(bit_is_set(PINC, 0)) { } } Editado Maio 23, 2021 em 23:46 por Gin News Citar Link para o comentário Compartilhar em outros sites More sharing options...
Fernando Mercês Postado Maio 22, 2021 em 19:37 Compartilhar Postado Maio 22, 2021 em 19:37 Opa! Seria legal você editar seu post pra formatar seu código como código (é o botão com os símbolos <> aqui no editor) e usar a opção de realce de sintaxe em C. Porque aí fica assim ó: unsigned int i,n,k,d,y; unsigned long previousTime = 0; byte hours = 12; // start time byte minutes = 15; byte seconds = 00; int val; void setup() { DDRD = 0xFE; DDRB = 0xFF; DDRC = 0xFE; PORTC = 0x01; PORTD = 0x03; PORTB = 0x00; if(hours == 12) hours = 0; } Muito melhor de ler. :) Sobre o programa em si, a sua dúvida é aonde exatamente? Qual parte do código que você não entendeu? Abraço, Fernando Citar Link para o comentário Compartilhar em outros sites More sharing options...
Gin News Postado Maio 23, 2021 em 23:44 Autor Compartilhar Postado Maio 23, 2021 em 23:44 On 5/22/2021 at 8:37 PM, Fernando Mercês said: Opa! Seria legal você editar seu post pra formatar seu código como código (é o botão com os símbolos <> aqui no editor) e usar a opção de realce de sintaxe em C. Porque aí fica assim ó: unsigned int i,n,k,d,y; unsigned long previousTime = 0; byte hours = 12; // start time byte minutes = 15; byte seconds = 00; int val; void setup() { DDRD = 0xFE; DDRB = 0xFF; DDRC = 0xFE; PORTC = 0x01; PORTD = 0x03; PORTB = 0x00; if(hours == 12) hours = 0; } Muito melhor de ler. ? Sobre o programa em si, a sua dúvida é aonde exatamente? Qual parte do código que você não entendeu? Abraço, Fernando Peço desculpas pelo jeito que eu botei o código no post, sou meio tanso com essas coisas... Então, eu queria saber como esse código funciona por inteiro mesmo, tentei encontrar um código parecido com esse para facilitar mas não encontrei, e também faz um bom tempo que não mexo com linguagem, aí vim aqui pedir para alguém me explicar... Citar Link para o comentário Compartilhar em outros sites More sharing options...
Fernando Mercês Postado Maio 24, 2021 em 14:27 Compartilhar Postado Maio 24, 2021 em 14:27 17 horas atrás, Gin News disse: Peço desculpas pelo jeito que eu botei o código no post, sou meio tanso com essas coisas... Imagina. Foi uma sugestão mesmo, pra ficar melhor pra todos. Tá tudo certo. ;) 17 horas atrás, Gin News disse: eu queria saber como esse código funciona por inteiro mesmo Acho que neste caso precisaria ser alguém que conheça de Arduino. Eu não sei o que são essas DDRD, PORTC, etc. Você sabe? Talvez ajude relembrar os operadores em C. Por exemplo, o código abaixo: PORTD |= (1<<3); É o mesmo que: PORTD = PORTD | 8; Ou seja, é uma operação OU do valor desta variável/porta com "1 com 3 bits deslocados para a esquerda", que dá no mesmo que "multiplicar por 2 três vezes", que seria 1x2x2x2 que é igual a 8. O resultado é atualizado na própria variável/porta. Os links vão te ajudar a entender. Agora a razão pela qual o código faz isso, não sei te dizer. :( Vou ver se consigo ajuda de alguém que entenda de Arduino. Abraço, Fernando Citar Link para o comentário Compartilhar em outros sites More sharing options...
fredericopissarra Postado Maio 24, 2021 em 15:57 Compartilhar Postado Maio 24, 2021 em 15:57 (editado) DDR? (Data Direction Register). Um bit 0 significa entrada, bit 1 significa saída. PORT? (são os bits das portas). Aliás... se é para implementar um relógio, é melhor usar interrupção gerada pelo timer do microcontrolador do que tentar temporizar isso num loop. Faltam MUITOS detalhes com relação a esse seu código: Com qual frequência de clock está trabalhando? Qual é o significado dos bits nas portas B, C e D, usadas no código? (Qual é o circuito?) O troço é apenas um relógio? Onde as horas, minutos e segundos estão sendo mostradas? etc... Editado Maio 24, 2021 em 16:00 por fredericopissarra 1 Citar Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.