三路循跡&避障(紅色字的部分)
搭配 shsps_BT_car的APP(低速、中速、快速)
#include <SoftwareSerial.h>
SoftwareSerial BT(0,1); // 接收腳(RX), 傳送腳(TX);接HC-06之TXD、RXD;先不要用0,1,因為USB用
const int SRightRight = 2; //右紅外線感測器輸入腳
const int SMiddle = 3; //中間感測器輸入腳
const int SLeftLeft = 4; //左紅外線感測器輸入腳
const int ena = 5; //控制馬達轉速(L298N)
const int enb = 6; //控制馬達轉速(L298N)
const int motorIn1 = 7; //控制馬達正反轉(L298N)
const int motorIn2 = 8; //控制馬達正反轉(L298N)
const int motorIn3 = 9; //控制馬達正反轉(L298N)
const int motorIn4 = 10; //控制馬達正反轉(L298N)
int SLL; //左感測器狀態
int SM; //中感測器狀態
int SRR; //右感測器狀態
char val; // variable to receive data from the serial port(bluetooth)
int power; //馬達轉速 (0~255)
byte sw=1,flag=1;
byte sw2=1,flag2=1;
byte byteSensorStatus=0;
float getDistance(int trig,int echo){
pinMode(trig,OUTPUT);
digitalWrite(trig,LOW);
delayMicroseconds(2);
digitalWrite(trig,HIGH);
delayMicroseconds(10);
pinMode(echo, INPUT);
return pulseIn(echo,HIGH,30000)/58.0;
}
void setup()
{
// Serial.begin(9600);
BT.begin(9600);
pinMode(SLeftLeft, INPUT);
pinMode(SMiddle, INPUT);
pinMode(SRightRight, INPUT);
pinMode(ena, OUTPUT);
pinMode(enb, OUTPUT);
pinMode(motorIn1, OUTPUT);
pinMode(motorIn2, OUTPUT);
pinMode(motorIn3, OUTPUT);
pinMode(motorIn4, OUTPUT);
power=150;
flag = 1;
sw2 = 1;
sw = 1;
flag2 = 1;
}
void loop()
{
if(sw==0 && flag==0)
{
byteSensorStatus = 0; // 讀取感測器狀態值
SLL = digitalRead(SLeftLeft); // 讀取左感測器狀態值
if(SLL == 1)
byteSensorStatus = (byteSensorStatus | (0x01 << 2));
SM = digitalRead(SMiddle);
if(SM == 1)
byteSensorStatus = (byteSensorStatus | (0x01 << 1));
SRR = digitalRead(SRightRight); // 讀取右感測器狀態值
if(SRR == 1)
byteSensorStatus = (byteSensorStatus | 0x01);
drivemotor(byteSensorStatus);
}
if((((sw2)==(0))) & (((flag2)==(0)))){
if((getDistance(13,12)) < (15)){
backward();;
delay(1000*0.5);
if(((1)==(random(0,1)))){
left();
}else{
right();
}
delay(1000*0.5);
}
forward();
}
if(BT.available() ) {
val=BT.read();
switch(val)
{
case 'f': // car forward
forward();
break;
case 'b': // car backward
backward();
break;
case 'l': // car turn left
left();
break;
case 'r': // car turn right
right();
break;
case 's': // car stop
motorstop();
flag=1;
flag2 = 1;
break;
case 'x' :
lowspeed();
break;
case 'y' :
midspeed();
break;
case 'z' :
highspeed();
break;
case 't' :
{
if(sw==0)
{
sw=1;
}
if(sw==1)
{
sw=0;
flag=0;
}
break;
case 'n' :
if(((sw2)==(0))){
sw2 = 1;
}
if(((sw2)==(1))){
sw2 = 0;
flag2 = 0;
}
break;
}
}
}
}
void motorstop()
{
digitalWrite(motorIn1, LOW);
digitalWrite(motorIn2, LOW);
digitalWrite(motorIn3, LOW);
digitalWrite(motorIn4, LOW);
analogWrite(ena,power);//0停止;值介於40-255
analogWrite(enb,power);//0停止;值介於40-255
}
void forward()
{
digitalWrite(motorIn1, LOW);
digitalWrite(motorIn2, HIGH);
digitalWrite(motorIn3, LOW);
digitalWrite(motorIn4, HIGH);
analogWrite(ena,power);//0停止;值介於40-255
analogWrite(enb,power);//0停止;值介於40-255
}
void backward()
{
digitalWrite(motorIn1, HIGH);
digitalWrite(motorIn2, LOW);
digitalWrite(motorIn3, HIGH);
digitalWrite(motorIn4, LOW);
analogWrite(ena,power);//0停止;值介於40-255
analogWrite(enb,power);//0停止;值介於40-255
}
// Let right motor keep running, but stop left motor
void right()
{
digitalWrite(motorIn1, LOW);
digitalWrite(motorIn2, LOW);
digitalWrite(motorIn3, LOW);
digitalWrite(motorIn4, HIGH);
analogWrite(ena,power);//0停止;值介於40-255
analogWrite(enb,power);//0停止;值介於40-255
}
// Let left motor keep running, but stop right motor
void left()
{
digitalWrite(motorIn1, LOW);
digitalWrite(motorIn2, HIGH);
digitalWrite(motorIn3, LOW);
digitalWrite(motorIn4, LOW);
analogWrite(ena,power);//0停止;值介於40-255
analogWrite(enb,power);//0停止;值介於40-255
}
void lowspeed(){
power=90;
}
void midspeed(){
power=130;
}
void highspeed(){
power=200;
}
void drivemotor(byte nStatus){
switch(nStatus)
{ // 感測器黑色:1 (亮紅燈) 白色:0
case 0: // SL:0 SR:0 //白白
forward() ;
break;
case 1: // SL:0 SR:1 // 白黑
left();
break;
case 2: // SL:0 SR:1 //黑白
motorstop();
break;
case 3: // SL:1 SR:1 // 黑黑
left();
break;
case 4: // SL:0 SR:1 // 白黑
right();
break;
case 5: // SL:0 SR:1 //黑白
forward() ;
break;
case 6: // SL:1 SR:1 // 黑黑
right();
break;
case 7: // SL:1 SR:1 // 黑黑
motorstop();
break;
}
}
============================
三路循跡&避障(紅色字的部分)
搭配 shsps_BT_car2的APP(左輪+-、雙輪+-、右輪+-)
#include <SoftwareSerial.h>
SoftwareSerial BT(0,1); // 接收腳(RX), 傳送腳(TX);接HC-06之TXD、RXD;先不要用0,1,因為USB用
const int SRightRight = 2; //右紅外線感測器輸入腳
const int SMiddle = 3; //中間感測器輸入腳
const int SLeftLeft = 4; //左紅外線感測器輸入腳
const int ena = 5; //控制馬達轉速(L298N)
const int enb = 6; //控制馬達轉速(L298N)
const int motorIn1 = 7; //控制馬達正反轉(L298N)
const int motorIn2 = 8; //控制馬達正反轉(L298N)
const int motorIn3 = 9; //控制馬達正反轉(L298N)
const int motorIn4 = 10; //控制馬達正反轉(L298N)
int SLL; //左感測器狀態
int SM; //中感測器狀態
int SRR; //右感測器狀態
char val; // variable to receive data from the serial port(bluetooth)
//int power; //馬達轉速 (0~255)
double rpower;
double lpower;
byte sw=1,flag=1;
byte sw2=1,flag2=1;
byte byteSensorStatus=0;
float getDistance(int trig,int echo){
pinMode(trig,OUTPUT);
digitalWrite(trig,LOW);
delayMicroseconds(2);
digitalWrite(trig,HIGH);
delayMicroseconds(10);
pinMode(echo, INPUT);
return pulseIn(echo,HIGH,30000)/58.0;
}
void setup()
{
// Serial.begin(9600);
BT.begin(9600);
pinMode(SLeftLeft, INPUT);
pinMode(SMiddle, INPUT);
pinMode(SRightRight, INPUT);
pinMode(ena, OUTPUT);
pinMode(enb, OUTPUT);
pinMode(motorIn1, OUTPUT);
pinMode(motorIn2, OUTPUT);
pinMode(motorIn3, OUTPUT);
pinMode(motorIn4, OUTPUT);
//power=150;
lpower = 200;
rpower = 200;
flag = 1;
sw2 = 1;
sw = 1;
flag2 = 1;
}
void loop()
{
if(sw==0 && flag==0)
{
byteSensorStatus = 0; // 讀取感測器狀態值
SLL = digitalRead(SLeftLeft); // 讀取左感測器狀態值
if(SLL == 1)
byteSensorStatus = (byteSensorStatus | (0x01 << 2));
SM = digitalRead(SMiddle);
if(SM == 1)
byteSensorStatus = (byteSensorStatus | (0x01 << 1));
SRR = digitalRead(SRightRight); // 讀取右感測器狀態值
if(SRR == 1)
byteSensorStatus = (byteSensorStatus | 0x01);
drivemotor(byteSensorStatus);
}
if((((sw2)==(0))) & (((flag2)==(0)))){
if((getDistance(13,12)) < (15)){
backward();;
delay(1000*0.5);
if(((1)==(random(0,1)))){
left();
}else{
right();
}
delay(1000*0.5);
}
forward();
}
if(BT.available() ) {
val=BT.read();
switch(val)
{
case 'f': // car forward
forward();
break;
case 'b': // car backward
backward();
break;
case 'l': // car turn left
left();
break;
case 'r': // car turn right
right();
break;
case 's': // car stop
motorstop();
flag=1;
flag2 = 1;
break;
case 'q' :
if((lpower) < (255)){
lpower += 5;
}
break;
case 'w' :
if((lpower) < (255)){
lpower += 5;
}
if((rpower) < (255)){
rpower += 5;
}
break;
case 'e' :
if((rpower) < (255)){
rpower += 5;
}
break;
case 'z' :
if((lpower) > (0)){
lpower += -5;
}
break;
case 'x' :
if((rpower) > (0)){
lpower += -5;
}
if((rpower) > (0)){
rpower += -5;
}
break;
case 'c' :
if((rpower) > (0)){
rpower += -5;
}
break;
case 't' :
{
if(sw==0)
{
sw=1;
}
if(sw==1)
{
sw=0;
flag=0;
}
break;
case 'n' :
if(((sw2)==(0))){
sw2 = 1;
}
if(((sw2)==(1))){
sw2 = 0;
flag2 = 0;
}
break;
}
}
}
}
void motorstop()
{
digitalWrite(motorIn1, LOW);
digitalWrite(motorIn2, LOW);
digitalWrite(motorIn3, LOW);
digitalWrite(motorIn4, LOW);
analogWrite(ena,0);//0停止;值介於40-255
analogWrite(enb,0);//0停止;值介於40-255
}
void forward()
{
digitalWrite(motorIn1, LOW);
digitalWrite(motorIn2, HIGH);
digitalWrite(motorIn3, LOW);
digitalWrite(motorIn4, HIGH);
analogWrite(ena,rpower);//0停止;值介於40-255
analogWrite(enb,lpower);//0停止;值介於40-255
}
void backward()
{
digitalWrite(motorIn1, HIGH);
digitalWrite(motorIn2, LOW);
digitalWrite(motorIn3, HIGH);
digitalWrite(motorIn4, LOW);
analogWrite(ena,rpower);//0停止;值介於40-255
analogWrite(enb,lpower);//0停止;值介於40-255
}
// Let right motor keep running, but stop left motor
void right()
{
digitalWrite(motorIn1, LOW);
digitalWrite(motorIn2, LOW);
digitalWrite(motorIn3, LOW);
digitalWrite(motorIn4, HIGH);
analogWrite(ena,rpower);//0停止;值介於40-255
analogWrite(enb,lpower);//0停止;值介於40-255
}
// Let left motor keep running, but stop right motor
void left()
{
digitalWrite(motorIn1, LOW);
digitalWrite(motorIn2, HIGH);
digitalWrite(motorIn3, LOW);
digitalWrite(motorIn4, LOW);
analogWrite(ena,rpower);//0停止;值介於40-255
analogWrite(enb,lpower);//0停止;值介於40-255
}
void drivemotor(byte nStatus){
switch(nStatus)
{ // 感測器黑色:1 (亮紅燈) 白色:0
case 0: // SL:0 SR:0 //白白
forward() ;
break;
case 1: // SL:0 SR:1 // 白黑
left();
break;
case 2: // SL:0 SR:1 //黑白
motorstop();
break;
case 3: // SL:1 SR:1 // 黑黑
left();
break;
case 4: // SL:0 SR:1 // 白黑
right();
break;
case 5: // SL:0 SR:1 //黑白
forward() ;
break;
case 6: // SL:1 SR:1 // 黑黑
right();
break;
case 7: // SL:1 SR:1 // 黑黑
motorstop();
break;
}
}
============================
三路循跡&避障(紅色字的部分)
搭配 shsps_BT_car2的APP(左輪+-、雙輪+-、右輪+-)
+LCD顯示左右速度(在Arduino上)
#include <SoftwareSerial.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
SoftwareSerial BT(0,1); // 接收腳(RX), 傳送腳(TX);接HC-06之TXD、RXD;先不要用0,1,因為USB用
const int SRightRight = 2; //右紅外線感測器輸入腳
const int SMiddle = 3; //中間感測器輸入腳
const int SLeftLeft = 4; //左紅外線感測器輸入腳
const int ena = 5; //控制馬達轉速(L298N)
const int enb = 6; //控制馬達轉速(L298N)
const int motorIn1 = 7; //控制馬達正反轉(L298N)
const int motorIn2 = 8; //控制馬達正反轉(L298N)
const int motorIn3 = 9; //控制馬達正反轉(L298N)
const int motorIn4 = 10; //控制馬達正反轉(L298N)
int SLL; //左感測器狀態
int SM; //中感測器狀態
int SRR; //右感測器狀態
char val; // variable to receive data from the serial port(bluetooth)
//int power; //馬達轉速 (0~255)
double rpower;
double lpower;
byte sw=1,flag=1;
byte sw2=1,flag2=1;
byte byteSensorStatus=0;
float getDistance(int trig,int echo){
pinMode(trig,OUTPUT);
digitalWrite(trig,LOW);
delayMicroseconds(2);
digitalWrite(trig,HIGH);
delayMicroseconds(10);
pinMode(echo, INPUT);
return pulseIn(echo,HIGH,30000)/58.0;
}
void setup()
{
// Serial.begin(9600);
BT.begin(9600);
pinMode(SLeftLeft, INPUT);
pinMode(SMiddle, INPUT);
pinMode(SRightRight, INPUT);
pinMode(ena, OUTPUT);
pinMode(enb, OUTPUT);
pinMode(motorIn1, OUTPUT);
pinMode(motorIn2, OUTPUT);
pinMode(motorIn3, OUTPUT);
pinMode(motorIn4, OUTPUT);
//power=150;
lpower = 200;
rpower = 200;
flag = 1;
sw2 = 1;
sw = 1;
flag2 = 1;
lcd.init();
lcd.backlight();
}
void loop()
{
lcd.clear();
lcd.print("Right: ");
lcd.print(rpower);
lcd.setCursor(1, 1);
lcd.print("Left: ");
lcd.print(lpower);
delay(100);
if(sw==0 && flag==0)
{
byteSensorStatus = 0; // 讀取感測器狀態值
SLL = digitalRead(SLeftLeft); // 讀取左感測器狀態值
if(SLL == 1)
byteSensorStatus = (byteSensorStatus | (0x01 << 2));
SM = digitalRead(SMiddle);
if(SM == 1)
byteSensorStatus = (byteSensorStatus | (0x01 << 1));
SRR = digitalRead(SRightRight); // 讀取右感測器狀態值
if(SRR == 1)
byteSensorStatus = (byteSensorStatus | 0x01);
drivemotor(byteSensorStatus);
}
if((((sw2)==(0))) & (((flag2)==(0)))){
if((getDistance(13,12)) < (15)){
backward();;
delay(1000*0.5);
if(((1)==(random(0,1)))){
left();
}else{
right();
}
delay(1000*0.5);
}
forward();
}
if(BT.available() ) {
val=BT.read();
switch(val)
{
case 'f': // car forward
forward();
break;
case 'b': // car backward
backward();
break;
case 'l': // car turn left
left();
break;
case 'r': // car turn right
right();
break;
case 's': // car stop
motorstop();
flag=1;
flag2 = 1;
break;
case 'q' :
if((lpower) < (255)){
lpower += 5;
}
break;
case 'w' :
if((lpower) < (255)){
lpower += 5;
}
if((rpower) < (255)){
rpower += 5;
}
break;
case 'e' :
if((rpower) < (255)){
rpower += 5;
}
break;
case 'z' :
if((lpower) > (0)){
lpower += -5;
}
break;
case 'x' :
if((rpower) > (0)){
lpower += -5;
}
if((rpower) > (0)){
rpower += -5;
}
break;
case 'c' :
if((rpower) > (0)){
rpower += -5;
}
break;
case 't' :
{
if(sw==0)
{
sw=1;
}
if(sw==1)
{
sw=0;
flag=0;
}
break;
case 'n' :
if(((sw2)==(0))){
sw2 = 1;
}
if(((sw2)==(1))){
sw2 = 0;
flag2 = 0;
}
break;
}
}
}
}
void motorstop()
{
digitalWrite(motorIn1, LOW);
digitalWrite(motorIn2, LOW);
digitalWrite(motorIn3, LOW);
digitalWrite(motorIn4, LOW);
analogWrite(ena,0);//0停止;值介於40-255
analogWrite(enb,0);//0停止;值介於40-255
}
void forward()
{
digitalWrite(motorIn1, LOW);
digitalWrite(motorIn2, HIGH);
digitalWrite(motorIn3, LOW);
digitalWrite(motorIn4, HIGH);
analogWrite(ena,rpower);//0停止;值介於40-255
analogWrite(enb,lpower);//0停止;值介於40-255
}
void backward()
{
digitalWrite(motorIn1, HIGH);
digitalWrite(motorIn2, LOW);
digitalWrite(motorIn3, HIGH);
digitalWrite(motorIn4, LOW);
analogWrite(ena,rpower);//0停止;值介於40-255
analogWrite(enb,lpower);//0停止;值介於40-255
}
// Let right motor keep running, but stop left motor
void right()
{
digitalWrite(motorIn1, LOW);
digitalWrite(motorIn2, LOW);
digitalWrite(motorIn3, LOW);
digitalWrite(motorIn4, HIGH);
analogWrite(ena,rpower);//0停止;值介於40-255
analogWrite(enb,lpower);//0停止;值介於40-255
}
// Let left motor keep running, but stop right motor
void left()
{
digitalWrite(motorIn1, LOW);
digitalWrite(motorIn2, HIGH);
digitalWrite(motorIn3, LOW);
digitalWrite(motorIn4, LOW);
analogWrite(ena,rpower);//0停止;值介於40-255
analogWrite(enb,lpower);//0停止;值介於40-255
}
void drivemotor(byte nStatus){
switch(nStatus)
{ // 感測器黑色:1 (亮紅燈) 白色:0
case 0: // SL:0 SR:0 //白白
forward() ;
break;
case 1: // SL:0 SR:1 // 白黑
left();
break;
case 2: // SL:0 SR:1 //黑白
motorstop();
break;
case 3: // SL:1 SR:1 // 黑黑
left();
break;
case 4: // SL:0 SR:1 // 白黑
right();
break;
case 5: // SL:0 SR:1 //黑白
forward() ;
break;
case 6: // SL:1 SR:1 // 黑黑
right();
break;
case 7: // SL:1 SR:1 // 黑黑
motorstop();
break;
}
}
==========================================
三路循跡&避障(紅色字的部分)
搭配 shsps_BT_car3的APP(左輪+-、雙輪+-、右輪+-)
+LCD顯示左右輪速度(在Arduino上)
+在手機上顯示左右輪速度 (最主要是紫色那兩行)
#include <SoftwareSerial.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F,16,2);
SoftwareSerial BT(0,1); // 接收腳(RX), 傳送腳(TX);接HC-06之TXD、RXD;先不要用0,1,因為USB用
const int SRightRight = 2; //右紅外線感測器輸入腳
const int SMiddle = 3; //中間感測器輸入腳
const int SLeftLeft = 4; //左紅外線感測器輸入腳
const int ena = 5; //控制馬達轉速(L298N)
const int enb = 6; //控制馬達轉速(L298N)
const int motorIn1 = 7; //控制馬達正反轉(L298N)
const int motorIn2 = 8; //控制馬達正反轉(L298N)
const int motorIn3 = 9; //控制馬達正反轉(L298N)
const int motorIn4 = 10; //控制馬達正反轉(L298N)
int SLL; //左感測器狀態
int SM; //中感測器狀態
int SRR; //右感測器狀態
char val; // variable to receive data from the serial port(bluetooth)
//int power; //馬達轉速 (0~255)
double rpower;
double lpower;
byte sw=1,flag=1;
byte sw2=1,flag2=1;
byte byteSensorStatus=0;
float getDistance(int trig,int echo){
pinMode(trig,OUTPUT);
digitalWrite(trig,LOW);
delayMicroseconds(2);
digitalWrite(trig,HIGH);
delayMicroseconds(10);
pinMode(echo, INPUT);
return pulseIn(echo,HIGH,30000)/58.0;
}
void setup()
{
// Serial.begin(9600);
BT.begin(9600);
pinMode(SLeftLeft, INPUT);
pinMode(SMiddle, INPUT);
pinMode(SRightRight, INPUT);
pinMode(ena, OUTPUT);
pinMode(enb, OUTPUT);
pinMode(motorIn1, OUTPUT);
pinMode(motorIn2, OUTPUT);
pinMode(motorIn3, OUTPUT);
pinMode(motorIn4, OUTPUT);
//power=150;
lpower = 200;
rpower = 200;
flag = 1;
sw2 = 1;
sw = 1;
flag2 = 1;
lcd.init();
lcd.backlight();
}
void loop()
{
BT.println((lpower*1000+rpower)/1000,3);
//因為一次只能傳一個值,所以將兩者整合,3是算到小數第3位)
delay(100);
lcd.clear();
lcd.print("Right: ");
lcd.print(rpower);
lcd.setCursor(1, 1);
lcd.print("Left: ");
lcd.print(lpower);
delay(100);
if(sw==0 && flag==0)
{
byteSensorStatus = 0; // 讀取感測器狀態值
SLL = digitalRead(SLeftLeft); // 讀取左感測器狀態值
if(SLL == 1)
byteSensorStatus = (byteSensorStatus | (0x01 << 2));
SM = digitalRead(SMiddle);
if(SM == 1)
byteSensorStatus = (byteSensorStatus | (0x01 << 1));
SRR = digitalRead(SRightRight); // 讀取右感測器狀態值
if(SRR == 1)
byteSensorStatus = (byteSensorStatus | 0x01);
drivemotor(byteSensorStatus);
}
if((((sw2)==(0))) & (((flag2)==(0)))){
if((getDistance(13,12)) < (15)){
backward();;
delay(1000*0.5);
if(((1)==(random(0,1)))){
left();
}else{
right();
}
delay(1000*0.5);
}
forward();
}
if(BT.available() ) {
val=BT.read();
switch(val)
{
case 'f': // car forward
forward();
break;
case 'b': // car backward
backward();
break;
case 'l': // car turn left
left();
break;
case 'r': // car turn right
right();
break;
case 's': // car stop
motorstop();
flag=1;
flag2 = 1;
break;
case 'q' :
if((lpower) < (255)){
lpower += 5;
}
break;
case 'w' :
if((lpower) < (255)){
lpower += 5;
}
if((rpower) < (255)){
rpower += 5;
}
break;
case 'e' :
if((rpower) < (255)){
rpower += 5;
}
break;
case 'z' :
if((lpower) > (0)){
lpower += -5;
}
break;
case 'x' :
if((rpower) > (0)){
lpower += -5;
}
if((rpower) > (0)){
rpower += -5;
}
break;
case 'c' :
if((rpower) > (0)){
rpower += -5;
}
break;
case 't' :
{
if(sw==0)
{
sw=1;
}
if(sw==1)
{
sw=0;
flag=0;
}
break;
case 'n' :
if(((sw2)==(0))){
sw2 = 1;
}
if(((sw2)==(1))){
sw2 = 0;
flag2 = 0;
}
break;
}
}
}
}
void motorstop()
{
digitalWrite(motorIn1, LOW);
digitalWrite(motorIn2, LOW);
digitalWrite(motorIn3, LOW);
digitalWrite(motorIn4, LOW);
analogWrite(ena,0);//0停止;值介於40-255
analogWrite(enb,0);//0停止;值介於40-255
}
void forward()
{
digitalWrite(motorIn1, LOW);
digitalWrite(motorIn2, HIGH);
digitalWrite(motorIn3, LOW);
digitalWrite(motorIn4, HIGH);
analogWrite(ena,rpower);//0停止;值介於40-255
analogWrite(enb,lpower);//0停止;值介於40-255
}
void backward()
{
digitalWrite(motorIn1, HIGH);
digitalWrite(motorIn2, LOW);
digitalWrite(motorIn3, HIGH);
digitalWrite(motorIn4, LOW);
analogWrite(ena,rpower);//0停止;值介於40-255
analogWrite(enb,lpower);//0停止;值介於40-255
}
// Let right motor keep running, but stop left motor
void right()
{
digitalWrite(motorIn1, LOW);
digitalWrite(motorIn2, LOW);
digitalWrite(motorIn3, LOW);
digitalWrite(motorIn4, HIGH);
analogWrite(ena,rpower);//0停止;值介於40-255
analogWrite(enb,lpower);//0停止;值介於40-255
}
// Let left motor keep running, but stop right motor
void left()
{
digitalWrite(motorIn1, LOW);
digitalWrite(motorIn2, HIGH);
digitalWrite(motorIn3, LOW);
digitalWrite(motorIn4, LOW);
analogWrite(ena,rpower);//0停止;值介於40-255
analogWrite(enb,lpower);//0停止;值介於40-255
}
void drivemotor(byte nStatus){
switch(nStatus)
{ // 感測器黑色:1 (亮紅燈) 白色:0
case 0: // SL:0 SR:0 //白白
forward() ;
break;
case 1: // SL:0 SR:1 // 白黑
left();
break;
case 2: // SL:0 SR:1 //黑白
motorstop();
break;
case 3: // SL:1 SR:1 // 黑黑
left();
break;
case 4: // SL:0 SR:1 // 白黑
right();
break;
case 5: // SL:0 SR:1 //黑白
forward() ;
break;
case 6: // SL:1 SR:1 // 黑黑
right();
break;
case 7: // SL:1 SR:1 // 黑黑
motorstop();
break;
}
}
並將App Inventor 加上紅框那段程式