成員:411114226 江昀臻
作品介紹
外觀
3D建模
車子
遙控器
程式碼
車子:
#include <SoftwareSerial.h>
SoftwareSerial BT(10,11);
String BTcmd;
int A_1A=4;
int A_1B=5;
int B_1A=6;
int B_1B=7;
String cmdright="";
String cmdleft="";
int i=0;
int right;
int left;
void setup(){
Serial.begin(9600);
BT.begin(9600);
pinMode(A_1A,OUTPUT);
pinMode(A_1B,OUTPUT);
pinMode(B_1A,OUTPUT);
pinMode(B_1B,OUTPUT);
digitalWrite(A_1A,LOW);
digitalWrite(A_1B,LOW);
digitalWrite(B_1A,LOW);
digitalWrite(B_1B,LOW);
}
void loop()
{
translate();
if ((right>0)&&(left>0)) backJoystick();
else if ((right<0)&&(left<0)) goJoystick();
else if ((right<0)&&(left>0)) leftJoystick();
else if ((right>0)&&(left<0)) rightJoystick();
else stopcar();
Serial.println(right);
Serial.println(left);
Serial.flush();
right = 0;
left = 0;
delay(200);
}
//車子停止
void stopcar(){
digitalWrite(A_1A,LOW);
digitalWrite(A_1B,0);
digitalWrite(B_1A,LOW);
digitalWrite(B_1B,0);
}
//車子向前走
void goJoystick(){
digitalWrite(A_1A,HIGH);
analogWrite(A_1B,right);
digitalWrite(B_1A,HIGH);
analogWrite(B_1B,left);
}
//車子向後走
void backJoystick(){
digitalWrite(A_1A,LOW);
analogWrite(A_1B,right);
digitalWrite(B_1A,LOW);
analogWrite(B_1B,left);
}
//車子右轉
void leftJoystick(){
digitalWrite(A_1A,LOW);
analogWrite(A_1B,right);
digitalWrite(B_1A,HIGH);
analogWrite(B_1B,left);
}
//車子左轉
void rightJoystick(){
digitalWrite(A_1A,HIGH);
analogWrite(A_1B,right);
digitalWrite(B_1A,LOW);
analogWrite(B_1B,left);
}
void translate(){
while(true){
if (BT.available()){
BTcmd=BT.read()-48;
//Serial.println(BTcmd);
if ((BTcmd!="-4")&&(BTcmd!="27")&&(i==0)){
if (BTcmd=="-3"){
cmdright+="-";
}
else{
cmdright+=BTcmd;
}
//Serial.println(cmdright);
//Serial.println("a");
}
else if (BTcmd=="-4"){
i=1;
right = cmdright.toInt();
cmdright = "";
//Serial.println(BTcmd);
//Serial.println("b");
}
else if ((BTcmd!="-4")&&(BTcmd!="27")&&(i==1)){
if (BTcmd=="-3"){
cmdleft+="-";
}
else{
cmdleft+=BTcmd;
}
//Serial.println(BTcmd);
//Serial.println("c");
}
else if (BTcmd=="27"){
i=0;
left = cmdleft.toInt();
cmdleft = "";
//Serial.println(BTcmd);
//Serial.println("d");
break;
}
delay(20);
}
else stopcar();
}
if (right>250) right = 250;
if (right<-250) right = -250;
if (left>250) left = 250;
if (left<-250) left = -250;
}
遙控器:
#include <SoftwareSerial.h>
SoftwareSerial BT(10,11);
int D=7 ;
int buttonStateD=0;
int S=6 ;
int buttonStateS=0;
int W=5 ;
int buttonStateW=0;
int A=4 ;
int buttonStateA=0;
int xPin = A0; //X軸 接類比A0
int yPin = A1; //Y軸 接類比A1
int zPin = A2; //Z軸 接類比A2
int xval=0; //X軸變數
int yval=0; //Y軸變數
int zval=0; //Z軸變數
int right=0;
int left=0;
void setup() {
Serial.begin(9600);
pinMode(D,INPUT);
pinMode(S,INPUT);
pinMode(W,INPUT);
pinMode(A,INPUT);
BT.begin(9600);
Serial.println("ready");
}
void loop() {
xval = analogRead(xPin)+2; //讀取X軸數值到xval變數
xval = map(xval,0,1023,-255,255); //將數值轉換
yval = analogRead(yPin)-3; //讀取Y軸數值到yval變數
yval = map(yval,0,1023,255,-255); //將數值轉換
zval = analogRead(zPin); //讀取Z軸數值到zval變數
right = yval-xval;
left = yval+xval;
char buf[100];
char Char[100];
sprintf(buf, "VRx=%d, VRy=%d, SW=%d", xval, yval, zval);
//Serial.println(buf);
sprintf(Char, "%d,%dK", right, left);
//Serial.println(Char);
if ((right>20)||(left>20)||(right<-20)||(left<-20)){
BT.write(Char);
Serial.println(Char);
}
delay(300);
}
心得
我沒想到我要硬生生寫出一段程式!過程中我也發現我會的真的很少,要學的很多,從屬性、屬性的轉換、字串、判斷,很多都是現學現用。不過我覺得也很好,能在需要的時候透過網路找到資料並快速掌握,這是一項很實用的能力,當然如果平常有些累積會更好哈哈。
在寫得當下覺得我怎麼走上了這麼一條一定要自己寫的路,怎麼找不到其他方法(已經試過各種),寫完後覺得也就這樣,但現在覺得我還蠻厲害的嘛,整個邏輯都很不錯。
我想這段程式是我這次大升級的精隨也是我學到最多也最自豪的地方。🥳
成果展示