現在我的超音波自動煞車系統已經完成,不過我現在發現我的車子有一個很大的問題,所以我要進檢討。
首先我發現我最近車子板子常常傳不上去,所以我就做了一個實驗,看看是哪一快板子壞掉了,後來結果發現是最上面那一塊IOT Maker Board板傳不上去,不過只要把那一塊板子拔下後就可以了。但是,可是那塊板子在車子運行中一定要上去,所以這時就會有接觸不良的問題,常常跑到一半就斷掉了,然後卡在那裏不動,可是重新啟動獲等一下下後又恢復了!所以我決定要用一個最笨的方法,就是把板子上的每一個按鈕都試一次,最後結果發現是因為wify發送器打開,所以下面的板子沒有辦法跟IOT Maker Board板對話,也因此都傳不上去。
不過我目前在做我的最後一個程式,這個程式是藍芽操控系統+自動煞車系統,我現在目前這兩個程式都寫出來了,不過我不知道要如何用兩個迴圈,又加上我之前寫藍芽誠實,是用副程式寫的,所以城市一直顯示有BUG,也上傳不了,所以目前還正在思考中,而以下就是我把藍芽後自動煞車分開寫的程式:
l 藍芽控制
int EN1=6; //由腳位6控制左輪轉速
int EN2=5; //由腳位5控制右倫轉速
int IN1=7; //由腳位7控制左輪轉向
int IN2=4; //由腳位4控制右輪轉向
int
pwm=150; //預設轉速
void setup(){
int i;
for(i=4;i<=7;i++)
pinMode(i,OUTPUT); //4、5、6、7腳位設為輸出
Serial.begin(9600);
}
void loop() {
char c;
if(Serial.available()>0){ //判斷序列阜是否有資料輸入
c=Serial.read(); //讀取串列阜資料
switch(c){
case'w':
forward(1000); //呼叫前進的副程式
break;
case'a':
trunLeft(400); //呼叫左轉副程式
break;
case'd':
trunRight(400); //呼叫右轉副程式
break;
case'x':
backward(400); //呼叫後退的副程式
break;
case's':
stay(400);
break;
}
}
}
void forward(int
time){
analogWrite(EN1,pwm);
digitalWrite(IN1,HIGH);
analogWrite(EN2,pwm);
digitalWrite(IN2,HIGH);
delay(time);
}
void trunLeft(int
time){
analogWrite(EN1,pwm);
digitalWrite(IN1,LOW);
analogWrite(EN2,pwm);
digitalWrite(IN2,HIGH);
delay(time);
}
void
trunRight(int time){
analogWrite(EN1,pwm);
digitalWrite(IN1,HIGH);
analogWrite(EN2,pwm);
digitalWrite(IN2,LOW);
delay(time);
}
void
backward(int time){
analogWrite(EN1,pwm);
digitalWrite(IN1,LOW);
analogWrite(EN2,pwm);
digitalWrite(IN2,LOW);
delay(time);
}
void stay(int
time){
analogWrite(EN1,0);
analogWrite(EN2,0);
delay(time);
}
l 自動煞車
#include <SCoop.h>
l 自動煞車
#include <SCoop.h>
int _ABVAR_1_CM
= 0 ;
int
ardublockUltrasonicSensorCodeAutoGeneratedReturnCM(int trigPin, int echoPin)
{
long duration;
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(20);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
duration = duration / 59;
if ((duration < 2) || (duration > 300))
return false;
return duration;
}
void setup()
{
pinMode( 5 , OUTPUT);
pinMode( 7 , OUTPUT);
pinMode( 1 , OUTPUT);
mySCoop.start();
digitalWrite( 12 , LOW );
Serial.begin(9600);
pinMode( 4 , OUTPUT);
pinMode( 6 , OUTPUT);
}
void loop()
{
digitalWrite( 1 , HIGH );
yield();
}
defineTaskLoop(scoopTask10)
{
_ABVAR_1_CM = ardublockUltrasonicSensorCodeAutoGeneratedReturnCM( 12 , 13 ) ;
Serial.print("message");
Serial.print(" ");
Serial.print(_ABVAR_1_CM);
Serial.print(" ");
Serial.println();
if (( ( _ABVAR_1_CM ) < ( 20 ) ))
{
digitalWrite( 4 , LOW );
analogWrite(5 , 0);
digitalWrite( 6 , LOW );
analogWrite(7 , 0);
}
}
最後是我的車體,我目前做很慢,因為我還不熟悉整個介面,甚至連形體要如何翻轉都還不太熟悉,所以,目前只做出來整個車殼,至於要栓螺絲的地方,我打算要自己握出來後再鑽,因為我怕車體上所做的洞有錯,且自己鑽洞的速度較快,所以我印完之後還要自己鑽洞,因此我預估這個禮拜要做完8成,藍芽自動煞車系統也要趕快完成(其實也只剩下一些關於程式編排邏輯的東西),這樣我才能趕快做完發表的東西啊!!!
加油喔!我覺得我可能做不完
回覆刪除