Skocz do zawartości

Pomiar odległości po wciśnięciu przycisku


Pomocna odpowiedź

Napisano

Cześć,

Jestem na etapie #9 i chciałem zmodyfikować szkic, który odczytuje odległość poprzez czujnik odległości. Chciałem aby odczyt był robiony tylko w przypadku gdy dodatkowy przycisk jest wciśnięty ale niestety coś idzie nie tak.

Kod mam taki:

#define trigPin 12
#define echoPin 11
#define przycisk 10

void setup() {
 Serial.begin(9600);
 pinMode(trigPin, OUTPUT);
 pinMode(echoPin, INPUT);
 pinMode(przycisk, INPUT_PULLUP);
 
}
int zmierzOdleglosc() {
 long czas, dystans;
}
 
void loop() {
  if (digitalRead(przycisk) == LOW) {
  Serial.print(zmierzOdleglosc());
  Serial.println(" cm");
  delay(500);

  long czas, dystans;
  
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  czas = pulseIn(echoPin, HIGH);
  dystans = czas / 58;

  return dystans; 
} 
}

Błąd podczas komplikacji:

Cytat

C:\Users\Kasia\Documents\Arduino\dystans_przycisk_new\dystans_przycisk_new.ino: In function 'void loop()':

C:\Users\Kasia\Documents\Arduino\dystans_przycisk_new\dystans_przycisk_new.ino:33:10: warning: return-statement with a value, in function returning 'void' [-fpermissive]

   return dystans;

          ^

Szkic używa 2482 bajtów (7%) pamięci programu. Maksimum to 32256 bajtów.
Zmienne globalne używają 192 bajtów (9%) pamięci dynamicznej, pozostawiając 1856 bajtów dla zmiennych lokalnych. Maksimum to 2048 bajtów.

Monitor podaje cały czas wynik "0 cm" bez względu na to czy przycisk jest wciśnięty czy nie.

Jako, że programuje od miesiąca prośba o pomoc

@m81wwski skąd w Twojej pętli loop wziął się nagle return? Jaki był tego cel? Ten kod jest cały jakiś poplątany i nielogiczny, wygląda jakbyś kopiował programy i wkleił coś w złym miejscu. Spójrz na swoją funkcję dokonującą pomiaru, jest całkowicie bezsensowna. Na pewno chciałeś tak to napisać i nie jest to błąd wklejania?

#Treker - na początku chciałem w prosty sposób przerobić wasz szkic do pomiaru odległości i niestety wyszedł z tego bajzel.

Zacząłem od napisania całego szkicu od początku, ale nadal nie mogę właściwie zastosować if, aby pomiar był dokonywany tylko przy wciśniętym przycisku. W przeciwnym wypadku ma wyświetlać się komunikat "Wcisnij przycisk"

Doszedłem na razie do takiej formy ale nadal cały czas zwraca mi on odległość:

#define trigPin 12
#define echoPin 11
#define przycisk 10

void setup() {
 Serial.begin(9600);
 pinMode(trigPin, OUTPUT);
 pinMode(echoPin, INPUT);
 pinMode(przycisk, INPUT_PULLUP);
 
}
 int zmierzOdleglosc() {
  long czas, dystans;
  
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  czas = pulseIn(echoPin, HIGH);
  dystans = czas / 58;

  return dystans;
 }
void loop() {
  
  if (digitalRead(przycisk) == LOW) {

  Serial.print(zmierzOdleglosc());
  Serial.println(" cm");
  delay(500);

} else {
  Serial.println("Wcisnij przycisk");
}
}

Zostawiam to na po świętach - na razie brak mi pomysłu

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...