Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ARDUINO CCP - Zamiana na funkcję

elekt12345 21 Wrz 2016 14:15 750 13
  • #1 21 Wrz 2016 14:15
    elekt12345
    Poziom 12  

    Witam,

    mam taki kod który jeśli dostanie zmienną i będzie ona o wartości PYIntx = 1 to zamiani ją na zmienną wyjściową PYInt = 5, z PYIntx = 100 analogicznie tylko, że na PYInt = 255 natomiast eśli wrtość wejściowa PYIntx będzie z przedziału 2-99 to pomnoży ją razy 2,55 wynik podzieli przez 10 i zaokrągli i pomnoży razy 10, to działa ale chciałbym umieścić ją jako funkcję i kożystać z niej tak:

    int PYInt = getval(PYIntx);

    no i już nie mam poęcia jak to zrobić na Arduino.
    Jeśli ktoś pomoże będę wdzięczny.


    Kod: c
    Zaloguj się, aby zobaczyć kod
    [/code]

    0 13
  • #2 21 Wrz 2016 14:41
    JacekCz
    Poziom 35  

    A przepraszam, ten "kod który masz" to z kosmosu spadł? Kto jest jego autorem?

    Pytasz "jak to zrobić w arduino???"
    A zrobić to trzeba tak samo, jak w każdym innym środowisku. Struktura syntaktyczna języka się nie zmieniła (o ile widziałeś choć jedną kartkę podręcznika dowolnego języka)

    0
  • #3 21 Wrz 2016 18:33
    elekt12345
    Poziom 12  

    No właśnie nie widziałem a autorem tego jestem ja chodzi o to, że gdy ten kod jest w void loop() i umieszczę pod nim odczyt wartości zmiennej np. Serial.print(PYInt); to zawsze jest pusta więc pomyślałem, że przez funkcję będzie mógł ładnie przypisać wartość.
    Jeśli chodzi o funkcje i przekazywanie zmiennych to jestem z tym mocno na bakier dlatego prosze o pomoc.

    Aha trzeci warunek pewnie można też tak zapisać:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Dodano po 3 [godziny] 38 [minuty]:

    Jak dla mnie ciekawe pytanie bo odpowiedzi nie znam i nie mogę poznać,
    jak jest linijka kodu:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    gdzie:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    to PYInt jest ładnie zwracane więc dlaczego nie jest jeśli są if-y takie w pierwszym przykładzie ?

    0
  • #4 21 Wrz 2016 19:06
    Rezystoreczek
    Poziom 20  

    ten fragment kodu jest bez sensu bo zakres zmiennych jest za mały (musisz wcześniej zadeklarować tego int'a) :!:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    ja bym to zapisał tak:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    wiesz o co chodzi czy trzeba jeszcze wytłumaczyć:?:

    0
  • #5 21 Wrz 2016 19:36
    JacekCz
    Poziom 35  

    Rezystoreczek napisał:
    ten fragment kodu jest bez sensu bo zakres zmiennych jest za mały (musisz wcześniej zadeklarować tego int'a) :!:
    ...
    wiesz o co chodzi czy trzeba jeszcze wytłumaczyć:?:


    1. Nie ma mowy o błędach kompilacji, to pewnie gdzieś deklaracja jest (ewentualnie kolega ma gdzieś złośliwości rzucane przez kompilator). Tyle tylko że kopiując coś bez sensu - zasłonił deklaracje.
    2. Sądzę że nie - jak pisze nie widział ani kartki podręcznika. Jakby trafił na kartkę 'blok' albo 'zakres deklaracji' to by mu świtało.

    Sposób obliczenia i zaokrąglania tez nie świadczy o rozumieniu jak ma się to liczyć, raczej o próbie stawiania nóg na polu minowym. Ja nie znam celu algorytmu, więc nie poprawię. To wygląda "wiem że mam z liczbami problem i będę strzelał".

    @Rezystoreczek moim zdaniem dawanie ryby jak ktoś ma niestrawność, nie jest dobre, a z wędką by powalczył się trochę i potem lepiej smakowało.

    0
  • #6 21 Wrz 2016 19:40
    Rezystoreczek
    Poziom 20  

    JacekCz napisał:
    Tyle tylko że kopiując coś bez sensu - zasłonił deklaracje.

    akurat nie sądzę, bo on pewnie w tych { } sam podopisywał te int'y by mu się kompilowało...
    Dobrym zwyczajem jest deklarowanie zmiennych tak jak w czystym C, na początku funkcji :!:


    ... co do offtopu o rybach - no cóż, ja jako dość młoda osoba uczę się też raczej z gotowców niż z książek, ale każdy ma swoje podejście :)

    0
  • #7 21 Wrz 2016 19:49
    JacekCz
    Poziom 35  

    Rezystoreczek napisał:

    Dobrym zwyczajem jest deklarowanie zmiennych tak jak w czystym C, na początku funkcji :!:


    ... co do offtopu o rybach - no cóż, ja jako dość młoda osoba uczę się też raczej z gotowców niż z książek, ale każdy ma swoje podejście :)


    Konsumpcja ryby nie dotyczyła Ciebie.
    1. w długiej / złożonej funkcji głosuję za na blok, ale to nie ten poziom dyskusji. Mówisz OK.
    2. Wiesz, jak się uczysz z gotowców to jest OK, każdy to robi po swojemu, jakbyś jedynie wykonywał algorytm Coppiego & Pejsta to bym na Tobie pojeździł


    Raz na sezon książka ma sens - potem uzupełniając z internetu. Bariera wydania książki jest na tyle wysoka, że jakas ludzka staranność i zamysł zwykle tam jest. Zwykle daje lepszy pogląd ogólny (panoramiczny). Oczywiste szybka zmiany wersji, nowości to net, na to nie ma innej rady. A w internecie może jak Stanisław Lem zauważył, publikować każdy, tzreba świadomie korzystać.

    PS a na awatarze z rezystorem to jest coś dowcipnego? Nie jest to czytelna czcionka.

    0
  • #8 21 Wrz 2016 20:09
    elekt12345
    Poziom 12  

    Dzięki za pomoc ale zrobiłem tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    i działa :)

    0
  • #9 21 Wrz 2016 20:18
    JacekCz
    Poziom 35  

    elekt12345 napisał:
    Dzięki za pomoc ale zrobiłem tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    i działa :)


    Działa, ale jestem pewien że przypadkowo, to jest głeboki problem C, wiele rzeczy jest "nieokreślonym zachowaniem" *) Tutaj użyłeś ambitniejszej konstrukcji C "postaw wartość i użyj tej wartości". Jest ona w pełni w porządku formalnie, ale zupełnie nie w duchu tego projektu (co więcej, jest dowodem że się nie rozumie, i myli to innych czytających kod. Tylko kompilator to traktuje poważnie)

    A co do wielości returnów, przeczytaj dobrze ostrzeżenia kompilatora, bo na pewno są wśród nich poważne.

    *) "podstaw i użyj" nie jest samo w sobie nieokreslonym zachowaniem UB, ale to w tym obszarze ryzyka.

    0
  • #10 21 Wrz 2016 20:31
    Rezystoreczek
    Poziom 20  

    W tym co dałeś te przypisanie do zmiennej jest niepotrzebne :!:

    starczy samo < cośtam > return 0; < cośtam > return 5; < cośtam > return round(costam);
    itp. itd. czyli bez znaku =

    0
  • #11 21 Wrz 2016 20:34
    elekt12345
    Poziom 12  

    Trochę metodą prób i błędów ale błędów podczas kompilacji nie było żadnych.

    0
  • #12 21 Wrz 2016 20:36
    Rezystoreczek
    Poziom 20  

    elekt12345 napisał:
    Trochę metodą prób i błędów ale błędów podczas kompilacji nie było żadnych.


    ... wstaw se na początku kodu while(1) { } i też błędów kompilacji nie będzie żadnych... :)

    0
  • #13 21 Wrz 2016 20:38
    elekt12345
    Poziom 12  

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Dodano po 1 [minuty]:

    Rezystoreczek napisał:
    elekt12345 napisał:
    Trochę metodą prób i błędów ale błędów podczas kompilacji nie było żadnych.


    ... wstaw se na początku kodu while(1) { } i też błędów kompilacji nie będzie żadnych... :)


    Błędów ani ostrzeżeń.

    Ok więc jest to sposób kiepski to jaki jest najlepszy który będzie miał takie działanie jak ten ?

    0
  • #14 21 Wrz 2016 20:49
    JacekCz
    Poziom 35  

    jest możliwość return'u z nieokreśloną wartością. Powinien być warning ale można wyłączyć (lub nie przeczytać)
    "not all path return value" czy inaczej

    elekt12345 napisał:

    Ok więc jest to sposób kiepski to jaki jest najlepszy


    Przeczytać coś przed robotą?
    Ten nóż ma ostrza ze wszystkich stron.

    0