圓創力科技

 找回密碼
 立即註冊

QQ登錄

只需一步,快速開始

查看: 3865|回復: 11

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

  [複製鏈接]
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
老師您好~
是這樣子的,因為我們希望做出有記憶功能的魔法車子,那目前車子功能我們是用聲控去控制繼電器開關 ...

可以參考這個看看
 樓主| 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
老師請問一下~
                          該如何宣告一個變數?  因為我想要藉變數的值  經由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
老師是這樣子的~
                        目前我要宣告一個變數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
謝老師的分享~
                    但組合語言比較沒什麼接觸,不懂其中涵義,那老師您之前提到的"宣告兩個 ...

因為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--;    //    |
}      // <-+
}
}               
您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

QQ|Archiver|手機版|小黑屋|圓創力科技有限公司 IOP Robotic Technology Co.,Ltd Tel: 07-3924582 Fax: 07-3924001

GMT+8, 2024-11-23 18:35 , Processed in 0.020361 second(s), 17 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回復 返回頂部 返回列表