Galera, quero saber como posso fazer um contador de tempo no qual ele me retorne o tempo na própria programação.
Quero fazer um radar, no qual se tem 2 botões com uma distancia já definida (8cm), quando o objeto passar sobre esses botões o Arduino ira cronometrar o tempo em que se levou para passar sobre esses dois botões, e dividir a distancia pelo tempo, informando a velocidade. Eu acho q para isso precisarei fazer com que o tempo seja uma variável para eu poder fazer a conta.
Já pesquisaste a função millis()?
Já, porem para este propósito não sei como utilizar.
Pelos vistos já obteve algumas resposta na secção espanhola do fórum, por isso, desejo-lhe sorte por lá.
sim, pois criei minha conta aqui hj, só após a postagem lá q eu fui achar a sessão em portugas do fourum
É uma pena que não tenha lido as regras antes de postar.
if(digitalRead(senso1) == 1) {
sensor1 = millis();
sens1 = 1; }
if (digitalRead(senso2) == 1) {
sensor2 = millis();
sens2 = 1;}
if (sens2 == 1 && sens1 == 1) {
tempo = (sensor2-sensor1)/1000;
velocidade = 8/tempo; // velocidade em centimetros por segundo
sens1 = 0;
sens2 = 0;
}
E assim que se calculam velocidades, nao?
Deu quase tudo certo, porem, no monitor serial aparece apenas o número 255.
Meu código esta assim:
#define botao1 14
#define botao2 15
void setup() {
pinMode (botao1, INPUT);
pinMode (botao2, INPUT);
Serial.begin (9600);
}
void loop() {
if(digitalRead(botao1) == 1) {
byte sensor1 = millis();
byte sens1 = 1; }
if (digitalRead(botao2) == 1) {
byte sensor2 = millis();
byte sens2 = 1;}
unsigned long sens1, sens2, sensor1, sensor2;
if (sens2 == 1 && sens1 == 1) {
byte tempo = (sensor2-sensor1)/1000;}
unsigned long tempo;
byte velocidade = 8/tempo; // velocidade em centimetros por segundo
sens1 = 0;
sens2 = 0;
Serial.print (velocidade);
Serial.print ('\n');
}
ps. É assim msm q se calcula velocidade kkkk
se tivesse lido a informacao acerca da funcao millis, teria reparado que o tipo de dados retornado pela funcao e unsigned long e nao byte...
Muda o byte das variaveis sensor1 e sensor2 para unsigned long.
so mudou o numero que aparece, agora fica aparecendo -1
Meu código ficou assim:
#define botao1 52
#define botao2 53
void setup() {
pinMode (botao1, INPUT);
pinMode (botao2, INPUT);
Serial.begin (9600);
}
void loop() {
if(digitalRead(botao1) == 1) {
unsigned long sensor1 = millis();
byte sens1 = 1; }
if (digitalRead(botao2) == 1) {
unsigned long sensor2 = millis();
byte sens2 = 1;}
unsigned long sens1, sens2, sensor1, sensor2;
if (sens2 == 1 && sens1 == 1) {
unsigned long tempo = (sensor2-sensor1)/1000;}
unsigned long tempo;
int velocidade = 8/tempo; // velocidade em centimetros por segundo
Serial.print (velocidade);
Serial.print ('\n');
}
Sinceramente, duvido que isso compile. Que esperas atingir com isto?
unsigned long tempo = (sensor2-sensor1)/1000;}
unsigned long tempo;
?
Pesquisaste e tentaste perceber o que coloquei anteriormente ou atiraste para ali uns unsigned long e esperas que funcione?????? Tens as variaveis declaradas duas vezes.
unsigned long sensor1=0, sensor2=0, tempo=0;
unsigned char sens1=0, sens2=0;
void loop() {
if(digitalRead(botao1) == 1 && sens1 == 0) {
sensor1 = millis();
sens1 = 1;
}
if (digitalRead(botao2) == 1 && sens2 ==0) {
sensor2 = millis();
sens2 = 1;
}
if (sens2 == 1 && sens1 == 1) {
tempo = (sensor2-sensor1)/1000;
float velocidade = 8/tempo; // velocidade em centimetros por segundo
Serial.println (velocidade);
sens2 = 0;
sens1 = 0;
}
}
Agora esta tudo certo, muito obrigado pela ajuda, e desculpa os erros bestas, pois estou começando faz pouco tempo.