Skocz do zawartości

jbanaszczyk

Użytkownicy
  • Zawartość

    34
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    4

jbanaszczyk zajął 1. miejsce w rankingu.
Data osiągnięcia: 29 lipca.

Treści użytkownika jbanaszczyk zdobyły tego dnia najwięcej polubień!

Informacje

  • Płeć
    Mężczyzna
  • Lokalizacja
    Default City, PL
  • Zawód
    Software Engineer

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

jbanaszczyk's Achievements

3/10

3/10 (3/10)

15

Reputacja

  1. Tak, gdzieś trzeba było postawić granicę uproszczenia. W drugim poście trochę to uszczegółowiłem, bardziej poprawnie
  2. Każdy był kiedyś przedszkolakiem W ogóle to łączenie przerwań z obiektami w C++ jest dość trudne i ryzykowne. Klasy i całe to programowanie mają za zadanie wprowadzenie pewnej reużywalności kodu, ale co to za reużywalność, jak przerwanie jest jedno? No chyba, że encoderów masz mieć wiele, to wtedy reużywalność ma sens. Problem jest tu: procedura w C++ powinna działać na rzecz konkretnego obiektu, żeby konkretnemu obiektowi zmieniać "cnt", powinna działać w pewnym kontekście. A procedura obsługi przerwania jest blisko sprzętu, żeby być szybka to powinna być prymitywna do bólu, i o żadnym ce-plus-plusowym kontekście słyszeć nie chce, a próby dostarczenia jej tego kontekstu powodują ból głowy. Ze dwa razy wpuściłem się w "klasy i przerwania", bo mogę i ładnie by było mieć, powstały bardzo rozbudowane twory, nawet działały, ale ... to nie było to, końcowy efekt nie powalał na kolana. Szkoda wysiłku. Dla porządku - wywal te procedury do oddzielnego pliku, zostaw je po staremu, w dobrze napisanym C. Oszczędzisz sobie "rzeźbienia" i stressu
  3. Metoda na przykład Encoder::ISR_encoder_A nie przynależy do klasy, a do konkretnego obiektu, który jest instancją tej klasy. Każdy obiekt ma swoją metodę. Ona gdzieś tam w końcu uruchamia kod, który jest tu napisany, ale, jeśli metoda jest przeciążona albo wirtualna, to ten kod może być inny. Z syntaktycznego punktu widzenia: w tej linii PCattachInterrupt<_encoder_pin_A>(Encoder::ISR_encoder_A, CHANGE); Odwołujesz się do "metody klasy", a taki byt nie istnieje. Nie istnieje (w tym wypadku) też żaden obiekt, który by był tej klasy. Masz dwa wyjścia: albo mieć obiekt typu Encoder, który to obiekt będzie mieć metodę ISR_encoder_A, i dla tego konkretnego obiektu wydobędziesz adres jego metody, i ten adres przekażesz do PCattachInterrupt. taka zmienna powinna być gdzieś powołana do życia, albo podobnie jak jak zmienne proste Encoder encoder; // podobnie jak int value; albo przez new() Encoder *encoder = new Encoder{constructor_parameters}; // BTW: kiedyś się pisało tak Encoder *encoder = new Encoder(constructor_parameters); I wtedy z takiego obiektu wydobywasz adres popatrz na kod na przykład pierwszy z brzegu: post numer #9 w https://forum.arduino.cc/t/use-attachinterrupt-with-a-class-method-function/301108/8 albo powiesz, że istnieje jedna, konkretna metoda klasowa (nie obiektowa), a ona istnieje bez potrzeby mania obiektu, i wtedy to się nazywa metoda statyczna, i trzeba jej dać przedrostek "static". Kompilator mówi, że on by właśnie chciał taką statyczną metodę. Ten zapis z operatorem czterokropek to właśnie jest referencja do metody właściwej dla klasy, a nie dla obiektu. Ma to niedogodności wielkie: metoda nic nie wie o obiektach, więc nie ma dostępu do atrybutów, nawet nie ma jak cnt zmienić. Można oczywiście mieć też atrybuty statyczne (też z przedrostkiem "static"), i wtedy są to atrybuty wspólne dla całej klasy. I wszystko co się do nich odnosi musi być statyczne... I wtedy tan kod nie przypomina już nawet C++ BTW. Kod ze wspominanego przykładu jest daleki od poprawności, ale ma szanse zadziałać. Ten wygląda lepiej: https://community.particle.io/t/cpp-attachinterrupt-to-class-function-help-solved/5147/2 W tym przykładzie, bardzo sensownym - attachInterrupt jest użyte w konstruktorze obiektu. Konkretnego obiektu. Ten konkretny obiekt wie, gdzie leży w pamięci, w szczególności wie, gdzie jest jego metoda do obsługi przerwań, potrafi wskazać jej adres i potrafi ją podwiesić pod przerwanie. Czyli tworzymy obiekt i temu obiektowi mówimy: weź się konkretny obiekcie podłącz pod przerwanie (którego numer przekazujemy jako parametr do konstruktora) ---- A. I użycie podkreślenia na początku identyfikatora jest w C++ zarezerwowane dla twórców języka, żeby nie było konfliktu nazw (oni używają wyłącznie podkreślenia na początku, my nie używamy nigdy, nie wejdziemy sobie w drogę) ---- A. A te ify Ci się kompilują? "if ( digitalRead( ... " bo tam jest średnik na końcu i "else" chyba w powietrzu wisi. ---- A. I atrybut "_enc_cnt", który jest modyfikowany w przerwaniu wypadałoby opatrzyć przedrostkiem "volatile". Żeby się kompilator nie rozpędzał z optymalizacją ---- A. I większość rzeczy w klasie raczej może być prywatna. Konstruktor i get_cnt - publiczne, begin zniknie, reszta private
  4. Ja się nie znam, ale na moje oko LED w transoptorze jest odwrotnie Już było, ale podłączenie PE między kondensatorami? To chyba z serii "co Cię nie zabije, to Cię wzmocni"
  5. Jak ma oznaczenie albo D101 czy D207, i wygląda, że ma oznaczoną polaryzację, i ma dwie nóżki to jednak z dużą pewnością będzie dioda. A ta BD1, taka pulchniutka, to jest szansa (ale nie na pewno) mogłaby być Schottky Barier Diode. Ale to tylko gdybanie. Jak wylutujesz, to pewnie jakiś symbol tam jest. Wrzucasz w googla, dopisujesz "diode", dopisujesz "datasheet" i będzie @tommo1982 przy braku doświadczenia grzebanie w zasilaczu 230V grozi śmiercią. Poważnie. To samo pisał @H1M4W4R1 Szansa, że naprawisz jest sporo mniejsza niż że sobie krzywdę zrobisz
  6. @Krawi92 Temat konfiguracji sieci, jeśli niewiele o tym wiesz - na razie sobie odpuść. Jest dużo sposobów, żeby przy okazji, przez błąd lub niedopatrzenie razem z Twoim kolegą wpuścić do swojej sieci domowej cały internet i wszystkie czarne charaktery. Prawdopodobnie nie chcesz jej w ogóle rekonfigurować, prawdopodobnie tak jak jest jest w miarę dobrze i bezpiecznie. Wspomniany przez @ethanak Blynk - jest jednym z kilku działających i bezpiecznych rozwiązań na taką okoliczność. Działa to tak, że gdzieś tam w internetach uruchamiasz zaufanego agenta, z którym rozmawia Twój projekt i z którym może porozmawiać Twój kolega albo Ty z pracy. Diodę zapalić, pokazać czy się świeci itp. Niestety ktoś musi na to wyłożyć zasoby - kawałek komputera, trochę transferu danych, jakieś inwestycje w tworzenie oprogramowania. Czyli niestety nie jest za darmo. Działające, bezpieczne, darmowe - wybierz dwa. Zarówno w przypadku modyfikacji sieci domowej (działające i darmowe), jak i Blynka
  7. Ten mi kiedyś spodobał się: https://github.com/maakbaas/esp8266-iot-framework O ile pamiętam, to jest trochę roboty, żeby go odpalić, chyba wymaga npm-a, pod PaltformIO działał poprawnie
  8. A może byście człowiekowi wytłumaczyli rozumiejąc o co pyta? Z pierwszego pytania wnioskuję, że @Superuser1234 przypuszcza, że instrukcja if działa tak, że jak warunek nie nie jest spełniony, to program czeka, aż się spełni To tak nie działa. Jak warunek nie jest spełniony, to program po prostu nie wchodzi do tej klamerki po if. Oczywiście nic straconego, to co masz wewnątrz dużej metody loop() jest powtarzane wielokrotnie - dojdzie do końca, procesor na chwilę zajmie się swoimi sprawami i tego loop() uruchomi ponownie, i do tego if kiedyś, szybko, ponownie dojdzie I druga sprawa: && oznacza "and", po naszemu "i". Warunek, że ( coś == 7 && coś == 11 ) oznacza, że oczekujemy jedna zmienna będzie mieć jednocześnie wartość 7 i 11
  9. jbanaszczyk

    Klawiatury mechaniczne

    Dzięki. wiem, że pytanie podobne do "jak pachną fiołki", ale odpowiedź przyda się
  10. jbanaszczyk

    Klawiatury mechaniczne

    Też czekam na Legendy Jakie są te MK Legend Glow w dotyku? Chodzi mi o profil. Nie są za bardzo sferyczne, a za mało walcowate?
  11. Ten projekt ma dziesiątki wad, zresztą był wałkowany na elektrodzie. Na początek - pokazuje "jaka ta elektronika jest niesamowicie skomplikowana", co oczywiście nie jest prawdą. Na zakończenie: produkt jest absolutnie nie testowalny. Nie da się zrobić nawet analizy jakości i poprawności algorytmów
  12. jbanaszczyk

    Klawiatury mechaniczne

    Pewnie załatwiłoby sprawę PERMISSIVE_HOLD (albo TAPPING_TERM). Dzięki za odpowiedź. Zawsze to jakiś świeży punkt widzenia
  13. jbanaszczyk

    Klawiatury mechaniczne

    Który fragment Ci się nie podoba? ProMicro czy QMK? I dlaczemu?
  14. Z takim układem jest jeden wielki problem - nie wiadomo jak to skalibrować i przetestować, trudno też przewidzieć (jak wspomniano) jakie zjawiska dają fałszywe odczyty. Coś tam mierzy. Jest komercyjna kość, wg opisu algorytmu analizuje cechy wyłapanych zakłóceń i nie reaguje na "zwykłe" iskrzenie, fabryczna kalibracja może być wystarczająca do domowych pogodynek. AS3935 Cena modułu: $20-$40 Tu jest dość szczegółowy opis Jeszcze gdzieś widziałem symulator piorunów, tego samego producenta, cena była zaporowa, jakieś 700-800PLN (nie pamiętam). I jeszcze takie coś wygrzebałem, https://www.playingwithfusion.com/productview.php?pdid=55 , do testowania może być w sam raz
  15. jbanaszczyk

    WiFiGeiger

    To tak samo u mnie. Koszt certyfikacji by przekroczył koszt nowego "fabrycznego" urządzenia. Thx
×
×
  • 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.