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



Teraz jest 19 kwi 2024, o 08:22


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 14 ] 
Autor Wiadomość
PostNapisane: 20 lip 2012, o 22:00 
Offline
Użytkownik

Dołączył(a): 31 gru 2011
Posty: 34
Pomógł: 0

Witam, próbuje w w jak najprostszy sposób napisać kod na atmege8, który będzie docelowo siedziała w arduino. Program ma ten za pomocą pilota IR powodować włączanie oraz wyłączenie komputera. Włączanie komputera odbywa się za pomocą zmostkowania 2 pinów przez 1s, wyłączenie zaś przez 4s. Naskrobałem tyle kodu, ale stanąłem na etapie funkcji włączających i wyłączających komputer.

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


Kod może też poprawiony na C++, aby odrazu wgrać je do arduino. Proszę o pomoc, Bartek.

PS Obsługa lcd tylko testowo, aby wyłapać odpowiednie kody przycisków pilota.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lip 2012, o 22:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

Dziś już trochę późno na duino , ale jutro ci zapodam .pde , kilka linijek :)

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lip 2012, o 22:10 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

Po pierwsze twój kod nie ma nic wspólnego z C++ i Arduino więc nie uruchomisz tego w środowisku Arduino za żadne skarby.

Po drugie możesz za to spokojnie odpalić na każdym procku ATmega. Tylko skąd ty sobie wymyśliłeś że sprawdzanie kodu klawisza to np:

Kod:
if( !address == 13)


toż to jakieś totalnie nieporozumienie. Masz książkę, masz tam żywe przykłady a ty wymyślasz coś w ogóle z kosmosu co nie ma prawa nigdy zadziałać :(

address ???? toż to na stałe w pilocie RC5 od TV zawsze ma wartość = 0 - więc co ci przyszło do głowy sprawdzać czy ma wartość =13 ale do tego jeszcze jakaś negacja ! ......

eeeeeh zajrzyj proszę do pierwszego lepszego przykładu z książki albo DVD i napisz to od nowa bo wygląda jakbyś pisał coś z pamięci czego nie widziałeś już z 5 lat

command przechowuje klawisze, ale doczytaj sobie proszę o operatorach logicznych i co oznacza ! przed nazwą zmiennej w warunki IF i kiedy się go stosuje - toż to także masz w książce.

u ciebie powinno być (podpowiem)

Kod:
if( command == 13 )


.... ale dalej to już sam zajrzyj do źródeł i zaproponuj poprawną wersję

------------------------ [ Dodano po: kilkunastu sekundach ]

O! a jak chcesz w Arduino konkretnie - to Sun ci poda przykłady z kolei ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lip 2012, o 22:15 
Offline
Użytkownik

Dołączył(a): 31 gru 2011
Posty: 34
Pomógł: 0

mirekk36 napisał(a):
Po pierwsze twój kod nie ma nic wspólnego z C++ i Arduino więc nie uruchomisz tego w środowisku Arduino za żadne skarby.

Po drugie możesz za to spokojnie odpalić na każdym procku ATmega. Tylko skąd ty sobie wymyśliłeś że sprawdzanie kodu klawisza to np:

Kod:
if( !address == 13)


toż to jakieś totalnie nieporozumienie. Masz książkę, masz tam żywe przykłady a ty wymyślasz coś w ogóle z kosmosu co nie ma prawa nigdy zadziałać :(

address ???? toż to na stałe w pilocie RC5 od TV zawsze ma wartość = 0 - więc co ci przyszło do głowy sprawdzać czy ma wartość =13 ale do tego jeszcze jakaś negacja ! ......

eeeeeh zajrzyj proszę do pierwszego lepszego przykładu z książki albo DVD i napisz to od nowa bo wygląda jakbyś pisał coś z pamięci czego nie widziałeś już z 5 lat

command przechowuje klawisze, ale doczytaj sobie proszę o operatorach logicznych i co oznacza ! przed nazwą zmiennej w warunki IF i kiedy się go stosuje - toż to także masz w książce.

u ciebie powinno być (podpowiem)

Kod:
if( command == 13 )


.... ale dalej to już sam zajrzyj do źródeł i zaproponuj poprawną wersję

------------------------ [ Dodano po: kilkunastu sekundach ]

O! a jak chcesz w Arduino konkretnie - to Sun ci poda przykłady z kolei ;)


Cholera, tak to jest jak piszę się kod na kolanie. Tak to jest jak się bierze na szybko gotowy kod z płyty. Co do kodu i arduino, wiem że to nie ma nic wspólnego z C++, miałem na myśl "przeportowania" go na C++, aby można było wrzucić przez aplikacje do arduino, ale nie będzie problemu jeśli zaprogramuje atmege przez usbasp. Pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lip 2012, o 12:12 
Offline
Użytkownik

Dołączył(a): 31 gru 2011
Posty: 34
Pomógł: 0

Witajcie, w nocy skleiłem coś takiego. Przyznać się muszę, że te funkcje włączające i wyłączające w if'ach od komend pilotów są wyssane z palca, bo za skarby nie wiem jak mam to zrobić. Dodam, że wczoraj to działało, ale dzisiaj już nie chcę. Proszę o pomoc.

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: 21 lip 2012, o 12:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

w zasadzie tak to mam 2 sprawy bo dopiero teraz zauważyłem .....

gdzieś kupił arduino z M8 ??

najpierw na duino zacznij od zdekodowania kodów swojego pilota

np tak ...

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


gdy już będziesz pewien którymi kodami co chcesz robić

wystarczy wycięcie funkcji void decodeIR()

i przerobienie drobne funkcji void loop()

oczywiście mam na myśli użycie instrukcji swith ... case
i to wszystko

------------------------ [ Dodano po: 19 minutach ]

a zresztą ....

masz rybę :)


Przeanalizuj sobie przykłady z biblioteki IRremote .....
hmmm ..... nie mogę już dodawać załączników do postów więc masz na droopboxie:

https://www.dropbox.com/sh/n43aaqha4vlxvkz/oRnozN_kN7

ja z niej nie korzystałem , ale tobie może się przydać i Ci pomóc :)

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lip 2012, o 13:26 
Offline
Użytkownik

Dołączył(a): 31 gru 2011
Posty: 34
Pomógł: 0

SunRiver napisał(a):
w zasadzie tak to mam 2 sprawy bo dopiero teraz zauważyłem .....

gdzieś kupił arduino z M8 ??

najpierw na duino zacznij od zdekodowania kodów swojego pilota

np tak ...

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


gdy już będziesz pewien którymi kodami co chcesz robić

wystarczy wycięcie funkcji void decodeIR()

i przerobienie drobne funkcji void loop()

oczywiście mam na myśli użycie instrukcji swith ... case
i to wszystko


Arduino kupiłem w wersji 168, ale wygodniej mi się pisze na m8, a dodatkowo wyczytałem, że zaprogramowaną atmege, mogę włożyć do arduino i wszystko będzie działać. Kod jak dla mnie przyjemniej piszę się w C, niż w środowisku arduino. Problemem jest w jaki sposób zrobić funkcje mostkującą te 2 piny. Pozdrawiam Bartek.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lip 2012, o 13:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

Bartek napisał(a):
Arduino kupiłem w wersji 168, ale wygodniej mi się pisze na m8, a dodatkowo wyczytałem, że zaprogramowaną atmege, mogę włożyć do arduino i wszystko będzie działać. Kod jak dla mnie przyjemniej piszę się w C, niż w środowisku arduino. Problemem jest w jaki sposób zrobić funkcje mostkującą te 2 piny. Pozdrawiam Bartek.


To bardzo ciekawe co piszesz , bo przecież ja tu żadnej odmiany i wygody nie widzę przecież 168 to tylko nowsza i bogatsza wersja 8 :P

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lip 2012, o 13:34 
Offline
Użytkownik

Dołączył(a): 31 gru 2011
Posty: 34
Pomógł: 0

SunRiver napisał(a):
Bartek napisał(a):
Arduino kupiłem w wersji 168, ale wygodniej mi się pisze na m8, a dodatkowo wyczytałem, że zaprogramowaną atmege, mogę włożyć do arduino i wszystko będzie działać. Kod jak dla mnie przyjemniej piszę się w C, niż w środowisku arduino. Problemem jest w jaki sposób zrobić funkcje mostkującą te 2 piny. Pozdrawiam Bartek.


To bardzo ciekawe co piszesz , bo przecież ja tu żadnej odmiany i wygody nie widzę przecież 168 to tylko nowsza i bogatsza wersja 8 :P


Zawsze mam problem z ustawieniem fusebitów odpowiedzialnych za ten podzielnik częstotliwości taktowania procesora, który jest w 168. Tzn. ustawie to zgodnie z datasheet, ale układ nie działa tak jak powinien. Pozdrawiam Bartek.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lip 2012, o 13:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

dlaczego nie użyjesz sobie MKCalkulatora ??? ja zawsze ustawiam 8< a zwykle jadę na 16Mhz <siła przyzwyczajenia> bez podziału zegara
bo i poco jak do reszty mogę sobie użyć prescalera w sofcie :)

moje fusy dla m168 zawsze tak wyglądają -U lfuse:w:0xFF:m -U hfuse:w:0xDF:m -U efuse:w:0xF9:m

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 lip 2012, o 13:46 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

Bartek napisał(a):
Zawsze mam problem z ustawieniem fusebitów odpowiedzialnych za ten podzielnik częstotliwości taktowania procesora, który jest w 168. Tzn. ustawie to zgodnie z datasheet, ale układ nie działa tak jak powinien. Pozdrawiam Bartek.


W MkAvrCalculator - nawet nie trzeba się nad tym zastanawiać - jeden ruch palca i masz wszystko ustawione ;)

------------------------ [ Dodano po: kilkunastu sekundach ]

ooo Sun był pierwszy ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 gru 2012, o 14:54 
Offline
Nowy

Dołączył(a): 05 gru 2012
Posty: 3
Pomógł: 0

Jakis czas temu zakupilem ksiazke pana Mirka. Probuje stworzyc na jej podstawie cos pozytecznego. Oczywiscie mam problem. Kod programu do odbioru RC5 wszystkim posiadaczom ksiazki znany, dodalem jedynie pare linijek. Program ma obslugiwac przekazniki, ten sam przycisk pilota ma zalaczony przekaznik wylaczyc, a niezalaczony zalaczyc. Niestety program nie dziala wg moich oczekiwan.

Kod programu:

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


Problem:

Jesli uzywam przyciskow na pilocie 3 i 4 program wydaje sie dzialac prawidlowo. Ale chcialbym aby przelaczanie portu odbywalo sie jednym przyciskiem. Podlaczona dioda LED do portu sygnalizuje zmiane lecz wraca do poprzedniego stanu. Zauwazylem ze przycisniecie przycisku na pilocie na czas trzech migniec diody zmieni stan portu na przeciwny. Niby nic skomplikowanego ale nie moge sobie z tym poradzic. Poprosze o sugestie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 gru 2012, o 15:43 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27224
Lokalizacja: Szczecin
Pomógł: 1041

SUGESTIA ;)

cieszę się, że jak napisałeś działa ci to gdy używasz 2 przycisków .... OK

a teraz chcesz jeden przycisk do załączania wyłączania tego samego urządzenia, diody LED itp

masz więc dwa rozwiązania, ale zanim je podam to polecam ci przypomnieć sobie jak działa nadawanie z pilota. Gdy nasz ludzki paluch wciśnie klawisz nawet na krótko, to i tak nasz paluch jest powolny i w międzyczasie pilot wypuści serię ramek podczerwieni oddzielonych odstępami zwanymi GAP. Tak więc do odbiornika niech w najgorszym przypadku dolecą dwie ramki - to już sam rozumiesz co się stanie, gdy napiszesz coś takiego

Kod:
if( 5==command ) PORTA ^= (1<<PA0);


załóżmy że po kliknięciu klawisza nr.5 chcemy zmienić stan diody LED na przeciwny, a dioda podłączona do PORTA PA0

pierwsza ramka zmieni stan czyli dioda zgaśnie ale ta druga znowu zmieni i dioda się zapali ;) .... jak niechcący nadlecą 3 ramki to uda ci się ją zmienić prawidłowo ale jak 4 ramki to znowu źle - więc trzeba byłoby wciąż myśleć i starać się SZYBKO klikać klawisz - co nieraz przy niektórych pilotach i grubych gumach jest ciężke do realizacji ;)

więc:

1. musisz albo sam wprowadzać dla każdego takiego IF'a dodać tzw własną maszynę stanów i zapamiętywać ostatnią operację żeby zareagować zawsze TYLKO na pierwszą ramkę która nadleci

2. postarać się jednak o drugą książkę:

http://atnel.pl/jezyk-c-pasja-programowania.html

i poczytać w niej 1-szy rozdział , który dopiero opisuje POCZERWIEŃ od A do Z... ;) a prezentowane tam biblioteki są już nie DYDAKTYCZNE jak w pierwszej książce ale pełne niesamowicie potrzebnych gadżetów. Więc pomyśl sobie - taka biblioteka do obsługi RC5 i nie tylko RC5 przekazuje tobie poza command i address jeszcze taki tajemniczy parametr jak key_time. Wiesz co to jest ? To jest piękny licznik nadlatujących ramek OnLine, więc rozwiązanie twojego kłopotu jest OD RĘKI bez konieczności tworzenia oddzielnych maszyn stanu jak w punkcie wyżej, z tymi bibliotekami twój IF() mógłby wyglądać teraz tak:

Kod:
if( 5==command && !key_time ) PORTA ^= (1<<PA0);


widzisz to? sprawdzamy pięknie teraz nie tylko czy wciśnięty klawisz nr 5 ale też czy to właśnie ramka nr. ZERO :) .... więc nie ma to szans już zareagować na 2-gą, 3-cią , 4-tą irt ;)

co więcej - jakbyś chciał np aby jakaś opcja została załączona po dłuższym czasie np 3 sekund (tzn klawisz na pilocie trzeba przytrzymać 3 sekundy żeby coś przełączyć to napiszesz:

Kod:
if( 5==command && 12==key_time ) PORTA ^= (1<<PA0);


czyli gdy klawisz 5 i ramka nr. 12 ... bo np 12 ramek nadleci w czasie 3 sekund ;) rozumiesz ? I teraz dla każdego klawisza oddzielnie możesz wykorzystywać wciąż tę samą zmienną key_time jak chcesz i jak ci się żywnie podoba.

Takich bibliotek to ja już używam w swoich komercyjnych projektach - są przepięknie dopracowane a jeszcze opisane od podstaw jak je budować - modyfikować itp itd

dlatego szczerze polecam drugą książkę i podczerwień w niej opisaną (mój temat konik) .... no ale jeszcze wiele innych ciekawych rzeczy jest.

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 5 gru 2012, o 16:51 
Offline
Nowy

Dołączył(a): 05 gru 2012
Posty: 3
Pomógł: 0

mirekk36 napisał(a):
SUGESTIA ;)

cieszę się, że jak napisałeś działa ci to gdy używasz 2 przycisków .... OK



Tak, bo nic nie stoi na przeszkodzie zeby wlaczal sie i 4 razy, wiec dobrze ze napisalem "...wydaje sie dzialac prawidlowo".

Niestety zakup nastepnego tomu ksiazki nie wchodzi w gre (narazie), gdyz pierwszy tom jak widac sprawia problemy. Sprobuje przeanalizowac Twoja odpowiedz i cos temu zaradzic, w ostatecznosci bede zmuszony uzywac dwoch przyciskow.

Dziekuje za odpowiedz.

Edycja:

Udalo mi sie stworyc taki twor i znow wydaje sie dzialac poprawnie. Czy moga byc jakies z tym problemy?

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


Jednak nie zawsze dziala jak powinno. Pomysle jeszcze nad tym.



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: 14 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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