Skocz do zawartości

Tablice w Arduino – #1 – szybki start


Gieneq

Pomocna odpowiedź

@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
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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
Link do komentarza
Share on other sites

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?

Link do komentarza
Share on other sites

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

Link do komentarza
Share on other sites

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

Link do komentarza
Share on other sites

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

Link do komentarza
Share on other sites

@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
Link do komentarza
Share on other sites

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

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.