Forum PCLab.pl: Problem z argumentami w funkcji C/C++ - Forum PCLab.pl

Skocz do zawartości

Otwarty

Ikona Najnowsze pliki

Strona 1 z 1
  • Nie możesz rozpocząć nowego tematu
  • Nie możesz odpowiadać w tym temacie

Problem z argumentami w funkcji C/C++ Oceń temat: -----

#1 Użytkownik jest niedostępny   switchb 

  • Małomówny
  • Pip
  • Grupa: Forumowicze
  • Postów: 2
  • Dołączył: Pn, 13 Maj 19

Napisany 13 Maj 2019 - 10:53

Witam.

Niedawno zacząłem zabawę z Arduino, ale jestem początkujący w programowaniu i kompletnie nie wiem jak podejść do problemu. Ciężko jest mi znaleźć coś na googlu bo nie wiem o co pytać.
Mam taki fragment kodu, a dokładniej funkcję:

void kolko1(int ileZmian, int r, int g, int b)
{
    if (aktuCzas - zapaCzas >= opoznienie)
    {
        zapaCzas = aktuCzas;

        ring1.clear();
        symetria = nrDiody - 3;
        if (symetria <= 0)
        {
            symetria = symetria + 6;
        }
        ring1.setPixelColor(symetria, r, g, b);
        ring1.setPixelColor(nrDiody, r, g, b);
        ring1.show();

        if (nrDiody > 5)
        {
            nrDiody = 0;
            zmienS1++; // --> jeśli włączone kólka same się zmieniają.
            if (zmienS1 > ileZmian)
                zmienS1 = 1;
        }

        nrDiody++;
    }
}

(Edytowałem/zmieniłem nazwy zmiennych, po sugestii Trepcia)
Ta funkcja działa bez problemu.

I teraz 'ring' to jest pierścień z diodami, mam takie trzy pierścienie.
Adafruit_NeoPixel ring1 = Adafruit_NeoPixel(35, PIN9);
Adafruit_NeoPixel ring2 = Adafruit_NeoPixel(35, PIN10);
Adafruit_NeoPixel ring3 = Adafruit_NeoPixel(35, PIN11);


Czy da się dodać do funkcji 'kolko1' argument, który zmieniał by ringi:
Coś w tym stylu:
void kolko1(int ileZmian, int r, int g, int b, ringX)
{
..TEN SAM KOD CO WYŻEJ..
}


Żeby wywoływać to w ten sposób:
kolko1(3, 0, 0, 255, ring1);
kolko1(3, 0, 0, 255, ring2);
kolko1(3, 0, 0, 255, ring3);


Z góry przepraszam za wszystkie herezje w kodzie i w tym co piszę.
Proszę o pomoc, lub wskazówkę.
Dzięki.

Ten post był edytowany przez switchb dnia: 13 Maj 2019 - 11:51


#2 Użytkownik jest niedostępny   MitycznyJeż 

  • krzem gotuJEŻ, węgiel zdrapuJEŻ
  • PipPipPipPipPip
  • Grupa: Forumowicze
  • Postów: 19969
  • Dołączył: So, 12 Kwi 14

Napisany 13 Maj 2019 - 11:04

Poczytaj o przekazywaniu argumentów przez wartość/wskaźnik/referencję.

Chcesz robić funkcję o sygnaturze
void kolko1(int ileZmian, int r, int g, int b, Adafruit_NeoPixel& ring)

i w niej już się odnosić do przekazanego argumentu, a nie obiektu globalnego.

#3 Użytkownik jest niedostępny   Trepcia 

  • Orator
  • PipPipPipPip
  • Grupa: Forumowicze
  • Postów: 676
  • Dołączył: Pn, 07 Lut 05

Napisany 13 Maj 2019 - 11:06

void kolko1(int ileZmian, int r, int g, int b, Adafruit_NeoPixel& ring)

Argument podajesz jako referencję i wszystkie zmiany będą wykonywane na tym obiekcie.

P.S.
Stosuj zmienne, które coś mówią bo ten kod źle się czyta, trzeba się domyślać.

EDYTKA:
Jeż mnie uprzedził :)

Ten post był edytowany przez Trepcia dnia: 13 Maj 2019 - 11:07


#4 Użytkownik jest niedostępny   switchb 

  • Małomówny
  • Pip
  • Grupa: Forumowicze
  • Postów: 2
  • Dołączył: Pn, 13 Maj 19

Napisany 14 Maj 2019 - 09:18

Dziękuję za błyskawiczną odpowiedź, poczytam o tym i spróbuję złożyć konkretny kod, jak się uda, napiszę co i jak.

Strona 1 z 1
  • Nie możesz rozpocząć nowego tematu
  • Nie możesz odpowiadać w tym temacie

1 Użytkowników czyta ten temat
0 użytkowników, 1 gości, 0 anonimowych