Skocz do zawartości

Prośba o pomoc w napisaniu programu.


emix95

Pomocna odpowiedź

Chciał bym żeby ktoś mi pomógł napisać program ma mniej więcej wyglądać to tak:

Po włączeniu na ekraniku 40x2 (tylko taki mam akurat)

Pojawi się napis

Wybierz opcję:

1. Line follower 2. Minisumo 3.Rc5

naciskam przycisk 1 i na ekraniku pojawia się:

Wybrałeś obcję: line follower

(ładowanie takie po kolei po jednym kwadracie) .

jak się załadują wszystkie kwadraty toi będzie pisać

Opcja 1 linefollower

Naciśnij 4. aby wrócić do menu:

w tym czasie normalnie robot działa oczywiście ale jak nacisnę 4 to powróci do stanu na początku. Czyli opcja 1 2 i 3

jak nacisnę 2 to pisze Wybrałeś opcję 2. mini sumo itd!

Narazie chciał bym to na atmega8 przetestować sam program ale całość będzie na Atmega16

Kod do line follower (Autorem jest piotreks-89 )

''''''''''''''''''''''''Konfiguracja''''''''''''''''''''''''
$regfile = "m8def.dat"
$crystal = 12000000

'Konfiguracja przetwornika analog-cyfra (ADC)
Config Adc = Single , Prescaler = Auto , Reference = Avcc

'Konfiguracja sterowania sprzętowym PWM
Config Timer1 = Pwm , Pwm = 8 , Prescale = 1 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down

'Konfiguracja portów
Config Portd = Output
Config Portb = Output

'Granica reagowania na linię
Const Granica = 400
'Deklaracja nazw
Led2 Alias Portd.7
Led3 Alias Portd.6
Led4 Alias Portd.5
Led5 Alias Portd.4

Silnik_lewy_a Alias Portd.3
Silnik_lewy_b Alias Portd.2
Silnik_prawy_b Alias Portd.0
Silnik_prawy_a Alias Portd.1

'Deklaracje zmiennych
Dim Czujnik_lewy As Word
Dim Czujnik_srodkowy_lewy As Word
Dim Czujnik_srodkowy_prawy As Word
Dim Czujnik_prawy As Word

Start Adc

Set Silnik_lewy_a
Reset Silnik_lewy_b
Set Silnik_prawy_a
Reset Silnik_prawy_b
'Silniki włączone
Pwm1a = 255
Pwm1b = 255
''''''''''''''''''''''''Pętla główna''''''''''''''''''''''''
Do
'Każdowazowa konfiguracja czujników
Czujnik_lewy = Getadc(2)
Czujnik_srodkowy_lewy = Getadc(3)
Czujnik_srodkowy_prawy = Getadc(4)
Czujnik_prawy = Getadc(5)

  If Czujnik_srodkowy_lewy > Granica Then
     Pwm1a = 255
     Pwm1b = 255
     Led3 = 1
  If Czujnik_srodkowy_prawy > Granica Then
     Pwm1a = 255
     Pwm1b = 255
     Led4 = 1
  Elseif Czujnik_lewy > Granica Then
     Pwm1a = 0
     Pwm1b = 255
     Led2 = 1
  Elseif Czujnik_prawy > Granica Then
     Pwm1a = 255
     Pwm1b = 0
     Led5 = 1
  Else
     Pwm1a = 255
     Pwm1b = 255
     Led2 = 0
     Led3 = 0
     Led4 = 0
     Led5 = 0
  End If
  End If
Loop
End

nie wiem czy komuś to będzie potrzebne ale konf. wyświetlacza to

Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 

__________

Komentarz dodany przez: Treker

Link do komentarza
Share on other sites

A nie lepiej Ci samemu coś sklecić ? Zawsze gdy coś Ci nie będzie wychodziło na pewno ktoś z forum Ci pomoże i zarazem więcej się nauczysz, napiszesz kolejny program sam a nie poprosisz kogoś o gotowca, bo nie zawsze znajdzie się ktoś taki. Polecam kurs bascoma z Forbota.

Radzę chociaż spróbować, bo potem będzie ciężko. 😉

Link do komentarza
Share on other sites

Tak o to chyba początek tak myślę

$regfile = "m8def.dat"
$crystal = 100000
Config Lcd = 40 * 2
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
config portd=input
   Cls
Dim I As Byte


          Cls

          Lcd ".WYBIERZ OBCJE:" ; Chr(0) ; Chr(1) ;

          Cursor Off

          Home Lower

          Lcd "1. LINE 2.SUMO 3.RC5" ; Chr(0) ; Chr(1) ;

Do
For I = 1 To 21
Shiftlcd Right
Waitms 2000
Next I

For I = 1 To 21
Shiftlcd Left
Waitms 2000
Next I
Do

  if pinb.0=1 then                         'jeżeli przycisk 1 wciśnięty
                                              'chciał bym że jak nacisne 1 to pokaze sie napis i zacznie działać jak to rozwiązać?
Loop
End If

Loop
Link do komentarza
Share on other sites

Tak.

1. Pisanie programu na ATMega8 żeby potem marnować czas na przeniesienie go na Mege16, to strata czasu. Zważywszy żę BASCOM najlepszym do tego celu nie jest. Najlepiej od razu pisać pod Mege16.

2. Trochę nie rozumiem, sensu tego menu i opcji LF vs MS. To wymagałoby czegoś na wzór "systemu operacyjnego", co nie jest do końca dobrym pomysłem. Zresztą jak to chcesz napisać, bez podania konkretnego schematu, takiego "komputera". No i skomplikowane to programowo, bo trzeba by napisać odpowiednie funkcje, bloki itd. Podsumowująć wykonalne, ale nie dla początkującego.

3. Nie polecam pisania tego na zasadzie łączenia dwóch istniejących kodów, i to w dodatku nie twojego autorstwa. Po prostu nie zgrasz tego funkcyjnie, a i pewnie nigdy nie ukończysz. Jak proponował kolega wyżej, jak już to samemu od zera. No opracuje schemat takiego komputera na M16, inaczej nie ma to bardzo sensu.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

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

Jak zrobiłem tak jak napisałeś to dziwna sprawa bo jak nacisnąłem 1 lub dotknąłem to się zmieniło wiec zmieniłem na b1 i tam to już wgl mrugał napis na przemian wlg jakaś padaka.

Link do komentarza
Share on other sites

Dodaj jakieś opóźnienie :

Do 

  if pinb.0=1 then                         'jeżeli przycisk 1 wciśnięty 
  cls 
  LCD = "twój tekst"    
  waitms 100                                'opóźnienie np. 100 ms    
  End If 
Loop 

jeśli będzie nadal mrugać zwiększ je.

Link do komentarza
Share on other sites

Jeszcze reaguje na dotyk ale już nie mruga jak wcześniej i jeszcze jedno

jest taka opcja po naciśnięciu wraca do menu czy muszę reset?

Link do komentarza
Share on other sites

Nie dziw się, że mrugnął. Kolega Phil zapomniał o takim złośliwym zjawisku jak drgania styków. Poza tym przycisk nie powinien być podłączony do Vcc. Bascom ma wbudowaną funkcję Debounce. Poczytaj o niej w helpie.

  • Lubię! 1
Link do komentarza
Share on other sites

Możesz zrobić coś takiego:

'Tutaj zamieść instrukcje konfiguracyjne
'regfile itp,
'config lcd.... itd.
' a ponadto
Config Pinb.3 = Input                                       'przycisk podłączony jest do PinB.3

Przycisk1 Alias Pinb.3                                       'Ustawiasz alias
Set Portb.3                                                      'Ustawiasz stan wysoki na tym pinie wewnętrznym pull-up'em

cls                                                                   'Czyścimy wyświetlacz
Do                                                                   'Początek pętli głównej
Home                                                               'Przesuwamy kursor na miejsce 1,1 zamiast czyszczenia - mniejsza zwłoka czasu
If Przycisk1 = 0 then lcd "Wcisnieto przycisk  " else lcd "wcisnij przycisk     " 'prosty warunek
loop                                                                  'Koniec pętli głównej
end                                                                   'Koniec programu

Spróbuj się tym programem pobawić.

Link do komentarza
Share on other sites

Ale koledzy tu czarują.


dim poz_menu as byte 'zmienne wskazująca pozycje w menu

Buton alias Pinb.3  ' - przycisk wyboru
Ok alias Pinb.4      ' - zatwierdzenie

............  ' instrukcje inicjujace, czyli ustawienie portów itd.
poz_menu = 0
do
if buton=0 then       'jeżeli naciśnięto przycisk to:
 waitms 10            ' - odczekaj 10ms
 if buton=0 then     '- i sprawdż ponownie przycisk
    incr poz_menu   '- jeżeli naciśnięty to następna pozycja w menu
    if poz_menu > 2 than 'jeżeli przekroczono ilość pozycji w menu to wróć na pozycje 0
       poz_menu=0
    end if
    cls
    home
    select case poz_menu 
      case 0: lcd "LineF....."
      case 1: lcd "Mini Sumo"
      case 2" lcd "RC5 dekode"
    end select
 end if
end if

'tutaj wstaw kod dla przycisku OK.
waitms 100 ' opóźnie aby zbyt szybko nie przemiatało przycisków. Dobrać sobie samemu.
loop

Oczywiście to tylko szkic, nie kompilowałem tego, mogą być jakieś literówki w tym kodzie. Ale ogólnie ta zasada.

Link do komentarza
Share on other sites

Program działa tylko nadal mam problem z drganiem styków czytałem o tym jakiś tam program można dograć próbowałem ale coś nie idzie nadal mam to samo.

lekko dotknę i opcję latają mi itd.

i nieraz mam że dolna linijka wyświetla mi się u góry czemu?

Link do komentarza
Share on other sites

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!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.