Gin News Posted May 22, 2021 at 06:24 PM Share Posted May 22, 2021 at 06:24 PM (edited) 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)) { } } Edited May 23, 2021 at 11:46 PM by Gin News Quote Link to comment Share on other sites More sharing options...
Fernando Mercês Posted May 22, 2021 at 07:37 PM Share Posted May 22, 2021 at 07:37 PM 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 Quote Link to comment Share on other sites More sharing options...
Gin News Posted May 23, 2021 at 11:44 PM Author Share Posted May 23, 2021 at 11:44 PM 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... Quote Link to comment Share on other sites More sharing options...
Fernando Mercês Posted May 24, 2021 at 02:27 PM Share Posted May 24, 2021 at 02:27 PM 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 Quote Link to comment Share on other sites More sharing options...
fredericopissarra Posted May 24, 2021 at 03:57 PM Share Posted May 24, 2021 at 03:57 PM (edited) 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... Edited May 24, 2021 at 04:00 PM by fredericopissarra 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.