eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaprogramowanie w C - bardzo ogólne pytanie o filozofię. Arduino w roli programatora pralki
Ilość wypowiedzi w tym wątku: 79

  • 1. Data: 2017-10-23 23:07:53
    Temat: programowanie w C - bardzo ogólne pytanie o filozofię. Arduino w roli programatora pralki
    Od: ToMasz <t...@p...fm.com.pl>

    witam
    bardzo bardzo hobbisticznie zajmuję się arduino. w wolnych chwilach,
    żeby synowi zaszczepić.... Nie. Żeby się nie bał elektroniki. Wpadłem na
    pomysł aby pralkę w której umarła elektronika, naprawić za pomocą
    arduino. Tyle ze ja pokolenie temu programowałem zx spectrum, więc
    jestem skażony na całe życie
    Czy w basicu czy w C++, zacząłbym od napisania sekcji, takich jak
    pranie, czyli: spawdzenie czy jest woda, czy klapka zamknięta i
    obracanie bębnem w prawo i lewo, Wirowanie, czyli znowu - klapa, woda i
    dawaj z obracaniem itd. pralkę zaopatrzyłbym w 3 pokrętła. czas prania,
    szybkość wirowania i temperatura. użytkownik ustawiałby nimi wartość
    zmiennych czas, temp, obr. no i w basicu, każda z sekcji zaczynałby się
    w konkretnej lini. pranie 100, płukanie 200, wirowanie 300.
    sam program wykonawczy wyglądałby ( w uproszczeniu ) tak:
    go to 100 (pranie)
    go to 100 (pranie)
    go go 100 (pranie)
    go to 200 (płukanie)
    go to 300 (wirowanie)
    nie chcąc komplikować emaila, użyłem 3 zadań, ale ze wzrostem ich
    liczby, program w bascu, tylko lekko urośnie. w C++ - nie mam pojęcia
    jak to _dobrze_ zrobić. precyzując - zrobię, program wychodzi 2 razy
    dłuższy, i to na zasadzie, rób _wszystko_ po kolei (bo nie mogę skakać
    po numerach lini), ale jeśli jakiś tam parametr był już
    zrobiony(wybrany), to pomiń.... (np płukanie). tak, da się, ale program
    robi się znacznie dłuzszy, coraz więcej zmiennych, i tabun if-ów. no nie
    wierzę że nieda się tego w C++ zrobić prościej.

    Czy moglibyście mi pi razy oko wyjasnić jak to sie w C robi? Tyle ze nie
    mogą być to osobne programy zapisane na dysku (do wczytywania w miarę
    trwania prania), bo to trzeba na raz wgrać do arduino.

    ToMasz

    PS
    PRalki jeszcze nie tknąłem.


  • 2. Data: 2017-10-24 08:29:18
    Temat: Re: programowanie w C - bardzo ogólne pytanie o filozofię. Arduino w roli programatora pralki
    Od: Janusz <j...@o...pl>

    W dniu 2017-10-23 o 23:07, ToMasz pisze:
    > witam
    > bardzo bardzo hobbisticznie zajmuję się arduino. w wolnych chwilach,
    > żeby synowi zaszczepić.... Nie. Żeby się nie bał elektroniki.
    Kupić zestaw czujników + wyświetlacz i się bawić z synem.

    Wpadłem na
    > pomysł aby pralkę w której umarła elektronika, naprawić za pomocą
    > arduino. Tyle ze ja pokolenie temu programowałem zx spectrum, więc
    Zły pomysł, tam jest sieć, i do zabawy się to nie nadaje, wpierw trzeba
    wymyśleć międzymordzie pomiędzy czujnikami, zaworami, silnikiem a avrduino.
    To nie bułka z masłem.

    > jestem skażony na całe życie
    > Czy w basicu czy w C++, zacząłbym od napisania sekcji, takich jak
    W C są funkcje, nie ma numerowania lini bo funkcje identyfikuje sie po
    nazwie a nie numerze linii w której występuje.
    Poczytaj razem z synem kurs arduino, tam masz to wyjaśnione.

    > PRalki jeszcze nie tknąłem.
    I dobrze, jeszcze sobie lub dziecku krzywdę zrobisz.

    --
    Pozdr
    Janusz


  • 3. Data: 2017-10-24 09:31:16
    Temat: Re: programowanie w C - bardzo ogólne pytanie o filozofię. Arduino w roli programatora pralki
    Od: Atlantis <m...@w...pl>

    W C/C++ możesz z grubsza programować tak, jak to się robiło w Basicu.
    Służą do tego etykiety (słowo zakończone dwukropkiem) oraz instrukcja
    goto. Tylko moim zdaniem nie ma to większego sensu - instrukcja ta
    przydaje się sporadycznie (choć w pewnych sytuacjach faktycznie się
    przydaje), a jej nadużywanie drastycznie zmniejsza czytelność kodu. Są
    tacy, których zdaniem nie powinno się jej używać w ogóle.

    Programowanie strukturalne albo obiektowe jest dużo bardziej naturalnym
    rozwiązaniem od tego, z czym ma się do czynienia w Basicu albo
    asemblerze. Dlatego warto jak najszybciej pozbyć się starych przyzwyczajeń.


  • 4. Data: 2017-10-24 10:15:42
    Temat: Re: programowanie w C - bardzo ogólne pytanie o filozofię. Arduino w roli programatora pralki
    Od: Piotr Gałka <p...@c...pl>

    W dniu 2017-10-24 o 09:31, Atlantis pisze:
    > W C/C++ możesz z grubsza programować tak, jak to się robiło w Basicu.
    > Służą do tego etykiety (słowo zakończone dwukropkiem) oraz instrukcja
    > goto. Tylko moim zdaniem nie ma to większego sensu - instrukcja ta
    > przydaje się sporadycznie (choć w pewnych sytuacjach faktycznie się
    > przydaje), a jej nadużywanie drastycznie zmniejsza czytelność kodu. Są
    > tacy, których zdaniem nie powinno się jej używać w ogóle.
    >

    Nigdy nie zdarzyło mi się mieć potrzeby użycia w C instrukcji goto, ba,
    nawet jakby mnie ktoś poprosił o wymienienie wszystkich instrukcji
    dostępnych w C to chyba bym sobie o niej nie przypomniał, a używam
    (sporadycznie i nie do mikrokontrolerów) C gdzieś tak od 1986r.

    Tak się zastanawiam do czego ona mogła by być przydatna i nie bardzo
    potrafię wymyślić jakiś przykład generujący realną taką potrzebę.
    A jeśli już w ogóle to chyba tylko wewnątrz jednej funkcji do jakiegoś
    rozwikłania czegoś co w przeciwnym wypadku wymagało by albo dwukrotnego
    napisania kilku linijek programu, albo ujęcia ich w kolejną wywoływaną
    funkcję.
    Na pewno wybrałbym jedno z tamtych rozwiązań, a nie goto, choćby
    dlatego, że nie pamiętam o jego istnieniu.
    P.G.


  • 5. Data: 2017-10-24 10:49:14
    Temat: Re: programowanie w C - bardzo ogólne pytanie o filozofię. Arduino w roli programatora pralki
    Od: "J.F." <j...@p...onet.pl>

    Użytkownik "ToMasz" napisał w wiadomości grup
    dyskusyjnych:osllnb$psp$...@d...me...
    >bardzo bardzo hobbisticznie zajmuję się arduino. w wolnych chwilach,
    >żeby synowi zaszczepić.... Nie. Żeby się nie bał elektroniki. Wpadłem
    >na pomysł aby pralkę w której umarła elektronika, naprawić za pomocą
    >arduino.

    Na tym poziomie zaawansowania ... kup nowa pralke :-)
    Ale na starej mozesz pocwiczyc - przyda sie do nowej, jak sie zepsuje
    :-)

    >Czy w basicu czy w C++, zacząłbym od napisania sekcji, takich jak
    >pranie, czyli: spawdzenie czy jest woda, czy klapka zamknięta i
    >obracanie bębnem w prawo i lewo, Wirowanie, czyli znowu - klapa, woda
    >i dawaj z obracaniem itd. pralkę zaopatrzyłbym w 3 pokrętła. czas
    >prania,

    A tu choroba "przerwania" przychodza - zona chce program zmienic, albo
    zapomniany ciuch dorzucic.

    >sam program wykonawczy wyglądałby ( w uproszczeniu ) tak:
    >go to 100 (pranie)
    go sub chyba ... tak, zeby mogl wrocic.
    >go to 100 (pranie)
    >go go 100 (pranie)
    >go to 200 (płukanie)
    >go to 300 (wirowanie)

    >Czy moglibyście mi pi razy oko wyjasnić jak to sie w C robi? Tyle ze
    >nie

    Ilu programistow, tyle metod.

    J>


  • 6. Data: 2017-10-24 10:56:23
    Temat: Re: programowanie w C - bardzo ogólne pytanie o filozofię. Arduino w roli programatora pralki
    Od: "HF5BS" <h...@...pl>


    Użytkownik "Piotr Gałka" <p...@c...pl> napisał w
    wiadomości news:osmsrd$mk1$1$PiotrGalka@news.chmurka.net...
    >W dniu 2017-10-24 o 09:31, Atlantis pisze:
    >> W C/C++ możesz z grubsza programować tak, jak to się robiło w Basicu.
    >> Służą do tego etykiety (słowo zakończone dwukropkiem) oraz instrukcja
    >> goto. Tylko moim zdaniem nie ma to większego sensu - instrukcja ta
    >> przydaje się sporadycznie (choć w pewnych sytuacjach faktycznie się
    >> przydaje), a jej nadużywanie drastycznie zmniejsza czytelność kodu. Są
    >> tacy, których zdaniem nie powinno się jej używać w ogóle.
    >>
    >
    > Nigdy nie zdarzyło mi się mieć potrzeby użycia w C instrukcji goto, ba,
    > nawet jakby mnie ktoś poprosił o wymienienie wszystkich instrukcji
    > dostępnych w C to chyba bym sobie o niej nie przypomniał, a używam
    > (sporadycznie i nie do mikrokontrolerów) C gdzieś tak od 1986r.

    Ja w basicu też mniej-więcej tak. Przyznaję, używałem, w różnych dialektach.
    Głównie w sytuacji, gdy np. finalizowałem program i np. trzeba było
    przeskoczyć baterię podprogramów (tak, jak najbardziej daje sie programować
    strukturalnie, obiektowo? Przyznam, że nie wiem, musiałbym poznać, co to), a
    upraszczało to program... Albo z lenistwa :)

    >
    > Tak się zastanawiam do czego ona mogła by być przydatna i nie bardzo
    > potrafię wymyślić jakiś przykład generujący realną taką potrzebę.

    Na szybko, z numerami linii, trochę lenistwa (jak np. coś się rzeźbiło
    ad-hoc, nie szkoda róż, gdy płonie las, jak szkoda było czasu na
    grzeczności)

    10 coś-tam
    20 gdzieś tam
    25 IF n=7 GOTO 50
    30 GOSUB 100: REM drapanie po tyłku
    40 GOSUB 200: REM klepanie po ramieniu
    50 END: REM kończymy program, można zastosować, robiło się IF n=7 THEN END
    100 podrap mnie: RETURN
    200 poklep mnie: RETURN

    Czasami szybciej było tak "na chama", niż tworzyć dodatkowo zestaw procedur.
    Poza tym, zajmowało mniej pamięci, niewiele, czasem było to decydujące, jak
    program był na styk w pamięci, co w małych komputerkach było całkiem częste.

    > A jeśli już w ogóle to chyba tylko wewnątrz jednej funkcji do jakiegoś
    > rozwikłania czegoś co w przeciwnym wypadku wymagało by albo dwukrotnego
    > napisania kilku linijek programu, albo ujęcia ich w kolejną wywoływaną
    > funkcję.

    Różnie, często z lenistwa, ale też często z braku (poza GOSUB/GO SUB -
    zależnie od dialektu) mechanizmu wspierającego strukturalność w wielu
    dialektach BASICa.
    Pierwsze możliwości trafiłem w QBASIC M$, gdzie zresztą linie programu są
    już w rzeczywistości etykietami i tak przez interpreter uważane. Gdzie
    jawnie można już było używać etykiet, już chyba od GWBASICa była też
    rozszerzona instrukcja IF: (nie pomnę teraz dokładnej składni, ale mniej
    więcej...)

    IF n=7
    podrap mnie po głowie
    powiedz coś miłego
    mozna było zagnieżdżać pętle
    ENDIF

    Jeszcze pętle WHILE-WEND, co dialekt, to inaczej.

    > Na pewno wybrałbym jedno z tamtych rozwiązań, a nie goto, choćby dlatego,
    > że nie pamiętam o jego istnieniu.

    No, gdybym od początku tak mógł..., zresztą nawet wszelkie pisemka
    pyszczyły, aby unikać goto, żeby działać strukturalnie, dzięki czemu np. w
    razie zmiany jakiegoś komponentu przegrzebać trzeba będzie tylko jego
    podprogram, zamiast rzeźbić ponownie całość, taka konstrukcja modułowa.
    Zresztą, dla zabawy bawiłem się (tautologia, wiem), w programowanie
    strukturalne używając tylko goto, bez gosub i innych procedur definiowanych.

    Dzisiaj... chyba już mi się nie bardzo chce, bo się nie bawię...
    Sporadycznie...

    --
    Psy kochają przyjaciół i gryzą wrogów,
    w odróżnieniu od ludzi, którzy niezdolni są do czystej miłości
    i zawsze muszą mieszać miłość z nienawiścią.
    (C) Zygmunt Freud.


  • 7. Data: 2017-10-24 11:22:51
    Temat: Re: programowanie w C - bardzo ogólne pytanie o filozofię. Arduino w roli programatora pralki
    Od: Janusz <j...@o...pl>

    W dniu 2017-10-24 o 10:15, Piotr Gałka pisze:
    > W dniu 2017-10-24 o 09:31, Atlantis pisze:
    >> W C/C++ możesz z grubsza programować tak, jak to się robiło w Basicu.
    >> Służą do tego etykiety (słowo zakończone dwukropkiem) oraz instrukcja
    >> goto. Tylko moim zdaniem nie ma to większego sensu - instrukcja ta
    >> przydaje się sporadycznie (choć w pewnych sytuacjach faktycznie się
    >> przydaje), a jej nadużywanie drastycznie zmniejsza czytelność kodu. Są
    >> tacy, których zdaniem nie powinno się jej używać w ogóle.
    >>
    >
    > Nigdy nie zdarzyło mi się mieć potrzeby użycia w C instrukcji goto, ba,
    > nawet jakby mnie ktoś poprosił o wymienienie wszystkich instrukcji
    > dostępnych w C to chyba bym sobie o niej nie przypomniał, a używam
    > (sporadycznie i nie do mikrokontrolerów) C gdzieś tak od 1986r.
    >
    > Tak się zastanawiam do czego ona mogła by być przydatna i nie bardzo
    > potrafię wymyślić jakiś przykład generujący realną taką potrzebę.
    Znalazłby się, np wyjście z podwójnej pętli, breakiem wyjdziesz tyle że
    pętlę wyżej gdzie musisz testować warunek dalszego wyjścia, jak widzisz
    zaciemnia się kod i robi się to mało eleganckie.


    --
    Pozdr
    Janusz


  • 8. Data: 2017-10-24 11:24:17
    Temat: Re: programowanie w C - bardzo ogólne pytanie o filozofię. Arduino w roli programatora pralki
    Od: Piotr Gałka <p...@c...pl>

    W dniu 2017-10-23 o 23:07, ToMasz pisze:
    > Czy moglibyście mi pi razy oko wyjasnić jak to sie w C robi? Tyle ze nie
    > mogą być to osobne programy zapisane na dysku (do wczytywania w miarę
    > trwania prania), bo to trzeba na raz wgrać do arduino.
    >

    W C zrobisz np. tak:

    int obroty(int kierunek,int czas)
    {
    // tu sterowanie silnikiem i odmierzenie czasu
    }

    int pranie(int cykli)
    {
    int i;
    int err;

    for(i=0;i<cykli;i++)
    {
    err=obroty(0,5); // w lewo, przez 5 sekund
    if(err!=0)return err;
    err=obroty(1,5); // w prawo, przez 5 sekund
    if(err!=0)return err;
    }
    return 0; // oznacza że się udało bez błędów
    }

    //podobnie
    int plukanie(int cykli)
    {

    }

    int wirowanie(int czas, int predkosc)
    {

    }

    //i całość

    void main()
    {
    int err;

    err=wlewanie_wody();
    if(err==0)err=pranie(50);
    if(err==0)err=plukanie(5);
    if(err==0)err=wirowanie(20,1000);
    if(err!=0)mrugaj_czerwownym_LEDem_w_nieskonczonosc()
    ;
    zapal_LED_koniec_prania();
    }

    Użyłem int jako err bo ogólnie błędom można nadać różne numery i je
    rozróżniać.
    Ale jak jest tylko zero/jedynkowo to czytelniej byłoby wszędzie gdzie
    jest err zamiast int użyć bool.

    Ja zaczynałem się uczyć C od książki Kernighan, Ritche "Język C", ale to
    było wieki temu. Nie mam pojęcia czy teraz jest coś lepszego aby zacząć
    od podstaw.
    Ale na pewno warto - choćby dla swojego samorozwoju.

    Z tym, że ja uważam, że nie koniecznie trzeba zaprzęgać C do hardawre'u.
    Równie dobrze można korzystać z komputera samego w sobie.

    Zadanie 1 ode mnie:
    1.Napisz program do wypisywania na ekranie kolejnych liczb pierwszych
    (np. do 100, a jak już będzie działał to zmień zakres na 1000).
    2.Otocz go pomiarem czasu wykonania - czyli jak kończy to wypisuje ile
    mu to zajęło.
    3.Rozdziel proces wyliczania od procesu wypisywania liczb pierwszych
    (czyli wyniki zbieraj w buforze i potem wypisuj z bufora).
    4.Zamiast wypisywać liczby pierwsze wypisz tylko ich liczbę (wiesz ile
    zebrałeś ich w buforze). Możesz zwiększyć zakres poszukiwania - może do
    10000.
    5.Zastanów się co można zmienić w algorytmie aby program liczył szybciej
    - masz gotowe narzędzie do sprawdzenia czy pomysł jest dobry, czy zły, a
    wypisywanie liczby znalezionych liczb ma wykryć sytuacje, gdyby
    modyfikacja algorytmu coś w nim zepsuła i jednocześnie nie zajmuje czasu
    wypisywaniem wszystkich liczb, bo obsługa ekranu jest czasochłonna

    Ewentualne zadanie 2 (moim zdaniem trudniejsze):
    Mieliśmy kiedyś taką grę "samotnik" (jest pewnie wiele typów). Trójkąt -
    w dolnej linii 5 dziurek, w następnej 4 itd aż na górze jedna. Wkłada
    się w to pionki zostawiając jedną dziurkę wolną i następnie zbija je jak
    w warcabach. Celem jest aby został tylko jeden pionek.

    Mój, wtedy chyba 7 letni, syn się bardzo irytował, że to nigdy nie da
    się zrobić i pytał, czy ja umiem. Powiedziałem mu, że ja takie problemy
    rozwiązuję inaczej. Usiedliśmy przy komputerze i po około 2h miałem
    program (w międzyczasie tłumaczyłem dziecku mniej więcej jak zapisuję to
    zadanie (obrazkowo na papierze, a nie w kodzie)), który dla każdego
    stanu początkowego wyszukiwał wszystkie sekwencje prowadzące do sukcesu.
    Mój program składał się z 13-tu zagłębionych pętli for(). Każda pętla
    wykonywała jeden ruch i wołała kolejną (chyba, że ruch już nie był
    możliwy). Jak dochodziło do ostatniej i ona mogła wykonać ruch to
    oznaczało sukces.
    Jak już to miałem to użyłem tej procedury do policzenia ile sekwencji
    kończy się sukcesem w każdej z 4 sytuacji początkowych (inne są
    symetryczne) z tego wyszło, z jakiej zaczynać aby mieć największą
    szansę. A potem dla każdej sytuacji wydrukowałem po 10 sekwencji
    prowadzących do celu i on już sam je sobie "w realu" przećwiczył i
    bardzo mu się podobało, że nareszcie ta wkurzająca gra została pokonana.
    P.G.


  • 9. Data: 2017-10-24 11:39:25
    Temat: Re: programowanie w C - bardzo ogólne pytanie o filozofię. Arduino w roli programatora pralki
    Od: ajt <a...@a...com.pl>

    W dniu 2017-10-24 o 10:15, Piotr Gałka pisze:
    > Nigdy nie zdarzyło mi się mieć potrzeby użycia w C instrukcji goto, ba,
    > nawet jakby mnie ktoś poprosił o wymienienie wszystkich instrukcji
    > dostępnych w C to chyba bym sobie o niej nie przypomniał, a używam
    > (sporadycznie i nie do mikrokontrolerów) C gdzieś tak od 1986r.
    >
    > Tak się zastanawiam do czego ona mogła by być przydatna i nie bardzo
    > potrafię wymyślić jakiś przykład generujący realną taką potrzebę.

    Mam podobny staż i też nie używam goto, ale jedyny raz to zrobiłem w
    pewnym konkretnym przypadku. Musiałem zaimplementować algorytm liczenia
    pierwiastków zespolonych wielomianu dowolnego stopnia. W jakiejś książce
    znalazłem gotową procedurę w Fortranie. Kod był strasznie pokręcony i
    miał powtykane goto w wielu różnych miejscach, np. w ten sposób było
    zrobione wyjście z pętli, ale i wskoczenie do pętli w inne miejsce po
    spełnieniu jakiegoś warunku na zewnątrz. Próbowałem to przerobić na
    jakąś czytelniejszą postać, ale w końcu się poddałem i mechanicznie
    przepisałem na C, wraz ze wszystkimi goto. Poszło od pierwszego razu,
    więc nie chciało mi się już później przy tym grzebać :)
    --
    Pozdrawiam
    Andrzej
    www.radom.city


  • 10. Data: 2017-10-24 11:45:09
    Temat: Re: programowanie w C - bardzo ogólne pytanie o filozofię. Arduino w roli programatora pralki
    Od: Piotr Gałka <p...@c...pl>

    W dniu 2017-10-24 o 10:56, HF5BS pisze:
    >
    >> Nigdy nie zdarzyło mi się mieć potrzeby użycia w C instrukcji goto,
    >> ba, nawet jakby mnie ktoś poprosił o wymienienie wszystkich instrukcji
    >> dostępnych w C to chyba bym sobie o niej nie przypomniał, a używam
    >> (sporadycznie i nie do mikrokontrolerów) C gdzieś tak od 1986r.
    >
    > Ja w basicu też mniej-więcej tak. Przyznaję, używałem, w różnych
    > dialektach.
    > Głównie w sytuacji, gdy np. finalizowałem program i np. trzeba było
    > przeskoczyć baterię podprogramów (tak, jak najbardziej daje sie
    > programować strukturalnie, obiektowo? Przyznam, że nie wiem, musiałbym
    > poznać, co to), a upraszczało to program... Albo z lenistwa :)
    >
    >>
    >> Tak się zastanawiam do czego ona mogła by być przydatna i nie bardzo
    >> potrafię wymyślić jakiś przykład generujący realną taką potrzebę.
    >

    To jest wypowiedź w kontekście mojego poprzedniego zdania - czyli piszę
    o języku C.

    > Na szybko, z numerami linii, trochę lenistwa (jak np. coś się rzeźbiło
    > ad-hoc, nie szkoda róż, gdy płonie las, jak szkoda było czasu na
    > grzeczności)
    >
    > 10 coś-tam
    > 20 gdzieś tam
    > 25 IF n=7 GOTO 50
    > 30 GOSUB 100: REM drapanie po tyłku
    > 40 GOSUB 200: REM klepanie po ramieniu
    > 50 END: REM kończymy program, można zastosować, robiło się IF n=7 THEN END
    > 100 podrap mnie: RETURN
    > 200 poklep mnie: RETURN
    >

    A Ty odpowiadasz jakbym napisał, że w BASICU nie używałem GOTO.
    Akurat w BASICU (na Commodore 64) używałem.
    P.G.

strony : [ 1 ] . 2 ... 8


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: