Galera, estou com um problema aqui, meu código fica dando erros dizendo que a variável não foi declarada, no entanto ela foi.
Código:
#define sensorA 51
#define sensorB 52
void setup() {
Serial.begin (1900);
pinMode (sensorA, INPUT);
pinMode (sensorB, INPUT);
}
void loop() {
{while (!digitalRead(sensorA))
int tempoA = millis();
}
{while (!digitalRead(sensorB))
int tempoB = millis();
}
byte tempo = tempoB-tempoA;
byte velocidade = 0.085/tempo;
Serial.print (velocidade);
Serial.print ('\n');
}
Erro:
sketch_sep19a.ino: In function 'void loop()':
sketch_sep19a.ino:22:14: error: 'tempoB' was not declared in this scope
sketch_sep19a.ino:22:21: error: 'tempoA' was not declared in this scope
Erro compilando.
Não, não foram declaradas. Elas estão declaradas dentro dos "ciclos" while, fora desses ciclos elas não existem.
PS.: Dê uma olhadela às regras do fórum e aprenda, pelo menos, a colocar código nos posts. Outra coisa, não me parece que esses ciclos estejam bem definidos.
Obrigado! Mas então como eu poderia criar essa variável?
P.S. Obrigado, olharei os regulamentos!
AdrianoMunin:
Obrigado! Mas então como eu poderia criar essa variável?
(...)
Penso que assim é suficiente. Penso que não são necessárias as chavetas (a meu ver não estão lá a fazer nada):
#define sensorA 51
#define sensorB 52
void setup() {
Serial.begin (1900);
pinMode (sensorA, INPUT);
pinMode (sensorB, INPUT);
}
void loop() {
while (!digitalRead(sensorA));
int tempoA = millis();
while (!digitalRead(sensorB));
int tempoB = millis();
byte tempo = tempoB-tempoA;
byte velocidade = 0.085/tempo;
Serial.print (velocidade);
Serial.print ('\n');
}
Esqueci-me de acrescentar que não havendo chavetas não há outro "scope" e sendo assim não dará erro. Outra coisa que não dá erro de compilação, mas que não deve dar muito bom resultado é a utilização dos tipos de variáveis que usa. A função millis() retorna um "unsigned long" e no seu sketch está a guardar esse valor num "int". Faz a subtracção de dois "int's" e guarda o resultado num "byte". Isso, está-me a parecer, que não vai dar bom resultado.
Agora não houve nenhum erro, porém, não esta aparecendo nenhum valor no monitor serial.
Obs. Substitui as variáveis pela variável int.
Tente substituir as variáveis por unsigned long
e veja o que passa. No último caso:
byte velocidade = 0.085/tempo;
talvez o melhor seja mesmo fazer a variável 'velocidade' do tipo float
.
Fiz como dito, porem quando insiro os jumpers nas respectivas entradas, a porta serial começa a fazer uma linha infinita com um símbolo (acho q é a letra grega sigma).
Obs. Já tentei em diversas portas.
#define sensorA 2
#define sensorB 4
void setup() {
Serial.begin (1900);
pinMode (sensorA, INPUT);
pinMode (sensorB, INPUT);
}
void loop() {
while (!digitalRead(sensorA));
unsigned long tempoA = millis();
while (!digitalRead(sensorB));
unsigned long tempoB = millis();
unsigned long tempo = tempoB-tempoA;
float velocidade = 0.085/tempo;
Serial.print (velocidade);
Serial.print ('\n');
}
Só agora é que vi isto:
Serial.begin (1900);
Este valor não pode ser! Tente 9600, mas o melhor mesmo é ver o que está configurado no 'Serial Monitor' (veja no canto inferior direito). Melhor mesmo é deixar 9600 no sketch e depois configurar para o mesmo valor no 'Serial Monitor'.
Agora esta tudo funcionando, porem, não estou entendendo a lógica na qual os números aparecem no monitor serial, pois, mesmo mantendo os botes pressionados pelo mesmo tempo, é gerado números diferentes no monitor.
Como pode ver abaixo, coloquei apenas o tempo para aparecer no monitor serial.
#define sensorA 2
#define sensorB 3
void setup() {
Serial.begin (9600);
pinMode (sensorA, INPUT_PULLUP);
pinMode (sensorB, INPUT_PULLUP);
}
void loop() {
while (!digitalRead(sensorA));
unsigned long tempoA = millis();
while (!digitalRead(sensorB));
unsigned long tempoB = millis();
unsigned long tempo = tempoB-tempoA;
float velocidade = tempo;
if (velocidade > 50) {
Serial.print (velocidade);
Serial.print ('\n');}
}
O que acontece se em vez de escrever a velocidade escrever o tempo? o que acontece se em vez de isto:
float velocidade = tempo;
fizer isto:
float velocidade = (float) tempo;
(chama-se 'cast' pode procurar no Google.)