Problem z parametrem funkcji w arduino

Masz problem z Arduino? Tutaj możesz szukać pomocy.
ODPOWIEDZ
rycho84
Młodszy majsterkowicz
Posty: 30
Rejestracja: 5 kwie 2017, 20:10

Problem z parametrem funkcji w arduino

Post autor: rycho84 » 1 sie 2017, 12:19

Witam,
pisze funkcje do obsługi wagi, ogólnie w projekcie będą trzy belki tensometryczne do ważenia,
chodzi mi o to aby nie pisać za każdym razem wszystkich komend do ważenia tylko mieć jedną funkcję do której wpisuje tylko parametr z nr czy nazwą wagi,
coś w tym stylu:

Kod: Zaznacz cały

float waga (String nazwa_wagi){
	nazwa_wagi.set_gain(128);
	float w =	nazwa_wagi.get_units(10);
	return w;
}
niestety w tej postaci wyskakuje błąd:
exit status 1
'class String' has no member named 'set_gain'

Mógłbym to rozwiązać if-ami, i sprawdzać jaki parametr jest wpisany, ale to takie mało eleganckie ;)
Chciałbym więc zapytać czy istnieje jakieś inne rozwiązanie tego problemu?
Ostatnio zmieniony 1 sie 2017, 15:28 przez rycho84, łącznie zmieniany 1 raz.

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


Awatar użytkownika
ethanak
Złota rączka
Posty: 767
Rejestracja: 21 lis 2015, 14:41
Kontakt:

Re: Problem z parametrem funkcji w arduino

Post autor: ethanak » 1 sie 2017, 12:26

Tak - przekazać do funkcji referencję do obiektu klasy "waga" (czy jakiej tam używasz, w każdym razie coś co ma metodę set_gain), a nie nazwę.
Taka różnica, jak między piękną córką mazurskiego rybaka a imieniem Ilona. Imię też może jest piękne, ale nie ma metody kiss_me() ;)
Pisze człowiek ambitnie, a tu przychodzi prostak i wszystko rozumie.
To jest ewidentna bezczelność!
rycho84
Młodszy majsterkowicz
Posty: 30
Rejestracja: 5 kwie 2017, 20:10

Re: Problem z parametrem funkcji w arduino

Post autor: rycho84 » 1 sie 2017, 13:41

dzięki za odpowiedz, tylko że ja jestem początkujący w tym i średnio to rozumie, mógłbyś to w taki "łopotalogiczny" sposób to wytłumaczyć ew. na jakimś przykładzie?
Awatar użytkownika
ethanak
Złota rączka
Posty: 767
Rejestracja: 21 lis 2015, 14:41
Kontakt:

Re: Problem z parametrem funkcji w arduino

Post autor: ethanak » 1 sie 2017, 13:55

A pokazałeś kod programu? Skąd ja mam wiedzieć, w którym miejscu coś popaprałeś?
Przyzwyczaj się do tego, że jeśli jesteś początkujący i wiesz, gdzie jest błąd to na 100% nie masz racji. Każdy z nas był kiedyś początkujący i każdy myślał że już wszystko wie... Tylko potem okazywało się, że mu się tylko wydaje że myśli :).
Pisze człowiek ambitnie, a tu przychodzi prostak i wszystko rozumie.
To jest ewidentna bezczelność!
rycho84
Młodszy majsterkowicz
Posty: 30
Rejestracja: 5 kwie 2017, 20:10

Re: Problem z parametrem funkcji w arduino

Post autor: rycho84 » 1 sie 2017, 14:32

Kod wygląda tak (aż się boję komentarzy :D):

Kod: Zaznacz cały

#include "HX711.h"
#include "DHT.h"
#include "LowPower.h"
#include <Wire.h>
#include <DS3231.h>

DS3231 clock;
RTCDateTime dt;
int licznik = 0;
String rano, poludnie, wieczorem, wynik;
int czas;

bool stan_1 = true;
bool stan_2 = true;
bool stan_3 = true;

HX711 waga_1 (2, 3);            // (DT, SCK)
HX711 waga_2 (6, 7);
HX711 waga_3 (8, 9);

DHT dht(A3, DHT11);

void setup() {
  clock.begin();
  clock.enable32kHz(false);
  clock.enableOutput(false);

  Serial.begin(9600);

  dht.begin();
  
 
} // setup

void loop() {
  dt = clock.getDateTime();

  Serial.print(dt.hour);    Serial.print(" : ");
  Serial.print(dt.minute);  Serial.print(" : ");
  Serial.println(dt.second);
  delay(10);
  sprawdz();
  
  
  delay(50);
  for (int i = 0; i < 3; i++)
  {
    LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
  }

}     //loop

float waga (String waga){
  waga.set_gain(128);
  delay(50);
  float *w = waga.get_units(10);
  return w;
}

void tara(String waga) {
  
      waga.set_gain(128);
      waga.set_scale();
      waga.tare();      
}


void sprawdz()
{
  
  dt = clock.getDateTime();
  czas = dt.minute;
  
  
  if ((czas % 10) == 1 && stan_1) {
    stan_1 = false;
    rano = dht.readTemperature();
    Serial.println("Rano");
    Serial.print(dt.hour);   Serial.print(":");
    Serial.print(dt.minute); Serial.print(":");
    Serial.print(dt.second); Serial.println("");
  }
  else if ((czas % 10) == 5 && stan_2) {
    stan_2 = false;
    poludnie = dht.readTemperature();
    Serial.println("Poludnie");
    Serial.print(dt.hour);   Serial.print(":");
    Serial.print(dt.minute); Serial.print(":");
    Serial.print(dt.second); Serial.println("");
  }
  else if ((czas % 10) ==  9 && stan_3) {
    stan_3 = false;
    wieczorem = dht.readTemperature();
    Serial.println("Wieczorem");
    Serial.print(dt.hour);   Serial.print(":");
    Serial.print(dt.minute); Serial.print(":");
    Serial.print(dt.second); Serial.println("");
    String w1 = "Rano: ";
    String w2 = w1 + rano;
    String w3 = w2 + " Poludnie: ";
    String w4 = w3 + poludnie;
    String w5 = w4 + " Wieczorem: ";
    String w6 = w5 + wieczorem;
    
    Serial.println(w6);
  
  }

 else if ((czas % 10) == 0)
 {
    stan_1 = true;
    stan_2 = true;
    stan_3 = true;
 }

  Serial.println(czas);

  delay(200);

}

Same metody set_gain czy get_units pochodzą z biblioteki HX711.h
Funkcje o które mi chodzi nie są jeszcze użyte w kodzie, no bo nie działają ;)
Awatar użytkownika
ethanak
Złota rączka
Posty: 767
Rejestracja: 21 lis 2015, 14:41
Kontakt:

Re: Problem z parametrem funkcji w arduino

Post autor: ethanak » 1 sie 2017, 14:39

Aha, czyli mam się domyślić gdzie masz błąd w kodzie, gdzie błędny fragment skrzętnie usunąłeś?
Pokaż jak chciałeś to zrobić, wtedy pogadamy. Rozumiem że działać to nie będzie, ale przynajmniej zobaczymy dlaczego i jest duża szansa, że to ruszy.
Pisze człowiek ambitnie, a tu przychodzi prostak i wszystko rozumie.
To jest ewidentna bezczelność!
rycho84
Młodszy majsterkowicz
Posty: 30
Rejestracja: 5 kwie 2017, 20:10

Re: Problem z parametrem funkcji w arduino

Post autor: rycho84 » 1 sie 2017, 14:48

nic nie usunąłem z kodu, funkcję są zapisane, tylko nie są używane w kodzie na razie.
Później chcę je wykorzystać w funkcji sprawdz() w ten sam sposób jak odczytywana jest temperatura, to do tego chcę wypisywać stan wagi 1-szej, 2-giej czy 3-ciej
Awatar użytkownika
ethanak
Złota rączka
Posty: 767
Rejestracja: 21 lis 2015, 14:41
Kontakt:

Re: Problem z parametrem funkcji w arduino

Post autor: ethanak » 1 sie 2017, 16:18

Pokaż wreszcie jak chcesz to zrobić...
Pisze człowiek ambitnie, a tu przychodzi prostak i wszystko rozumie.
To jest ewidentna bezczelność!
rycho84
Młodszy majsterkowicz
Posty: 30
Rejestracja: 5 kwie 2017, 20:10

Re: Problem z parametrem funkcji w arduino

Post autor: rycho84 » 1 sie 2017, 18:43

Finalnie ma to wyglądać np w ten sposób:

Kod: Zaznacz cały

void loop{

Serial.print("Waga nr 1 wynosi: ");
Serial.println(waga(waga_nr_1);
Serial.print("Waga nr 2 wynosi: ");
Serial.println(waga(waga_nr_2);
Serial.print("Waga nr 3 wynosi: ");
Serial.println(waga(waga_nr_3);
mógłbym to rozwiązać ifami w ten sposób:

Kod: Zaznacz cały

float waga(String waga) {
  if (waga == "waga_1") {
    waga_1.set_gain(128);
    float w = waga_1.get_units(10);
    return w;
  }

  if (waga == "waga_2") {
    waga_2.set_gain(128);
    float w = waga_2.get_units(10);
    return w;
  }
  if (waga == "waga_3") {
    waga_3.set_gain(128);
    float w = waga_3.get_units(10);
    return w;
  }
ale to niezbyt profesjonalnie, dlatego szukam alternatywy i chcę wykorzystać coś tego pokroju:

Kod: Zaznacz cały

float waga (String nazwa_wagi){
   nazwa_wagi.set_gain(128);
   float w =   nazwa_wagi.get_units(10);
   return w;
}

a dokładniej chodzi mi o przeniesienie argumentu funkcji w miejsce nazwy obiektu, o ile to w ogóle jest możliwe
Ostatnio zmieniony 2 sie 2017, 10:48 przez rycho84, łącznie zmieniany 1 raz.
Awatar użytkownika
ethanak
Złota rączka
Posty: 767
Rejestracja: 21 lis 2015, 14:41
Kontakt:

Re: Problem z parametrem funkcji w arduino

Post autor: ethanak » 2 sie 2017, 00:25

Nie wiem dlaczego chcesz się drapać lewą ręką w prawe ucho przekładając rękę pod kolanem :)
Przede wszystkim: nie nazywaj parametru tak sam jak funkcji, bo kompilatorowi się pokićka.
Można to zrobić np. tak:

Kod: Zaznacz cały

float waga (HX711 &w) {
  w.set_gain(128);
  delay(50);
  return w.get_units(10);
}

...
// i w loop coś takiego:
  Serial.print("Waga nr 1 wynosi: ");
  Serial.println(waga(waga_1));
Aha: nie bawiłem się nigdy HX711 tak że nie wiem czy to będzie działać - pokazuję tylko, jak powinno się przekazać do funkcji referencję do obiektu.
Nie programowałeś przedtem przypadkiem w PHP? Bo to by tłumaczyło próby dostępu do obiektu przez string z nazwą...
Pisze człowiek ambitnie, a tu przychodzi prostak i wszystko rozumie.
To jest ewidentna bezczelność!
rycho84
Młodszy majsterkowicz
Posty: 30
Rejestracja: 5 kwie 2017, 20:10

Re: Problem z parametrem funkcji w arduino

Post autor: rycho84 » 2 sie 2017, 10:53

wielkie dzięki, o to właśnie mi chodziło :)
co do PHP to nie miałem z nim jak na razie styczności ;)
ODPOWIEDZ

Strony partnerskie: