kamdz Napisano Październik 17, 2017 Udostępnij Napisano Październik 17, 2017 Witam, mam taki problem: mam zmienną byte zawierającą stan portów ekspandera na przykład 00001111. I chciałbym ją przekonwertować na jakąkolwiek liczbową tablicę o długości 8 {0,0,0,0,1,1,1,1}. Nie zależy mi na objętości programu, mam arduino mega 😉 Wersja z tablicą zdecydowanie ułatwi mi dalszą obróbkę danych. Ktoś wie jak to zrobić? Z góry dzięki za wszelkie pomysły 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
marek1707 Październik 17, 2017 Udostępnij Październik 17, 2017 Proszę bardzo: uint8_t n, d, t[8]; for (n=0; n<8; n++) { t[n] = d & 1; d >>= 1; } gdzie "n" to licznik bitów, "d" to 8 bitów do przekonwertowania a "t" to tablica wyników w której kolejnych komórkach masz po kolei bity z "d" począwszy od LSB. 1 Cytuj Link do komentarza Share on other sites More sharing options...
kamdz Październik 17, 2017 Autor tematu Udostępnij Październik 17, 2017 Ojej to takie proste? Nie wiedziałem 🙂 dziękuję, wieczorkiem potestuję. Cytuj Link do komentarza Share on other sites More sharing options...
marek1707 Październik 17, 2017 Udostępnij Październik 17, 2017 To teraz dla sportu napisz to samo w drugą stronę, czyli masz tablicę t[8] gdzie na LSB komórek są stany bitów, które chcesz złożyć w jedną zmienną d typu uint8_t. Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
kamdz Październik 17, 2017 Autor tematu Udostępnij Październik 17, 2017 To ten no. Spać idę 😉 Serio, to zrobiłbym to jakoś tak: uint8_t n, d, t[8]; for (n=0; n<8; n++) d << 1; { if(t[n] == 1) { d = d + 0b00000001;} } Cytuj Link do komentarza Share on other sites More sharing options...
marek1707 Październik 17, 2017 Udostępnij Październik 17, 2017 Pomijając to, że otwierający nawias klamrowy pętli powinien być linię wyżej, to zadziała 🙂 Instrukcja if nie wymaga operatorów porównania. W jej nawiasie możesz umieścić dowolne wyrażenie a dla if-a ważne jest tylko to, czy ma ono wartość zero czy jakąkolwiek inną. I albo wykonuje się część po else (dla zera) albo ta zaraz po if (dla != 0). Operatory porównania "produkują" w wyniku swojego działania zero gdy nie są spełnione i (w AVR) 16 bitów samych jedynek gdy są. Z resztą zawsze można to sprawdzić pisząc: Serial.println(a>7); dla różnych wartości zmiennej a. Co więcej, można też zrobić np. tak: x = (b>0); i to też daje sensowne (i czasem przydatne) rezultaty. W omawianym przypadku sztywne porónywanie t[n] z jedynką jest niebezpieczne o tyle, że jeśli Twój program napotka w tablicy np. wartość 3 to do wyniku wstawi na tym bicie zero a przecież 3 ma na LSB jedynkę i ogólnie nie jest zerem. Już lepiej (i bardziej przewidywalnie) jest zrobić: if (t[n] > 0) lub nawet: if (t[n]) bo wtedy każda niezerowa wartość t[n] ustawi bit wyniku. No ale w zadaniu było LSB więc chyba najlepiej będzie: if (t[n] & 1) A sprawdzając np. jakąś flagę zero-jedynkową nie trzeba pisać: if (dane gotowe != 0) lub też: if (dane_gotowe > 0) ale wystarczy: if (dane_gotowe) i część po if wykona sie gdy zmienna dane_gotowe będzie != 0. Acha, ja bym uprościł wnętrze pętli wywalając cały if: d <<= 1; d |= t[n] & 1; Całkiem nieźle Ci idzie 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
kamdz Październik 17, 2017 Autor tematu Udostępnij Październik 17, 2017 Taak ten nawias miał być wyżej 🙂 Wiem, że nie trzeba dawać w ifie tego = 1( dokopałem się w czeluściach książki 😉), ale dla mnie jest to bardziej czytelne i wolę tak robić. Ato jest funkcja dedykowana pod porty więc wystarczy 1 i 0. Jakby było tak generalnie no to by trzeba dać albo > albo ten sposób bez niczego, no ale ja wole tak. Swoją drogą to cały temat ma fajną genezę: namuzyce pani kazała zrobić instrument muzyczny, to sie spytałem czy może być elektroniczny 😉 Będę robił pianinko z 8 klawiszami (dźwięk przez buzzer) a ekspandera używam, bo w przeciwieństwie do pinów arduino ma upożadkowany rejestr stanów pinów (do niego ta funkcja) i przerwanie. Potem zrobię tablicę wartości dla poszczególnych klawiszy. W planach jest jescze dorobienie 2 tonacji (niższej i wyższej, razem będą 3) i pewnie jakaś muzyczka grana automatycznie 🙂 mam dwa tygodnie, więc nke wiem, z Czy z wszystkim się wyrobię ale właśnie dlatego zdecydowałem się użyć arduino 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
marek1707 Październik 18, 2017 Udostępnij Październik 18, 2017 W takich zabawkach najtrudniej zrobić mechanikę tak, by w ogóle dawało się grać. To co chcesz dorobić to kolejne oktawy a nie tonacje. Rozpiętość trzech oktaw to już coś, choć bardzo poważnie pomyśl o czarnych klawiszach półtonów. Bez tego to raczej "Wlazł kotek na płotek zostaje" i parę innych kawałków w czystym C-dur. O ile pamiętam, to wszystkie inne (właśnie) tonacje mają krzyżyki więc bez czarnych ani rusz. Warto coś z podstaw teorii muzyki poczytać. A w ogóle grasz na czymś? Generację tonu najłatwiej zrobić na timerze, bo podczas piszczenia musisz jednocześnie sprawdzać czy klawisz jest wciąż wciśnięty by szybko wyłączyć dźwięk. Czasy reakcji muszą być krótkie by urządzenie nie dawało wrażenia, że klawisze się zacinają. Do timera 2 jest biblioteka generacji dźwięków. Ma on jedno wyjście sprzętowe (OC2) na którymś porcie i tam musiz podłączyć bipczak. To wciąż będzie urządzenie 1-głosowe, niestety. Jak już wejdziesz w temat muzyki i Cię wciągnie, to można utonąć na długo. Moc AVRa oprogramowanego w asemblerze wystarcza do pociągnięcia namiastki analogowego syntezatora polifonicznego. Widziałem gdzieś takie konstrukcje a ścieżki dźwiękowe z tego softu były całkiem całkiem. Jak z 8-bitowej konsolki Nintendo lub ze starego Atari 🙂 Samemu też można zacząć kombinować z generatorami, prostymi filtrami i układami obwiedni (ADSR) i daje to zaskakująco fajne efekty. Robisz wtedy pradziwie "analogowe" wyjście PWM i podłączasz do aktywnych głośniczków z kompa. Niezła zabawa. BTW: Czyli pianinko robisz, taaa. A ładna ta Pani od Muzyki? BTW2: Klawisze muszą być tak duże by bez problemu mieściły się na nich palce. Może jakieś drewniane klocki na wspólnej osi a pod nimi ukryte microswitche zwane też tact-switchami? Mają mały skok, ale ich "klik" nie jest w instrumencie pożądany. Być może najprostszym rozwiązaniem będzie kilkanaście transoptorów szczelinowych do których klawisze będą wsuwać przesłony? Ciche i nie ma wyraźnych oporów mechanicznych. Albo jakaś gotowa chińszczyzna.. Cytuj Link do komentarza Share on other sites More sharing options...
kamdz Październik 18, 2017 Autor tematu Udostępnij Październik 18, 2017 A nie... To ma być takie proste, nikt nie będzie na nim grał, tylko zrobić, przynieść dostać 6 i rozłożyć 😉 Będę to robił na 8 tact switchach. To nie jest żaden ambitny projekt, dlatego robię w Arduino Grałem tylko na flecie w 1 klasie 😃 Pani średnia ale okropnie wredna 😉 Cytuj Link do komentarza Share on other sites More sharing options...
marek1707 Październik 18, 2017 Udostępnij Październik 18, 2017 No ale rzecz na której "nikt nie będzie grał" trudno nazwać instrumentem. Dobra, pokaż to cudo jak już je złożysz i zacznie dźwięki produkować. Wybierz którąś niską oktawę żeby nie raniło uszu. Najlepiej albo raz- albo dwukreślną. Dziwne, że nie podłączasz klawiszków wprost do Arduino. Programowa konwersja z wczytanego portu na numer tonu jest jednak prostsza niż podłączanie ekspandera na I2C i obsługa jego (wielokrotnych przy odbiciach styków) przerwań. Cytuj Link do komentarza Share on other sites More sharing options...
kamdz Październik 18, 2017 Autor tematu Udostępnij Październik 18, 2017 Ppproszę 🙂 dlatego lubię arduino. Taki projekt w jeden wieczór 🙂 nie wiem co to oktawa dwukreślna, ale ja dałem 3 wybierane przyciskami. I oda do radości samograjka 🙂 proszę bez skojarzeń z polityką, wybrałem to bo ma proste nuty i miło brzmi 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
marek1707 Październik 19, 2017 Udostępnij Październik 19, 2017 Ojej, żeby tylko nie rozpadło się w drodze do szkoły.. 🙂 Naprawdę fajne Arduinowe cacko, choć rzeczywiście grać się na tym nie da. Może Pani coś spróbuje, na pewno zna coś w C-dur. Miałaby dużego plusa za odwagę i ciekawość. Moim zdaniem najlepiej brzmi ta najniższa oktawa. Próbowałeś przesunąć wszystko jeszcze jedną niżej? No to co dalej? Podstawa już jest, szóstka w drodze, trzeba iść za ciosem. Nie poczułeś jakiegoś dreszczu gdy usłyszałeś swój sprzęt? Nie siedziałeś do rana komponując na pohybel sąsiadom? Nie odkryłeś nowej pasji? Latasz jeszcze tym Toto? To przecież kultowy już dzisiaj samolot na pfmrc. Wg mnie, przynajmniej na tych kilku filmikach jakie obejrzałem, Twój miał kłopoty z wyważeniem. Sprawdzałeś położenie środka ciężkości? Był za bardzo przesunięty do tyłu i to powodowało nerwowość w locie i histeryczne reakcje na ster wysokości. Udało się nim kiedykolwiek spokojnie szybować w poziomym locie ustalonym? Sprawdź gdzie wg planów powinien być CG i dodaj trochę ołowiu (kamień?) na przód. Cytuj Link do komentarza Share on other sites More sharing options...
kamdz Październik 19, 2017 Autor tematu Udostępnij Październik 19, 2017 Czemu by się miało rozpaść? Jeszcze będzie fajna obudowa 🙂 I też chyba będzie się trochę łatwiej grało bo będą stabilniejsze klawisze. 🙂 spróbuję dać oktawę niżej po szkole Poczułem dreszcz i puszczałem sobie do rana samograjke 🙂 ale nie grałem bo się klawisze telepią dzisiaj może obudowę zrobię to bendem groł 🙂 na pohybel wrednej sąsiadce z dołu 😃 A niecnoto ! 😃 sczaiłeś mojego tota? Toto rozp... Wysublimował na początku wakacji 🙂 latałem potem funbatem. Na nim nauczyłem się całkiem dobrze latać. Obglondnij filmiki z funbatem. Robie już korkociągi, beczki, a co najważniejsze poprawnie ląduję🙂 na 1/3 gazu piękne powolne majestatyczne loty. A na pełnym gazie fajne akrobacje. Bardzo mi się podoba ten samolocik, więc jeszcze jeden machnąłem 🙂 Ale to na wakacjach latałem na wsi, a teraz rok szkolny a ja w Krakowie mieszkam. Wiec nie mam za bardzo czasu ani nawet miejsca do latania. Ale mam jescze jednego funbata w stanie świeżym, nic jeszcze nie zamontowane, to może go wykończę w ferie i jeszcze polatam 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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!