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

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!

Anonim
Dołącz do dyskusji! Kliknij i zacznij 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.

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