Skocz do zawartości

Pomocna odpowiedź

Napisano

Witam 🙂

Na pewno każdy z was jeździ bądź jeździł rowerem ;/

O podstawowym wyposażeniu roweru każdy wie a ja wspomnę o tylnym świetle, ponieważ zacząłem zabawę z procesorami postanowiłem zrobić tylna lampkę rowerowa z 7 opcjami [coś takiego jak ze sklepu za 4 zł].

Wiec przejdźmy do rzeczy:

- program na atmega8 [procesor i programator mam]

- programik napisałem ale nie wiem czy będzie działał wiec podaje go tutaj 😋 [nie zwracajcie uwagi na komentarze do komend to dla ułatwienia mi nauki]:

 ' program sterujacy funkcjami czterech diod [test] 
' przejscie do podprogramu



$regfile = "m8def.dat"                                      ' dzialanie na atemega8
$crystal = 8000000                                          '8 MHz na wewnętrznym oscylatorze


Config Portd = Output                                       'cały port d jako wyjście
Config Portb = Input                                        'caly port b jako wejscie

Portb = &B00000000                                          'wszystko stan = 0
Portd = &B00000000                                          'wszystko stan =0



Do                                                          'petla nieskonczona

If Pinb.0 = 1 Then                                          ' przycisk S1
Gosub Prog_1

Elseif Pinb.1 = 1 Then                                      ' przycisk S2
Gosub Prog_2

Elseif Pinb.2 = 1 Then                                      ' przycisk S3
Gosub Prog_3

Elseif Pinb.3 = 1 Then                                      ' przycisk S4
Gosub Prog_4

Elseif Pinb.4 = 1 Then                                      ' przycisk S5
Gosub Prog_5

Elseif Pinb.5 = 1 Then                                      ' przycisk S6
Gosub Prog_6

Elseif Pinb.6 = 1 Then                                      ' przycisk S7
Gosub Prog_7


End If                                                      'koniec bloku warunkowego

Loop

Prog_1: 
Set Portd.0
Set Portd.3

Wait 2                                                      'czekaj 2 s                                                   '
Return                                                      'wykonuje powrot do programu glownego

Prog_2: 
Set Portd.1
Set Portd.2

Wait 2                                                      'czekaj 2 s                                              '
Return                                                      'wykonuje powrot do programu glownego

Prog_3: 
Set Portd.0
Set Portd.2

Wait 2                                                      'czekaj 2 s
Return                                                      'wykonuje powrot do programu glownego

Prog_4: 
Set Portd.1
Set Portd.3

Wait 2                                                      'czekaj 2 s                                               '
Return                                                      'wykonuje powrot do programu glownego

Prog_5: 
Set Portd.0
Set Portd.1

Wait 2                                                      'czekaj 2 s
Return                                                      'wykonuje powrot do programu glownego

Prog_6: 
Set Portd.2
Set Portd.3

Wait 2                                                      'czekaj 2 s                                                    '
Return                                                      'wykonuje powrot do programu glownego

Prog_7: 

Set Portd.0
Set Portd.1
Set Portd.2
Set Portd.3
Wait 2                                                      'czekaj 2 s

Reset Portd.0
Reset Portd.1
Reset Portd.2
Reset Portd.3
Waitms 500                                                  'czekaj 0.5 s

Set Portd.0
Set Portd.1
Set Portd.2
Set Portd.3
Waitms 1500                                                 'czekaj 1.5 s                                                '
Return                                                      'wykonuje powrot do programu glownego


End

Oczywiście żaden program nie bedzie bez schematu :

wiec proszę o sprawdzenie zarówno programu jak i schematu;p

A jeszcze jedno co do języka bascom. Jaka komenda przenosi do podprogramu i z niego nie wychodzi aż do odpowiedniego wydarzenia??

ps: mam nadzieje ze temat nie poleci do kosza 😅

w razie czego pytać to wytłumaczę bo nie wiem czy ........... 😃

Komentarz dodany przez: treker:

Co to ma wspólnego z robotyką?

Przenosze.

Program dobrze, schemat też. W BASCOMIe do programu wchodzisz poleceniem Gosub, a żeby wyjść z podprogramu pod pewnym warunku to umieszczasz polecenie Return w instrukcji warunkowej.

A ja tu widze mały błąd. Bo popatrz naciśniesz S1 a potem S2 to będziesz miał zapalone segmenty z S1 i z S2. Dodaj w programie zerowanie wyjśc(na diody) przy naciśnięciu następnego przycisku a potem dopiero ustawienie jego podporgramu.

Co to ma wspólnego z robotyką?

Z robotyka nic ale z programowaniem owszem.

W BASCOMIe do programu wchodzisz poleceniem Gosub, a żeby wyjść z podprogramu pod pewnym warunku to umieszczasz polecenie Return w instrukcji warunkowej.

a mógłbyś podać przykład 😋 [chodzi mi o takie coś ze jednym przyciskiem wchodzę do podprogramu a drugim wychodzę do głównego programu 😋 [nie umiem niczego takiego znaleźć ;/]

Dodaj w programie zerowanie wyjśc(na diody) przy naciśnięciu następnego przycisku

czy chodzi a cos takiego

Prog_1: 
Set Portd.0
Reset Portd.1
Reset Portd.2
Set Portd.3 
Return

Komentarz dodany przez: treker:

Z robotyka nic ale z programowaniem owszem.

To co robiło w dziale Robotyka - Programowanie 😋

Właśnie tez tak myślałem ;/

Ale nie wiem jak zrobić aby wychodzić z podprogramu gdy zastanie nacisniety przycisk ;/

Portd.0 = 0
portd.1 = 0
portd.2 = 0
portd.3 = 0

gdzie ?? bo nie rozumiem 😋 przekopiuj większy kawałem programu 😋

Pisze teraz tak prowizorycznie bo niemam czasu musze zakonczyc do jutra swój projekt z którym mam troszke pracy.

Prog_2: 
Reset Portd.0
Reset Portd.1
Reset Portd.2
Reset Portd.3
Set Portd.1
Set Portd.2

Wait 2                                                      'czekaj 2 s                                              '
Return                                                      'wykonuje powrot do programu glownego

Gdyby procke chodził bardzo wolno(20Hz) było by widac migotanie ale powyżej 50 podobno już nie widac a więc nie powinno byc problemu.

Pozdrawiam

Wydaje mi się że teki mój kod jest dobry ale jeszcze dodam tam kilka żeczy.

podprogram: 

'instrukcje zawarte w podprogramie

Do

If pin0.b=0 Then Return
End If

Loop

Return

Oki już zrozumiałem błąd .

Ale jeszcze co do tych podprogramów :

Do

If Pinb.0 = 1 Then
Gosub Program1                                              ' przycisk 1
End If

Loop

Program1: 
Do

If Pinb.1 = 1 Then
Return                                                      ' przycisk 2
End If

Portd.0 = 1
Portd.1 = 1


Loop

Czy takie coś będzie działać ??

można użyć dwóch nieskończonych pętli ??

1 przycisk wchodzi do podprogramu 2 przycisk wychodzi z niego ??

pozdro 🙂)

Nie nie może być dwóch pętli : D

Niedokońca rozumiem jaki jest problem ale napisze cos : P

Jesli zrobisz tak:

Do

If Pinb.0 = 1 Then gosub program1                                              
waitms 50
Loop

Program1: 
If Pinb.1 = 1 Then Return
waitms 50
Portd.0 = 1
Portd.1 = 1

end sub

Program poleci tam tylko wtedy gdy pinb.0 będzie w stanie wysokim,jeśli chcesz się tam zatrzymać gdy tylko raz przyciśniesz przycisk musisz policzyć kliknięcia...Coś takiego:

dim licznik as byte
Do

If Pinb.0 = 1 Then incr licznik

if licznik =1 then gosub program 1  'program skacze tam z każdym cyklem zegara do czasu gdy zmienna przyjmie inna wartość.                                            
waitms 50
Loop

Program1: 
If licznik=2 Then
Return
licznik=0                                   'zerujemy bo inaczej musiałbyś naciskać 253 razy...
end if

Portd.0 = 1                                'główny program podprogramu : P
Portd.1 = 1
waitms 50
end sub

To tyle, powinno działać ale różnie to jest...

Pozdrawiam Mictronic!

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...