機 器 車 介 紹 & 實做
使用軟體 arduino
環境安裝 控制台>裝置管理員 >更新驅動程式 C:\arduino-1.0.3-windows\arduino-1.0.3\drivers
資料型態(變數)
常用函數
測試 void setup(){ Serial.begin(9600); } void loop(){ Serial.print("hello@\n"); delay(1000);
腳位說明
LED 閃爍
int ledPin1=9; int ledPin2=10; void setup(){ pinMode(ledPin1,OUTPUT); pinMode(ledPin2,OUTPUT); pinMode(ledPin3,OUTPUT); } void loop(){ digitalWrite(ledPin1,HIGH); delay(500); digitalWrite(ledPin1,LOW); digitalWrite(ledPin2,HIGH); digitalWrite(ledPin2,LOW);
練習 請做出led同時閃爍
陣列(led右移) int ledpin[3]={10,9,8}; int j=0; int i=0; void setup(){ for(i=0;i<4;i++){ pinMode(ledpin[i],OUTPUT); } void loop() { for(j=0;j<4;j++){ digitalWrite(ledpin[j],HIGH); delay(500); digitalWrite(ledpin[j],LOW);
練習 陣列(led左移)
馬達控制 int servoPin1=12; //設定servoMotor1由12腳位控制 void setup(){ pinMode(servoPin1,OUTPUT); //12腳位為輸出 } void loop(){ for (int i=0;i<=120;i++){ //正向旋轉約三秒 digitalWrite(servoPin1,HIGH); delayMicroseconds(1300); digitalWrite(servoPin1,LOW); delay(20); } for (int i=0;i<=40;i++){ //靜止約一秒 delayMicroseconds(1500); for (int i=0;i<=120;i++){ //反向旋轉約三秒 delayMicroseconds(1700); delay(20); } } 馬達控制
車子往前 int servoPin1=13; //設定servoMotor1由12腳位控制 void setup(){ pinMode(servoPin1,OUTPUT); //設定12腳位為輸出 pinMode(servoPin2,OUTPUT); //設定13腳位為輸出 } void loop(){ digitalWrite(servoPin1,HIGH); delayMicroseconds(1300); digitalWrite(servoPin1,LOW); delay(20); digitalWrite(servoPin2,HIGH); delayMicroseconds(1700); digitalWrite(servoPin2,LOW); 車子往前
練習 試著做出右轉與左轉
這是右轉 for (int i=0;i<=40;i++){ //(這段程式執行40次大概1秒多) digitalWrite(servoPin1,HIGH); delayMicroseconds(1300); digitalWrite(servoPin1,LOW); delay(20); digitalWrite(servoPin2,HIGH); digitalWrite(servoPin2,LOW);
鍵盤控制 #include <Servo.h> Servo servo1; Servo servo2; void setup() { servo1.attach(12); servo2.attach(13); Serial.begin(9600); } void loop() char c; if (Serial.available () > 0) //判斷串列阜是否有資料傳入 c = Serial.read(); // 讀取串列阜資料
switch (c) { case '1': forward(400); //呼叫前進的副程式 break; case '2': trunLeft(400); //呼叫左轉的副程式 case '3': trunRight(400); //呼叫右轉的副程式 case '4': backward(400); //呼叫後退的副程式 case '5': bestop(400); //呼叫停止的副程式 }
void forward(int time){ //前進的副程式 servo1.write(1300); servo2.write(1700); delay(time); servo1.write(1500); servo2.write(1500); } void trunLeft(int time){ servo1.write(1700); void trunRight(int time){ //右轉的副程式 servo2.write(1300); void backward(int time){ //後退的副程式 servo1.write(1700); servo2.write(1300); delay(time); servo1.write(1500); servo2.write(1500); } void bestop(int time){ //停止的副程式 servo2.write(1500); delay(time); }
//光敏電阻測試程式 int photoresistorPin1=10; //設定photoresistor1腳位 int photoresistorPin2=9; //設photoresistor2腳位 int x; int y; void setup(){ pinMode(photoresistorPin1,INPUT); //設定6腳位為輸入 pinMode(photoresistorPin2,INPUT); //設定2腳位為輸入 Serial.begin(9600); } void loop(){ Serial.println("Photoresistor States"); x=digitalRead(photoresistorPin1); //讀取左邊光敏電阻 y=digitalRead(photoresistorPin2); //讀取右邊光敏電阻 Serial.print("P6="); //顯示光敏電阻狀態至螢幕 Serial.println(x,BIN); Serial.print("P2="); Serial.println(y,BIN); delay(1000);}
光敏當開關讓車子前進 #include <Servo.h> // 引用 Servo Library Servo servo1; // 建立Servo 物件 Servo servo2; int photoresistorPin1=2; //設定photoresistor1腳位 int photoresistorPin2=11; //設photoresistor2腳位 int x; int y; void setup(){ pinMode(photoresistorPin1,INPUT); //設定6腳位為輸入 pinMode(photoresistorPin2,INPUT); //設定2腳位為輸入 servo1.attach(13); servo2.attach(12); Serial.begin(9600); } void loop(){ Serial.println("Photoresistor States"); x=digitalRead(photoresistorPin1); //讀取左邊光敏電阻 y=digitalRead(photoresistorPin2); //讀取右邊光敏電阻 Serial.print("P6="); //顯示光敏電阻狀態至螢幕 Serial.println(x,BIN); Serial.print("P2="); Serial.println(y,BIN); delay(100);
int forward(){ //前進的副程式 servo1.write(1300); servo2.write(1700); delay(1000); } int trunLeft(){ //左轉副程式 servo1.write(1700); delay(400); } int trunRight(){ //右轉的副程式 servo2.write(1300); delay(400); } int stop(){ //後退的副程式 servo1.write(1500); servo2.write(1500); delay(1000); } if (x==1&y==1 ){ forward(); } else if(y==0&x==1){ trunLeft(); else if(y==1&x==0){ trunRight(); else{ stop();
觸鬚碰撞
int whiskerPin1=9; int whiskerPin2=5; int x; int y; void setup(){ pinMode(whiskerPin1,INPUT); pinMode(whiskerPin2,INPUT); Serial.begin(9600); } void loop(){ Serial.println("whisker States"); x=digitalRead(whiskerPin1); y=digitalRead(whiskerPin2); Serial.print("P9="); Serial.println(x,BIN); Serial.print("P5="); Serial.println(y,BIN); delay(1000);}
挑戰! 參考用光敏電阻讓車子前進的例子 1.車子在沒撞到東西前會不斷前進 1.做出撞到右邊觸角後,後退一秒往右轉 2.做出撞到左邊觸角後,後退一秒往左轉 3.兩邊觸角都撞到停止移動
#include <Servo.h> // 引用 Servo Library Servo servo1; // 建立Servo 物件 Servo servo2; int whiskerPin1=9; int whiskerPin2=5; int x; int y; void setup(){ pinMode(whiskerPin1,INPUT); pinMode(whiskerPin2,INPUT); servo1.attach(13); servo2.attach(12); Serial.begin(9600); } void loop(){ Serial.println("whisker States"); x=digitalRead(whiskerPin1); y=digitalRead(whiskerPin2); Serial.print("P9="); Serial.println(x,BIN); Serial.print("P5="); Serial.println(y,BIN); delay(10); if (x==1&y==1 ){ forward(); } else if(y==0&x==1){ backward(); trunRight(); else if(y==1&x==0){ trunLeft(); else{ stop();
int forward(){ //前進的副程式 servo1.write(1300); servo2.write(1700); delay(1000); } int trunLeft(){ //左轉副程式 servo1.write(1700); delay(900); } int trunRight(){ //右轉的副程式 servo2.write(1300); delay(900); } int backward(){ //後退的副程式 delay(1000); } int stop(){ //後退的副程式 servo1.write(1500); servo2.write(1500);