Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

Sumorobot programı

Başlatan bolanka, 14 Şubat 2011, 11:12:27

bolanka

Merhaba arkadaşlar. Sumo robot yapmaya çalışıyorum. Odtü robot topluluğunun yayınladığı sumo robot dökümanından yapmaya çalışıyorum. http://www.bilimbilmek.com/sayfa/Sumo_Robot_Yapimi-Bilim_ve_Teknik_456dan.html

Burada programla ilgili kafama takılan birkaç nokta var:

[color=red]INCLUDE "modedefs.bas" [/color];BU YÖNTEM  İLE SHARP ALGILAYICISINI OKUYACAĞIZ
SYMBOL SAGILERI = PORTB.0 ;MOTORLARI TANIMLADIK
SYMBOL SAGGERI  = PORTB.1
SYMBOL SOLGERI  = PORTB.2
SYMBOL SOLILERI = PORTB.3
SYMBOL CNYSAG   = PORTB.4 ;SIYAH-BEYAZ ALGILAYICILARI TANIMLADIK
SYMBOL CNYSOL   = PORTB.5
SAAT VAR PORTB.6


Yukarıda kırmızı ile gösterdiğim yerdeki modedefs.bas kısmını pic'e ayrıca include mi etmemiz gerekiyor? Yoksa bu haliyle bıraksak olur mu?

Birde program da başka bir sorun var mı? Programın tamamı aşağıda:

INCLUDE "modedefs.bas" ;BU YÖNTEM  İLE SHARP ALGILAYICISINI OKUYACAĞIZ
SYMBOL SAGILERI = PORTB.0 ;MOTORLARI TANIMLADIK
SYMBOL SAGGERI  = PORTB.1
SYMBOL SOLGERI  = PORTB.2
SYMBOL SOLILERI = PORTB.3
SYMBOL CNYSAG   = PORTB.4 ;SIYAH-BEYAZ ALGILAYICILARI TANIMLADIK
SYMBOL CNYSOL   = PORTB.5
SAAT VAR PORTB.6
;UZAKLIK ALGILAYICININ BACAKLARINA İSİM VERDİK
BILGI  VAR PORTB.7
TRISB = %10110000 ;GİRİŞ VE ÇIKIŞLARI AYARLADIK
MES CON 80
UZAKLIK  VAR BYTE
UZAKLIK1 VAR BYTE
DONUS    VAR BIT
KONTROL  VAR WORD
BULDU    VAR BIT
BIRIM    VAR BYTE
N        VAR BYTE

;*****  ANA DÖNGÜ

GOSUB  DUR ;YARIŞMA KURALINA GÖRE EN BAŞTA BEKLENMESİ GEREKEN
PAUSE  5000 ;5 SANİYELİK SÜRE
GOSUB  SAATYONU ;SAAT YÖNÜNDE DÖNEREK YARIŞA BAŞLAMA
PAUSE  10

ANA:
GOSUB  OKU
GOSUB  DEGERLENDIR
GOTO   ANA

DEGERLENDIR:
IF UZAKLIK >= MES THEN ;UZAKLIK DEĞERİ BELİRLİ BİR SAYIDAN BÜYÜKSE
CALL     DUZGIT ;RAKİP ROBOTUN YAKIN OLDUĞU ANLAŞILIR
PAUSE    1 ;VE ROBOT HEMEN DÜZ GİTMEYE BAŞLAR ENDIF
RETURN

;*****  TEKER HAREKETİ

DUZGIT:
HIGH SAGILERI HIGH SOLILERI LOW SAGGERI LOW SOLGERI RETURN SAATYONU: HIGH SAGGERI LOW SAGILERI HIGH SOLILERI LOW SOLGERI RETURN TERSI: HIGH SAGILERI LOW SAGGERI HIGH SOLGERI LOW SOLILERI RETURN GERIGIT: LOW SAGILERI LOW SOLILERI HIGH SAGGERI HIGH SOLGERI RETURN DUR: LOW SAGILERI LOW SOLILERI LOW SAGGERI LOW SOLGERI RETURN ;-----------SHARP OKUMA RUTİNİ OKU: LOW SAAT ;SAATİ (CLOCK) KAPATARAK BİLGİ GELMESİNİ BEKLER WHILE BILGI=0 ;BİLGİ GELENE KADAR BEKLER WEND SHIFTIN BILGI, SAAT, MSBPOST, (UZAKLIK) ;UZAKLIK BİLGİSİNİ SHIFTIN KOMUTU HIGH YESIL ;ARACILIĞIYLA MSBPOST YÖNTEMİ İLE PAUSE 5 ;ALIP UZAKLIK DEĞİŞKENİNE ATAR ARDINDAN BİLGİ ALIŞ VERİŞİNİ RETURN ;KAPATIR

eistain_54

kardeş orda zaten include ile dahil etmiş dosyayı.Harici olarak yapman gereken bir şey yok  rahat ol.Kodda da sıkıntı yok sannki son satırları inceleyemdim ama.Adamlar zaten hem odtülü hemde programı test etmişlerdir.hatta bence o programla yarışmaya girmişlerdir...
Her gün 24 altın verilirken bunun için kime şükredersin ey ademoğlu!?!

bolanka

Cevap için teşekkür ederim. Bakalım sorun çıkacak mı?

eistain_54

Alıntı yapılan: bolanka - 15 Şubat 2011, 16:40:25
Cevap için teşekkür ederim. Bakalım sorun çıkacak mı?
SORUN ÇIKTIMI???
Her gün 24 altın verilirken bunun için kime şükredersin ey ademoğlu!?!

bolanka

INCLUDE "modedefs.bas" ;BU YÖNTEM  İLE SHARP ALGILAYICISINI OKUYACAĞIZ
SYMBOL SAGILERI = PORTB.0 ;MOTORLARI TANIMLADIK
SYMBOL SAGGERI  = PORTB.1
SYMBOL SOLGERI  = PORTB.2
SYMBOL SOLILERI = PORTB.3
SYMBOL CNYSAG   = PORTB.4 ;SIYAH-BEYAZ ALGILAYICILARI TANIMLADIK
SYMBOL CNYSOL   = PORTB.5
SAAT VAR PORTB.6
;UZAKLIK ALGILAYICININ BACAKLARINA İSİM VERDİK
BILGI  VAR PORTB.7
TRISB = %10110000 ;GİRİŞ VE ÇIKIŞLARI AYARLADIK
MES CON 80
UZAKLIK  VAR BYTE
UZAKLIK1 VAR BYTE
DONUS    VAR BIT
KONTROL  VAR WORD
BULDU    VAR BIT
BIRIM    VAR BYTE
N        VAR BYTE


;*****  ANA DÖNGÜ

GOSUB  DUR
PAUSE  5000 ;5 SANİYELİK SÜRE
GOSUB  SAATYONU ; SAAT YÖNÜNDE DÖNEREK YARIŞA BAŞLAMA
PAUSE  10

ANA:

GOSUB  OKU
GOSUB  DEGERLENDIR
GOTO   ANA

DEGERLENDIR:
IF UZAKLIK >= MES THEN ;UZAKLIK DEĞERİ BELİRLİ BİR SAYIDAN BÜYÜKSE
CALL     DUZGIT ;RAKİP ROBOTUN YAKIN OLDUĞU ANLAŞILIR
PAUSE    1 ;VE ROBOT HEMEN DÜZ GİTMEYE BAŞLAR
ENDIF
RETURN

;*****  TEKER HAREKETİ

DUZGIT:
HIGH SAGILERI
HIGH SOLILERI
LOW SAGGERI
LOW SOLGERI
RETURN
SAATYONU:
HIGH SAGGERI
LOW SAGILERI
HIGH SOLILERI
LOW SOLGERI
RETURN
TERSI:
HIGH SAGILERI
LOW SAGGERI
HIGH SOLGERI
LOW SOLILERI
RETURN
GERIGIT:
LOW SAGILERI
LOW SOLILERI
HIGH SAGGERI
HIGH SOLGERI
RETURN
DUR:
LOW SAGILERI
LOW SOLILERI
LOW SAGGERI
LOW SOLGERI
RETURN

;-----------SHARP OKUMA  RUTİNİ

OKU:
LOW  SAAT

WHILE  BILGI=0 ;BİLGİ GELENE KADAR BEKLER
WEND
SHIFTIN BILGI, SAAT, MSBPOST, [UZAKLIK]
HIGH YESIL
PAUSE  5 ;ALIP UZAKLIK DEĞİŞKENİNE ATAR ARDINDAN BİLGİ ALIŞ VERİŞİNİ
RETURN ;KAPATIR

KIRMIZI ile işaretlediğim yerde bad expression hatası veriyor. Bu satırı silip yükledim. Sumo robotu yaptım ama istediğim gibi çalışmadı.  Bu hatayı nasıl giderebiliriz?

Maxim

YESIL nedir ?
YESIL diye bir tanımlama yapmamışsınız programın başına, haliyle ona hata veriyor

bolanka

Teşekkürler cevap için;

Ben de
Alıntı yapılan: Maxim - 25 Mart 2011, 12:50:42
YESIL nedir ?
YESIL diye bir tanımlama yapmamışsınız programın başına, haliyle ona hata veriyor

Benim de dikkatimi çekti. Ama Odtü robot topluluğunun dökümanlarından olduğu için hata olasılığı az gibi geldi bana. Şimdi o "HIGH YESIL" kısmında hata vermemesi için "YESIL  VAR BYTE" gibi bir tanımlama mı yapmalıyım?

Bir sorunda Sharp mesafe sensörü ile ilgili olacaktı.

;-----------SHARP OKUMA  RUTİNİ

OKU:
LOW  SAAT
 
WHILE  BILGI=0 ;BİLGİ GELENE KADAR BEKLER
WEND
SHIFTIN BILGI, SAAT, MSBPOST, [UZAKLIK]
HIGH YESIL
PAUSE  5 ;ALIP UZAKLIK DEĞİŞKENİNE ATAR ARDINDAN BİLGİ ALIŞ VERİŞİNİ
RETURN ;KAPATIR


Bu bölümde SAAT  bilgisi gibi Sharp GP2D02 ye ait bilgiler tanımlanmış. Bu sensörün 4 pini var. Bunlar Vcc,Gnd,V0(pic e giden) ve Clock uçları. Problem şurdaki benim kullandığım sensör  GP2D02  değil. Ben Sharp 2Y0A21 taktım devreye. Bu sensör 3 pinli. Datasheetine baktığımda Vcc, Gnd ve Pic e giden bilgi bacağı var sadece. Yani Clock yok.

Bu durumda program kısmında değişiklik yapmalı mıyım? Nasıl olabilir? Arkadaşlar el atın yapalım şunu..


bolanka

Konu günceldir arkadaşlar...Problem çözülmedi halen..

Maxim

problem nedirki ?
o kodun sorunsuz çalışacağınımı sanıyorsunuz siz ? bu iş o kadar kolay değil
hem sitesinde örnek uygulama denmiş, hiç bir garantisi yok
kod yarım yamalak gibi geldi

bir iki değişiklikten sonra derleniyor işte aşağıda,
derlenmesi demek tamam oldu demek değil, ne yaptığının bilinmesi gerek .
hala meçhul yeşilin ne olduğu bilinmiyor


INCLUDE "modedefs.bas" ;BU YÖNTEM  İLE SHARP ALGILAYICISINI OKUYACAĞIZ

SYMBOL SAGILERI = PORTB.0 ;MOTORLARI TANIMLADIK
SYMBOL SAGGERI  = PORTB.1
SYMBOL SOLGERI  = PORTB.2
SYMBOL SOLILERI = PORTB.3
SYMBOL CNYSAG   = PORTB.4 ;SIYAH-BEYAZ ALGILAYICILARI TANIMLADIK
SYMBOL CNYSOL   = PORTB.5
SAAT VAR PORTB.6
;UZAKLIK ALGILAYICININ BACAKLARINA İSİM VERDİK
BILGI  VAR PORTB.7
TRISB = %10110000 ;GİRİŞ VE ÇIKIŞLARI AYARLADIK
MES CON 80
UZAKLIK  VAR BYTE
UZAKLIK1 VAR BYTE
DONUS    VAR BIT
KONTROL  VAR WORD
BULDU    VAR BIT
BIRIM    VAR BYTE
N        VAR BYTE

;*****  ANA DÖNGÜ

GOSUB  DUR ;YARIŞMA KURALINA GÖRE EN BAŞTA BEKLENMESİ GEREKEN
PAUSE  5000 ;5 SANİYELİK SÜRE
GOSUB  SAATYONU ;SAAT YÖNÜNDE DÖNEREK YARIŞA BAŞLAMA
PAUSE  10

ANA:
GOSUB  OKU
GOSUB  DEGERLENDIR
GOTO   ANA

DEGERLENDIR:
IF UZAKLIK >= MES THEN ;UZAKLIK DEĞERİ BELİRLİ BİR SAYIDAN BÜYÜKSE
CALL     DUZGIT ;RAKİP ROBOTUN YAKIN OLDUĞU ANLAŞILIR
PAUSE    1 ;VE ROBOT HEMEN DÜZ GİTMEYE BAŞLAR ENDIF
endif
RETURN

;*****  TEKER HAREKETİ
DUZGIT:
HIGH  SAGILERI
HIGH  SOLILERI
LOW   SAGGERI
LOW   SOLGERI
RETURN

SAATYONU:
HIGH  SAGGERI
LOW   SAGILERI
HIGH  SOLILERI
LOW   SOLGERI
RETURN

TERSI:
HIGH  SAGILERI
LOW   SAGGERI
HIGH  SOLGERI
LOW   SOLILERI
RETURN

GERIGIT:
LOW   SAGILERI
LOW   SOLILERI
HIGH  SAGGERI
HIGH  SOLGERI
RETURN

DUR:
LOW   SAGILERI
LOW   SOLILERI
LOW   SAGGERI
LOW   SOLGERI
RETURN

;-----------SHARP OKUMA  RUTİNİ
OKU:
LOW  SAAT ;SAATİ (CLOCK) KAPATARAK BİLGİ GELMESİNİ BEKLER
WHILE  BILGI=0 ;BİLGİ GELENE KADAR BEKLER
WEND
SHIFTIN BILGI, SAAT, MSBPOST, [UZAKLIK] ;UZAKLIK BİLGİSİNİ SHIFTIN KOMUTU
'HIGH YESIL ;ARACILIĞIYLA MSBPOST YÖNTEMİ İLE
PAUSE  5 ;ALIP UZAKLIK DEĞİŞKENİNE ATAR ARDINDAN BİLGİ ALIŞ VERİŞİNİ
RETURN ;KAPATIR

bolanka

Teşekkür ederim. Açıkçası kaynak bilim ve teknik dergisi olunca insanın hata olacağına inanası gelmiyor. Ama dediğin gibi YESIL diye bir tanımlama yok. Bir de bu programı deneyim.