Skocz do zawartości
Zaloguj się, aby obserwować  
m81wwski

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

Pomocna odpowiedź

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

Udostępnij ten post


Link to post
Share on other sites

Funkcja loop() jest typu void i niczego nie powinna zwracać więc return na jej końcu jest błędem.

Udostępnij ten post


Link to post
Share on other sites

@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?

Udostępnij ten post


Link to post
Share on other sites

#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

Udostępnij ten post


Link to post
Share on other sites

Teraz ma to już większy sens. Jak masz podłączony przycisk?

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij, aby zacząć pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

Zaloguj się, aby obserwować  

×
×
  • Utwórz nowe...