myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

Check Programm Roboter

Willkommen

myGully

Links

Forum

 
Antwort
Themen-Optionen Ansicht
Ungelesen 14.12.11, 16:42   #1
WhiskeyPapa
Anfänger
 
Registriert seit: Oct 2011
Beiträge: 1
Bedankt: 0
WhiskeyPapa ist noch neu hier! | 0 Respekt Punkte
Standard Check Programm Roboter

Guten Abend,

ich bin Schüler und ich und mein Teamkollege bauen einen Roboter.
Ich hab zwar kein Problem mit der Programmierung jedoch würde es mich freuen wenn sich jemand den Code kurz durchlesen könnte und Tipps zur Optimierung geben könnte. Ach ja der Code muss in Basic sein von der Schule aus.

Ich gebe noch eine kurze Erklärung obwohl es doch gut kommentiert ist.
Ich habe zwei Motoren jeder zwei Ports. Die Zuendung muss an sein damit er fahren kann.
Unten am Roboter sind zwei Infrarot Sensoren welche den ADC mit 1024 auflösen.
1023 ganz hell, 0 ganz dunkel.
Ich habe den Microtaster S3 vorne am Roboter der reagiert wenn er irgendwo gegen fährt. Mit den Tastern S1 und S2 macht man den Pause oder Fahrmodus an oder aus.
Der Roboter soll autonom auf einer schwarzen Linie mit weißen Untergrund fahren.

Code:
$regfile = "m8def.dat"                                      '* Controller
$crystal = 1000000                                          '* Takt 1 MHz
$hwstack = 40                                               '* Hardwarestack
$swstack = 32                                               '* Softwarestack
$framesize = 60                                             '* Framesize

'* ADC *'
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
'* LCD *'
Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portd.7 , _
Db7 = Portb.0 , E = Portb.4 , Rs = Portb.5
Config Lcd = 16 * 2
Cursor Off
Config Lcdbus = 4
'* Alias *'
S1 Alias Pind.3                                             '* Microtaster 1
S2 Alias Pind.2                                             '* Microtaster 2
S3 Alias Pinc.2                                             '* Microtaster 3
M1vw Alias Portd.0                                          '* Motor 1 vw
M1rw Alias Portd.1                                          '* Motor 1 rw
M2vw Alias Portd.4                                          '* Motor 2 vw
M2rw Alias Portd.5                                          '* Motor 2 rw
Led_r Alias Portc.4                                         '* rote LED
Led_g Alias Portc.5                                         '* gruene LED
Buzzer Alias Portd.6                                        '* Buzzer
Zuendung Alias Portb.1                                      '* Zündung
'* Input/Output *'
Config S1 = Input
Config S2 = Input
Config S3 = Input
Config M1vw = Output
Config M1rw = Output
Config M2vw = Output
Config M2rw = Output
Config Led_r = Output
Config Led_g = Output
Config Buzzer = Output
Config Zuendung = Output
'* Variabeln *'
Dim On_off As Bit                                           '* Programm an = 1
Dim S3rw As Bit                                             '* Microtaster
Dim Adc1 As Word                                            '* getadc1
Dim Adc3 As Word                                            '* getadc3
Dim Grad As Word
'* Variabeln Werte *'
Zuendung = 1                                                '* Zündung an
On_off = 0                                                  '* Hauptprogramm aus
Grad = 800                                                  '* Wert für 90°
'* Start *'
Cls
Locate 1 , 6
Lcd "TEAM:"
Locate 2 , 6
Lcd "Monte"
Cls


'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'
Do

While On_off = 0                                            '* Warteschleife
If S1 = 1 Then On_off = 1                                   '* Mainprogramm an
Gosub Sensor                                                '* Sensorwerte
Gosub Watch                                                 '* LCD-Anzeige
Gosub Stopp                                                 '* Motor aus
Wend

If S2 = 1 Then On_off = 0                                   '* Mainprogramm aus
Gosub Watch                                                 '* LCD-Anzeige
Gosub Sensor                                                '* Sensorwerte

If S3rw = 1 And Adc1 < 500 And Adc3 < 500 Then Gosub Asw    '* Ausweichen
If S3rw = 1 And Adc1 > 800 And Adc3 > 800 Then Gosub Rw     '* Rueckwaerts
If Adc1 < 200 And Adc3 < 200 Then Gosub Vw                  '* Vorwaerts
If Adc1 > 400 And Adc3 < 250 Then Gosub Ldr                 '* Links drehen
If Adc1 < 250 And Adc3 > 400 Then Gosub Rdr                 '* Rechts drehen

Loop
End
'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'*'

'* Sensorwerte *'
Sensor:                                                     '* Sensorvariabeln
Adc1 = Getadc(1)
Adc3 = Getadc(3)
S3rw = S3
Return
'* LCD-Ausgabe *'
Watch:                                                      '* LCD Ausgabe
Locate 1 , 3
Lcd "Sensorwerte:"
Locate 2 , 1
Lcd "|" ; Adc1 ; "   " ; "||" ; S3 ; S3 ; "||" ; Adc3 ; "   " ; "|"
Return
'* Motor *'
Stopp:                                                      '* Pause
M1vw = 0
M1rw = 0
M2vw = 0
M2rw = 0
Return
'********'
Vw:                                                         '* Vorwaerts
M1vw = 1
M1rw = 0
M2vw = 1
M2rw = 0
Return
'********'
Rw:                                                         '* Rückwärts
M1vw = 0
M1rw = 1
M2vw = 0
M2rw = 1
Return
'********'
Li:                                                         '* Links drehen
M1vw = 0
M1rw = 1
M2vw = 1
M2rw = 0
Return
'********'
Re:                                                         '* Rechts drehen
M1vw = 1
M1rw = 0
M2vw = 0
M2rw = 1
Return
'********'
Codeasw1:                                                   '* Ausweichen
Gosub Rw                                                    '* 10 * 10 cm
Waitms 1500
Gosub Re
Waitms Grad / 2
Gosub Vw
Waitms 2000
Gosub Li
Waitms Grad / 2
Gosub Vw
Waitms 1000
Gosub Li
Waitms Grad / 2
Gosub Vw
Waitms 2000
Gosub Re
Waitms Grad / 2
Gosub Vw
Waitms 1500
Return
'********'
Codeasw2:                                                   '* Ausweichen
Gosub Rw                                                    '* 10 * 10 cm
Waitms 1500
Gosub Re
Waitms Grad
Gosub Vw
Waitms 1750
Gosub Li
Waitms Grad
Gosub Vw
Waitms 2500
Gosub Li
Waitms Grad
Gosub Vw
Waitms 1750
Gosub Re
Waitms Grad
Gosub Vw
Waitms 200
Return
'********'
Ach ja habe unten beim Motor die Labels geändert aber oben in der DoLoop nicht. In meiner Version stimmt es.
WhiskeyPapa ist offline   Mit Zitat antworten
Antwort


Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:31 Uhr.


Sitemap

().