Skocz do zawartości

Tablice w Arduino – #1 – szybki start


Pomocna odpowiedź

  • 2 tygodnie później...
  • 5 miesiące później...

@SOYER dziękuję, te pierwsze części przepisywałem kilka razy. Niestety nie dokończyłem, bo robię teraz coś innego ale wrócę do tematu. W planach są dość trudne zagadnienia i problem pojawił się w aktualnie ostatnim opublikowanym wpisie, który jest trochę niezrozumiały 😕 

Ale dzięki, że napisałeś, mam więcej motywacji do dokończenia serii 🙂 

  • Lubię! 1
  • 2 miesiące później...

Witam. To jest dokładnie to czego szukałem. Szczegółowe wyjaśnienie tablic na konkretnych przykładach! Jestem właśnie w trakcie realizacji projektu w którym dla czystości kodu aż się prosi o tablice. Także dzięki wielkie i liczę, że mój wpis będzie motywacją do dokończenia serii artykułów w tym temacie. Pozdrawiam! 

  • Lubię! 1
  • 3 tygodnie później...

Witam akurat natrafiłem na ten post swoją drogą ciekawy, ale mam pytanie. Chciałbym uzupełnić tablice stałymi za pomocą pętli for. Miałaby ona służyć do przechowywania stałych od A0 do A15 czyli zamiast pisać

#define BUTTON1_PIN A0
#define BUTTON2_PIN A1
#define BUTTON3_PIN A2
// etc..

chcę mieć to w tablicy, którą uzupełnię pętlą i potem będę mógł z niej korzystać również za pomocą pętli ktoś zechciałby pomoc?

@tenNowy ciekawy problem ale chyba nie da się go zrobić.

Jakbyś chciał mieć pętlę w preprocesorze to się nie da, możesz zrobić to makrami na nasadzie rekurencji ale to nie pomoże.

Pomyślałem że można złożyć tokeny konkatanacją i włożyć je do tablicy i później na wyjściu funkcji dać jako stałą, ale tego też się nie da:

#include <stdio.h>

#define A0 1
#define A1 2
#define A2 4
#define A3 3
#define A4 8

#define mkstr(str) #str
#define cat(x,y) (x ## y)
#define N 5

int* somestuff() {
    int results[N];
    for(int i = 0; i < N; i++){
        results[i] = cat(A, i);
    }
}

int main()
{
    const int pins[N] = somestuff();
    for(int i = 0; i < N; i++){
        printf("%d : %d", i, pins);
    }
    return 0;
}

bo macro zwraca token Ai - tu sam wpadłem w pułapkę próby użycia pętli.

Dla ciebie na pewno przydatna informacja że const to informacja że coś jest read-only więc możesz zrobić w czasie działania dane które mają później być tylko odczytywane - czyli tak jak użycie tej funkcji która zwraca wartości a ty uznajesz że będziesz je tylko czytał.

Probowałem konkatenacji ale w każdym przypadku trzeba określić typ, jak się domyślasz pewnie potrzebne mi to do Arduino i chyba zrobię to bez pętli tylko potem przy ustawianiu pinmode również pętli nie użyje co za tym idzie brak jednej pętli ciągnie za sobą brak możliwości użycia jej w dalszej części kodu i robi się spagetti skoro mam 32 włączniki i tyleż samo przekaźników

No to przeciez mozesz uzyc normalnie tablicy w petli for i operowac indeksem, lud dodatkowo porobic stale nazwy i odwolywac sie przez ta tablice tymi nazwami zeby bylo wygodniej widziec jakim guzikiem/przekaznikiem operujesz..

@tenNowy, brakuje mi tutaj jednak odrobinę więcej informacji, co naprawdę próbujesz zrobić. Np. te makra An sugerowałyby, że potrzebujesz pinów do wejścia analogowego. Piszesz o pinMode(), co w wypadku wejścia analogowego nie jest niezbędne. Jednak Twoje makra nazywają się BUTTONn_PIN i wspominasz o włącznikach i przekaźnikach, a to brzmi już na wykorzystanie cyfrowe. Przy takim braku kontekstu nie jestem pewien czy jest sens skupiać się na tym jak próbujesz osiągnąć cel, skoro nie wiadomo co chcesz osiągnąć, bo mogłoby się okazać, że to jak niekoniecznie jest tym, którego potrzebujesz.

  • Lubię! 1

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...