student 發表於 2011-10-24 00:41

魔法車左右閃避記憶功能~~

老師請問一下~車子可以撰寫成記憶功能的程式麻?
就像是走迷宮一樣,但不用很複雜,能走出簡單的迷宮。

magiccar 發表於 2011-10-24 08:36

那就要看你的迷宮簡單的程度囉,簡單的迷宮用數位邏輯閘IC組合就能解出,不簡單的就需要微處理機用程式規劃比較適用。當然,使用足夠的感測器也能讓機器人加速解出迷宮喔。

student 發表於 2011-10-26 01:18

老師您好~
是這樣子的,因為我們希望做出有記憶功能的魔法車子,那目前車子功能我們是用聲控去控制繼電器開關,也能左右閃避,
只是記憶功能這部份我們不知道如何下手,我們是希望透過IC來寫程式去規劃,麻煩老師多給我們指教^^
(目前設備有4條紅外線)

magiccar 發表於 2011-10-26 01:43

student 發表於 2011-10-26 01:18 static/image/common/back.gif
老師您好~
是這樣子的,因為我們希望做出有記憶功能的魔法車子,那目前車子功能我們是用聲控去控制繼電器開關 ...

可以參考這個看看

student 發表於 2011-10-26 10:52

請教周老師:
                      謝謝老師提供的資料,可以請教老師有關於程式的部分該如何下手麻?
               

student 發表於 2011-12-10 13:22

本帖最後由 student 於 2011-12-10 13:24 編輯

老師請問一下~
                        該如何宣告一個變數?因為我想要藉變數的值經由push 呼叫副程式 把值帶進去到陣列裡。

magiccar 發表於 2011-12-10 19:50

student 發表於 2011-12-10 13:22 static/image/common/back.gif
老師請問一下~
                        該如何宣告一個變數?因為我想要藉變數的值經由push 呼叫副 ...

最簡單的方法是宣告兩個全域變數,一個當堆疊指標,另一個宣告成陣列來存資料,不過你用是那一種晶片及語言呢?

student 發表於 2011-12-12 15:50

老師是這樣子的~
                        目前我要宣告一個變數sum 來當坐陣列存放資料
                         {
                        if (P1_3==1);   //紅外線右側感測到東西
                           sum=1;
                           push(sum);
                        }else{
                           if (P1_4==1);//紅外線左側感測到東西
                           sum=2;
                           push(sum);
                         }
                        功能是 左轉存入資料 1右轉存入資料2
                        但sum 我打成void int( unsigned sum ); 這部分我知道錯誤 但不知怎宣告
                        我是用AT89c4051使用keil_c語言
                        麻煩老師指點~謝謝

magiccar 發表於 2011-12-13 00:09

student 發表於 2011-12-12 15:50 static/image/common/back.gif
老師是這樣子的~
                        目前我要宣告一個變數sum 來當坐陣列存放資料
                  ...

C語言我用得不多,但找到一篇文章,你可以參考看看:
PUSH and POP in Keil C

student 發表於 2011-12-14 14:10

謝老師的分享~
                  但組合語言比較沒什麼接觸,不懂其中涵義,那老師您之前提到的"宣告兩個全域變數",該如何去宣告呢??

magiccar 發表於 2011-12-20 00:05

student 發表於 2011-12-14 14:10 static/image/common/back.gif
謝老師的分享~
                  但組合語言比較沒什麼接觸,不懂其中涵義,那老師您之前提到的"宣告兩個 ...

因為C語言我用得不多,建議你從C語言基本概念中的變數的宣告及變數的生命週期再複習一次吧!

student 發表於 2012-3-14 21:52

周老師您好
在使用自走車上有遇到一個問題想詢問老師幫忙解決,以下是我們的程式碼,程式run是對的都沒有出現錯誤,但是有時候在自走車偵測到障礙物時候,relay會因為偵測到障礙物而發出連續好幾聲的聲響,然後就斷電了,必須要再次聽到聲音,車子才會啟動,可是正常應該是不會這樣子,是紅外線偵測太敏感麻?還是其他因素,尋求黃教授的幫忙~謝謝您。

#include <AT89x051.h>
void delay(unsigned char tmp); //宣告延時函數
void main(void)    //主程式開始
{

P3_0=1;    //啟始輸入功能
P1_2=0;    //關閉繼電器
while(1)   //無限循環
{
   
   
   if ((P1_3==0) && (P1_1==1))//右前方無障礙物 或 右下有障礙
   {
      P1_4=0;           //左輪前進
   } else {
           P1_4=1;          //左輪反轉
   }

   if ((P1_5==0) && (P3_7==1))//左前方無障礙物或        左下有障礙
   {
           P1_6=0;   //右輪前進
   }else {
                P1_6=1;          //右輪反轉
   }


   P1_7=~P1_2;//LED顯示繼電器狀態
   if(P3_0==0) //當有聲音時
{
   P1_2=~P1_2; //繼電器 on-off 切換
   delay(10); //等待一段時間
   }

}
}
void delay(unsigned char tmp) //延時函數
{   //改變參數大小,可調整時間
unsigned char i,j;   //宣告使用到的變數
i=tmp;      //把呼叫程式式中的參數指定給變數i
while(i)   //只要i不為0,
{      //就執行{...}中的指令
i--;   //把i值減1
j=255;   // <-+
while(j)    //    |
{      // 用j值讓程式執行256次的迴圈,到延時效果
       j--;    //  |
}      // <-+
}
}               
頁: [1]
查看完整版本: 魔法車左右閃避記憶功能~~