Ответ на общий вопрос
Вы не можете получить доступ к локальной переменной в функции из-за пределов функции, однако есть несколько способов получить значение из функции. Вот несколько примеров. Обратите внимание, что я использую переменную int
в примерах, но это работает и с другими типами, такими как long
.
1. Вернуть значение из функции:
int foo()
{
int val = 42;
return val;
}
int main()
{
// Gets the value from foo()
int val = foo();
}
2. Создайте глобальную переменную и измените ее в функции (не рекомендуется)
Есть несколько причин, почему это не очень хорошая практика, но я не буду вдаваться в подробности. Просто спросите Google, почему глобальные переменные обычно не очень хороши, и вы найдете достойное объяснение.
// Global variable
int val;
void foo()
{
val = 42;
}
int main()
{
// val is accessible from here and is equal to 42
}
3. Передайте переменную в функцию по указателю и измените ее в функции
void foo(int* val)
{
*val = 42;
}
int main()
{
int val;
foo(&val);
// val now contains 42
}
4. Передайте переменную по ссылке и присвойте значение в функции
void foo(int& val)
{
val = 42;
}
int main()
{
int val;
foo(val);
// val now equals 42
}
Ваш конкретный c выпуск:
Вы пытаетесь вернуть значение из * Функция 1040 *. Измените calculateSpeed
так, чтобы оно возвращало long
, а затем используйте возвращенное значение в другой функции:
// Return long
long calculateSpeed(long dist2,long dist1,long time2,long time1){
long numerator = dist2 - dist1;
long denominator = time2 - time1;
long velocity = numerator / denominator;
return velocity;
}
void loop() {
while (win == true){
getDistance();
// Get the returned value
long velocity = calculateSpeed(distance2, distance1, duration2, duration1);
// Use the returned value
Serial.println(velocity);
}
}
Однако есть и другие проблемы. Вы объявляете некоторые глобальные переменные с помощью long duration1, distance1, duration2, distance2;
, но затем вы объявляете эти переменные локально в функциях.
Например, в getDistance()
вам нужно изменить это:
long duration1 = pulseIn(echoPin, HIGH);
long distance1 = (duration1*.0343)/2;
на это :
duration1 = pulseIn(echoPin, HIGH);
distance1 = (duration1*.0343)/2;