Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 15 kwi 2026, o 11:09


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 19 ] 
Autor Wiadomość
PostNapisane: 7 sty 2016, o 15:50 
Offline
Nowy

Dołączył(a): 07 sty 2016
Posty: 13
Pomógł: 0

Witam serdecznie wszystkich. Na początek podam, że pytanie dotyczy ArduinoUno i współpracy z nim wyświetlacza z układem TM1638. znalazłem w internecie stronę
https://skyduino.wordpress.com/2012/07/ ... s-boutons/
na której jest zamieszczony działający u mnie kod który powoduje liczenie przez wyświetlacz w taki sposób jak to jest na filmiku. Mój wyświetlacz jest nieco inny, ale jak ktoś zerknie na ALLEGRO to są tam takie do kupienia za 25,-. Diody świecące są jednego koloru czerwonego, i nie ma złączy przelotowych do kolejnych modułów, wyświetlaczy 7-seg. LED, diod LED i "włączników" jest po osiem sztuk. Chciał bym rozwinąć możliwości zastosowania tego wyświetlacza do innych ambitniejszych celów niż oglądanie zmieniających się cyferek, oczywiście za pomocą zmiany w oprogramowaniu sterującym, chociaż na początek zadowolił bym się wygaszeniem zer nieznaczących, to chętnie bym chciał podłączyć inne elementy z oferty Ardiuno i nie tylko. Proszę o każdą przydatną pomoc jak to osiągnąć,Z góry dziękuję za ciekawe propozycje. Na tym etapie zaczynam z programowaniem i nigdy się tym nie zajmowałem, no może poza ustawianiem programów w TV.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2016, o 16:56 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Na wyświetlaczu wyświetlasz układ zapalanych segmentów zdefiniowanych w:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Niestety nie ma tutaj zdefiniowanego pustego znaku, więc musisz dodać na koniec:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


I w funkcji loop() jak chcesz mieć pusty pusty znak,to wysyłasz znak z pozycji SPACE, czyli 16.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Gdy wyświetlasz liczbę i chcesz nie mieć poprzedzających zer, to czy ma być pusty znak to sprawdzasz odpowiednimi warunkami (porównanie czy counter > 10, >100 ... itd).

--
Pozdrawiam,
Robert


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2016, o 19:46 
Offline
Nowy

Dołączył(a): 07 sty 2016
Posty: 13
Pomógł: 0

Coś nie działa

:46: error: expected `}' before numeric constant
:46: error: expected ‘,’ or ‘;’ before numeric constant
:47: error: expected declaration before ‘}’ token



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2016, o 19:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

A dodałeś przecinek w bajcie dla znaku F?

--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2016, o 19:50 
Offline
Nowy

Dołączył(a): 07 sty 2016
Posty: 13
Pomógł: 0

acha, zmieniłem te przecinki w tabeli, ale coś jeszcze

.ino: In function ‘void loop()’:
:211: error: ‘POSITION’ was not declared in this scope

te polecenie dodałem tak pod:

}

/* loop() */
void loop() {
TM1638_set_digit(POSITION, numericTable[16]);


może w złym miejscu?

Gdy tą linię wytnę to kompiluje,
Załadowałem, i nic, ale jednak coś w tym jest, bo gdy załaduję zmienioną tabelę ze samymi zerami na pozycji pierwszej u góry odpowiadającej za zero to po załadowaniu nie ma zer wcale, nawet tam gdzie powinny być trochę nie rozumię co zrobić z tymi " counter > 10, >100 ... itd). ", tu na forum niczego mi takiego nie znalazło poza tym co pewnie nie odnosi się do TM1638. czyli:
if(d1) cy1=d1; else cy1=NIC;
d2=(licznik-(d1*1000))/100;



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 sty 2016, o 22:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

W programie w funkcji loop() masz kod wypisujący znaki na kolejnych pozycjach:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Chodzi o podmianę danej linii, a dokładniej to danie warunku by albo wyświetlała się liczba albo pusty znak.
Ja napisałem
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
i zamiast wartości pozycji (pierwszy argument) to wpisałem słowo POSITION, bo nie wiem na której chcesz testować.
Musisz to odpowiednio zmodyfikować.

--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 sty 2016, o 16:25 
Offline
Nowy

Dołączył(a): 07 sty 2016
Posty: 13
Pomógł: 0

zrobiłem tak, ale to trwale wygasza wszystkie wskaźniki poza pierwszym ( po prawej - od jednostek).

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 sty 2016, o 18:16 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Dostajesz wędkę a nie rybę. Musisz to wykorzystać i trochę sam pokombinować.
Teraz zrobiłeś tak że najpierw wyświetlasz liczbę a potem na tej samej pozycji wyświetlasz pusty znak
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Pomyśl jak to powinno działać. Masz wcześniej podawane sugestie:
Cytuj:
Gdy wyświetlasz liczbę i chcesz nie mieć poprzedzających zer, to czy ma być pusty znak to sprawdzasz odpowiednimi warunkami (porównanie czy counter > 10, >100 ... itd).

Czyli powinno być na przykład tak dla dziesiątek: "jeżeli counter > 10 to wyświetl znak (counter / 10) % 10 a w przeciwnym wypadku wyświetl znak pusty".

--
Pozdrawiam,
Robert


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2016, o 19:44 
Offline
Nowy

Dołączył(a): 07 sty 2016
Posty: 13
Pomógł: 0

Puki co to jestem z "wędką na rybach", ale mam takie pytanie. czy jest jakiś automatyczny tłumacz komunikatów o błędach które się pojawiają w oknie "TERMINAL"



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2016, o 20:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Cytuj:
czy jest jakiś automatyczny tłumacz komunikatów o błędach które się pojawiają w oknie "TERMINAL"
Google :)

Mam nadzieję, że już poradziłeś sobie już z wygaszeniem poprzedzających zer.

--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2016, o 20:58 
Offline
Nowy

Dołączył(a): 07 sty 2016
Posty: 13
Pomógł: 0

Niestety nie, wyprodukowałem taką linię w zastępstwie za odpowiednią w kodzie, ale coś nie kompiluje a nie mogę dojść co te błędy oznaczają.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Google wyrzuca tyle linków, że nie wiadomo który ma rację i takie szukanie za długo trwa, każdego spradzam, i nic z tego nie wychodzi.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 sty 2016, o 22:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

TM1638_set_digit(POSITION, VALUE) jest funkcją wyświetlającą na pozycji POSITION znaku o wartości VALUE. Pozycja POSITION jest w każdej linii jest inna i wpisana ręcznie. Do określenia wartości znaku VALUE korzystasz z tablicy znaków numericTable[], wpisując odpowiedni wartości w indexie tablicy. W tablicy cyfra 0 jest na pozycji 0, cyfra 1 na pozycji 1, itd. A spacja dodana przez nas na pozycji 16.
Wartość cyfry do wyświetlenia, czyli przy okazji index tablicy (bo od 0 do 9 są one przecież zgodne) obliczasz ze zmiennej counter, dzieląc ją przez odpowiednią liczbę, zależną od pozycji.
Czyli wartość counter określa jaki ma być wyświetlany znak. I właśnie zmiennej counter masz użyć w warunku sprawdzającym czy ma być wyświetlany znak (po staremu) czy wyświetlany znak spacji.

Proponuję abyś zainteresował się książką Mirka "MIKROKONTROLERY AVR JĘZYK C - PODSTAWY PROGRAMOWANIA" (https://sklep.atnel.pl/pl/p/Mikrokontrolery-AVR-Jezyk-C-podstawy-programowania-PL-Ksiazka-DVD/75). Po jej przeczytaniu (kilku pierwszych rozdziałów) przeróbka kodu zajęłaby ci max. 3 minuty. A umiejętność programowanie avr-ów w C na pewno się przyda :).

Jak nie masz książki Mirka, to o instrukcji if możesz poczytać w internecie, np. https://pl.wikibooks.org/wiki/C/Instrukcje_steruj%C4%85ce.

--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sty 2016, o 14:21 
Offline
Nowy

Dołączył(a): 07 sty 2016
Posty: 13
Pomógł: 0

Witaj, sprawa wygląd tak, że dogadałem się z kolesiem, u którego jest taka książka, ale, że nie może jej mi pożyczyć, to umówilem się, że przyniesie mi ją jutro do wglądu, podaj więc proszę, na których stronach jest opis rozwiązania problemu tego wyświetlacza, to zobaczę o co tam chodzi bez zbędnego szukania po całej książce. Ta książka nie jest jego, i dlatego takie z nim ceregiele, z tym, że z tego co wiem nikt z niej się nie uczył o arduino, czy to możliwe? Mam nadzieję, że mnie nie wkręcasz w inne środowisko, już mam zainstalowane Arduino_IDE i nie chcę się zajmować dodatkowo innym oprogramowaniem. Możesz mi podpowiedzieć, a widzę, że nie możesz to na razie tyle.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sty 2016, o 23:21 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Cytuj:
Ta książka nie jest jego, i dlatego takie z nim ceregiele, z tym, że z tego co wiem nikt z niej się nie uczył o arduino, czy to możliwe?

Powiem tak. Nigdy nie miałem doczynienia z programowaniem w Arduino. Ale ty modyfikujesz bibliotekę wykorzystywaną przez Arduino a nie programujesz w Arduino - biblioteki dla arduino pisane są w C++ a samo arduino to takie "wykastrowane" C by łatwo było w tym pisać.
Kod do obsługi wyświetlacza z podawanej przez Ciebie strony jest napisany w typowym C dla AVRów. Więc jak potrzebujesz go zmodyfikować, to musisz wiedzieć jak modyfikować kod w C. Dlatego musisz poczytać o C a nie arduino.
Modyfikacja, którą chcesz zrobić (wygaszanie nieznaczących zer) wymaga od Ciebie znajomości warunku if / else (bo tablicę o znak spacji już zwiększyłeś). Jest on opisany w Mirka książce w rozdziale 4.2.1, zaczynającym się na stronie 60.

Wrzuciłem do googla zapytanie i w arduino masz identyczną składnię if / else jak w C:
https://www.arduino.cc/en/Reference/If
https://www.arduino.cc/en/Reference/Else

--
Pozdrawiam,
Robert



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 sty 2016, o 15:41 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 wrz 2014
Posty: 1530
Lokalizacja: Warszawa
Pomógł: 55

Obejrzyj cykl poradników Mirka o wyświetlaczach OLED - doskonale tłumaczy jak ogarnąć konwersję z arduino do C.

_________________
--... ...-- - --- -- . -.-



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 sty 2016, o 16:47 
Offline
Nowy

Dołączył(a): 07 sty 2016
Posty: 13
Pomógł: 0

Już to zrobiłem, a raczej dopiero. Wystarczyło zrozumieć, że argument może stać się warunkiem, i, że to dokładnie te nieszczęsne (counter > 10) bo polecenia do wykonania już miałem w tym momencie gdy napisałeś "tak że najpierw wyświetlasz liczbę a potem na tej samej pozycji wyświetlasz pusty znak" tylko, że wkomponowanie instrukcji if było troszeczkę kłopotliwe. Książka bardzo mi pomogła i to niemal, że odrazu. Teraz wynalazłem sobie inne wyzwanie: sprawić by wynik pojawiał się po lewej części wyświetlacza zostawiając prawą stronę wygaszoną tak jak na filmie u dołu strony.
http://www.play-zone.ch/en/tm1638-8-zei ... gment.html



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 sty 2016, o 22:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Cytuj:
Teraz wynalazłem sobie inne wyzwanie: sprawić by wynik pojawiał się po lewej części wyświetlacza zostawiając prawą stronę wygaszoną tak jak na filmie u dołu strony

Do tej pory korzystałeś z wyświetlania znaków wpisując poprzez funkcję TM1638_set_digit() znaki dla kolejnej pozycji jako kolejne cyfry zmiennej counter. Każdy znak to inne polecenie (inna linia kodu) wyświetlenia znaku. Możesz w prosty sposób to zmienić i mieć na pierwszych 4 znakach wpisywaną wartość z jednej zmiennej a na kolejnych z innej.

--
Pozdrawiam,
Robert

------------------------ [ Dodano po: 4 minutach ]

Choć może na początek wypisz na wyświetlaczu po lewej stronie na stałe tekst ABC :) Jest to o wiele prostsze a już będziesz miał poznane kolejne elementy potrzebne do tego co chcesz zrobić.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 sty 2016, o 08:08 
Offline
Nowy

Dołączył(a): 07 sty 2016
Posty: 13
Pomógł: 0

Tylko, że nie mogę jakoś załapać jakie zmienne w tym przypadku stosować. odnalazłem kod ze strony na której jest ten filmik, i jak się okazało jest on tak napisany, że załadowanie jego nie jest możliwe, w dodatku, to mam wrażenie, że brakuje w nim ustawienia pinów na samym początku. Wydaje mi się jeszcze, że to nie ruszy samo z siebie jak ten przerobiony licznik, bo na filmie nie widać jak to zostało połączone i jest możliwe, że wyświetlacze są wysterowane z zewnątrznego licznika sprzętowego, albo reagują na impulsy sterujące z kierownicy. tak czy siak podglądanie tego kodu nic mi nie mówi. Są tam jeszcze inne kody w trzech plikach z rozszerzeniami .pde, oraz w głównym katalogu z rozszerzeniami .cpp .h czy kody o takim zapisie są możliwe do wczytania do środowiska ArduinoIDE i załadowania na płytkę Arduino do mikroprocesora tak jak przerobiony właśnie licznik?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 sty 2016, o 14:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Jesteś w stanie sam to zrobić. Zmienną deklarujesz tak samo jak zmienną counter (tylko możesz mniejszej wielkości, bo i tak nie będziesz potrzebował przechowywać tak dużą liczbę jak w przykładowym counterze).
Lecz proponuję byś zrobił najpierw wyświetlanie stałego tekstu na wyświetlaczy np. ABC (jak proponowałem wcześniej). Potem zamiana na zmienną będzie już dla Ciebie banalna. Sposób implementacji zmiennej zależy co z nią będziesz jeszcze robił oprócz wyświetlania jej wartości na wyświetlaczu. Bo przecież trzeba ją jakoś zwiększać lub zmniejszać.

--
Pozdrawiam,
Robert

------------------------ [ Dodano po: 1 minucie ]

W pętli loop(), bo ona jest twoim głównym programem masz jeszcze używane takie funkcje jak TM1638_get_button() i TM1638_set_led(), które służą do czytania stanu klawiszy oraz zaświecania diod led.
Może przerób program tak by na początek pierwszy klawisz zwiększał Ci pierwszą liczbę a drugi zmniejszał ją. Trzeci i czwarty robił to samo dla kolejnej liczby a piąty i szósty zwiększał / zmniejszał liczbę wyświetlanych diod led na linijce ledowej. Ostatni użyj do zerowania wyświetlania liczb :)
Potem tylko podepniesz to do jakiegoś innego źródła sygnałów sterujących i masz sam zrobiony taki projekt :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 19 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO