05mblock+上述整合

利用mblock利用紅外線遙控器控制車子前進、後退、左右轉及循跡與避障

前後左右:方向鍵

停止:OK鍵

循跡:*鍵

避障:#鍵

mblock程式如附件所示

用Arduino IDE編輯,如下:

#include <Arduino.h>

#include <Wire.h>

//#include <Servo.h>

#include <SoftwareSerial.h>

#include <IRremote.h>

int RECV_PIN = 11; // 使用數位腳位11接收紅外線訊號

IRrecv irrecv(RECV_PIN); // 初始化紅外線訊號輸入

decode_results results; // 儲存訊號的結構

double angle_rad = PI/180.0;

double angle_deg = 180.0/PI;

void backward();

void left();

void forward();

void right();

void drivemotor();

double SensorStatus;

double sw;

double sw2;

double flag;

double flag2;

double ir;

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 stop();

void backward()

{

digitalWrite(7,1);

digitalWrite(8,0);

digitalWrite(9,1);

digitalWrite(10,0);

pinMode(5,OUTPUT);

analogWrite(5,100);

pinMode(6,OUTPUT);

analogWrite(6,100);

}

void left()

{

digitalWrite(7,0);

digitalWrite(8,1);

digitalWrite(9,0);

digitalWrite(10,0);

pinMode(5,OUTPUT);

analogWrite(5,100);

pinMode(6,OUTPUT);

analogWrite(6,100);

}

void forward()

{

digitalWrite(7,0);

digitalWrite(8,1);

digitalWrite(9,0);

digitalWrite(10,1);

pinMode(5,OUTPUT);

analogWrite(5,100);

pinMode(6,OUTPUT);

analogWrite(6,100);

}

void right()

{

digitalWrite(7,0);

digitalWrite(8,0);

digitalWrite(9,0);

digitalWrite(10,1);

pinMode(5,OUTPUT);

analogWrite(5,100);

pinMode(6,OUTPUT);

analogWrite(6,100);

}

void drivemotor()

{

if(((SensorStatus)==(0))){

forward();

}

if(((SensorStatus)==(1))){

left();

}

if(((SensorStatus)==(2))){

stop();

}

if(((SensorStatus)==(3))){

left();

}

if(((SensorStatus)==(4))){

right();

}

if(((SensorStatus)==(5))){

forward();

}

if(((SensorStatus)==(6))){

right();

}

if(((SensorStatus)==(7))){

stop();

}

}

void stop()

{

digitalWrite(7,0);

digitalWrite(8,0);

digitalWrite(9,0);

digitalWrite(10,0);

pinMode(5,OUTPUT);

analogWrite(5,0);

pinMode(6,OUTPUT);

analogWrite(6,0);

}

void setup(){

pinMode(7,OUTPUT);

pinMode(8,OUTPUT);

pinMode(9,OUTPUT);

pinMode(10,OUTPUT);

pinMode(2,INPUT);

pinMode(3,INPUT);

pinMode(4,INPUT);

irrecv.enableIRIn(); // 啟動接收

flag = 1;

sw2 = 1;

sw = 1;

flag2 = 1;

}

void loop(){

if (irrecv.decode(&results)) {

// Serial.println(results.value, HEX);

ir=results.value;

irrecv.resume(); // Receive the next value

}

delay(100);

if((((sw)==(0))) & (((flag)==(0)))){

SensorStatus = (digitalRead(2)) + (((digitalRead(3)) * (2)) + ((digitalRead(4)) * (4)));

drivemotor();

}

if((((sw2)==(0))) & (((flag2)==(0)))){

if((getDistance(13,12)) < (20)){

backward();

delay(1000*0.5);

if(((1)==(random(0,1)))){

left();

}else{

right();

}

delay(1000*0.5);

}

forward();

}

if(((ir)==(16754775))){

backward();

}

if(((ir)==(16736925))){

forward();

}

if(((ir)==(16754775))){

backward();

}

if(((ir)==(16720605))){

left();

}

if(((ir)==(16761405))){

right();

}

if(((ir)==(16712445))){

stop();

flag = 1;

flag2 = 1;

}

if(((ir)==(16728765))){

if(((sw)==(0))){

sw = 1;

}

if(((sw)==(1))){

sw = 0;

flag = 0;

}

}

if(((ir)==(16732845))){

if(((sw2)==(0))){

sw2 = 1;

}

if(((sw2)==(1))){

sw2 = 0;

flag2 = 0;

}

}

}

=====================================

二路循跡車+LCD顯示+控制快慢(+、-)速度

前後左右:方向鍵

停止:OK鍵

循跡:*鍵

避障:#鍵

利用遙控器的1、4來增加及減少左輪速度

利用遙控器的3、6來增加及減少右輪速度

利用遙控器的2、5來增加及減少雙輪速度

#include <Arduino.h>

#include <Wire.h>

//#include <Servo.h>

#include <SoftwareSerial.h>

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F,16,2);

#include <IRremote.h>

int RECV_PIN = 11; // 使用數位腳位11接收紅外線訊號

IRrecv irrecv(RECV_PIN); // 初始化紅外線訊號輸入

decode_results results; // 儲存訊號的結構

double angle_rad = PI/180.0;

double angle_deg = 180.0/PI;

void backward();

void left();

void forward();

void right();

void drivemotor();

double SensorStatus;

double sw;

double sw2;

double flag;

double flag2;

double ir;

double rpower;

double lpower;

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 stop();

void backward()

{

digitalWrite(7,1);

digitalWrite(8,0);

digitalWrite(9,1);

digitalWrite(10,0);

pinMode(5,OUTPUT);

analogWrite(5,rpower);

pinMode(6,OUTPUT);

analogWrite(6,lpower);

}

void left()

{

digitalWrite(7,0);

digitalWrite(8,1);

digitalWrite(9,0);

digitalWrite(10,0);

pinMode(5,OUTPUT);

analogWrite(5,rpower);

pinMode(6,OUTPUT);

analogWrite(6,lpower);

}

void forward()

{

digitalWrite(7,0);

digitalWrite(8,1);

digitalWrite(9,0);

digitalWrite(10,1);

pinMode(5,OUTPUT);

analogWrite(5,rpower);

pinMode(6,OUTPUT);

analogWrite(6,lpower);

}

void right()

{

digitalWrite(7,0);

digitalWrite(8,0);

digitalWrite(9,0);

digitalWrite(10,1);

pinMode(5,OUTPUT);

analogWrite(5,rpower);

pinMode(6,OUTPUT);

analogWrite(6,lpower);

}

void drivemotor()

{

if(((SensorStatus)==(0))){

stop();

}

if(((SensorStatus)==(1))){

right();

}

if(((SensorStatus)==(2))){

left();

}

if(((SensorStatus)==(3))){

forward();

}

}

void stop()

{

digitalWrite(7,0);

digitalWrite(8,0);

digitalWrite(9,0);

digitalWrite(10,0);

pinMode(5,OUTPUT);

analogWrite(5,0);

pinMode(6,OUTPUT);

analogWrite(6,0);

}

void setup(){

pinMode(7,OUTPUT);

pinMode(8,OUTPUT);

pinMode(9,OUTPUT);

pinMode(10,OUTPUT);

pinMode(2,INPUT);

pinMode(3,INPUT);

pinMode(4,INPUT);

irrecv.enableIRIn(); // 啟動接收

lcd.init();

lcd.backlight();

lpower = 200;

rpower = 200;

flag = 1;

sw2 = 1;

sw = 1;

flag2 = 1;

}

void loop(){

if (irrecv.decode(&results)) {

// Serial.println(results.value, HEX);

ir=results.value;

irrecv.resume(); // Receive the next value

}

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)))){

SensorStatus = (digitalRead(2)) + (((digitalRead(3)) * (2))) ;

drivemotor();

}

if((((sw2)==(0))) & (((flag2)==(0)))){

if((getDistance(13,12)) < (20)){

backward();

delay(1000*0.5);

if(((1)==(random(0,1)))){

left();

}else{

right();

}

delay(1000*0.5);

}

forward();

}

if(((ir)==(16754775))){

backward();

}

if(((ir)==(16736925))){

forward();

}

if(((ir)==(16754775))){

backward();

}

if(((ir)==(16720605))){

left();

}

if(((ir)==(16761405))){

right();

}

if(((ir)==(16712445))){

stop();

flag = 1;

flag2 = 1;

}

if(((ir)==(16728765))){

if(((sw)==(0))){

sw = 1;

}

if(((sw)==(1))){

sw = 0;

flag = 0;

}

}

if(((ir)==(16732845))){

if(((sw2)==(0))){

sw2 = 1;

}

if(((sw2)==(1))){

sw2 = 0;

flag2 = 0;

}

}

if(((ir)==(16738455))){

if((lpower) < (255)){

lpower += 5;

}

}

if(((ir)==(16724175))){

if((lpower) > (0)){

lpower += -5;

}

}

if(((ir)==(16756815))){

if((rpower) < (255)){

rpower += 5;

}

}

if(((ir)==(16743045))){

if((rpower) > (0)){

rpower += -5;

}

}

if(((ir)==(16750695))){

if((lpower) < (255)){

lpower += 5;

}

if((rpower) < (255)){

rpower += 5;

}

}

if(((ir)==(16718055))){

if((rpower) > (0)){

lpower += -5;

}

if((rpower) > (0)){

rpower += -5;

}

}

}

=====================================

三路循跡車+LCD顯示+控制快慢(+、-)速度

前後左右:方向鍵

停止:OK鍵

循跡:*鍵

避障:#鍵

利用遙控器的1、4來增加及減少左輪速度

利用遙控器的3、6來增加及減少右輪速度

利用遙控器的2、5來增加及減少雙輪速度

#include <Arduino.h>

#include <Wire.h>

//#include <Servo.h>

#include <SoftwareSerial.h>

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F,16,2);

#include <IRremote.h>

int RECV_PIN = 11; // 使用數位腳位11接收紅外線訊號

IRrecv irrecv(RECV_PIN); // 初始化紅外線訊號輸入

decode_results results; // 儲存訊號的結構

double angle_rad = PI/180.0;

double angle_deg = 180.0/PI;

void backward();

void left();

void forward();

void right();

void drivemotor();

double SensorStatus;

double sw;

double sw2;

double flag;

double flag2;

double ir;

double rpower;

double lpower;

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 stop();

void backward()

{

digitalWrite(7,1);

digitalWrite(8,0);

digitalWrite(9,1);

digitalWrite(10,0);

pinMode(5,OUTPUT);

analogWrite(5,rpower);

pinMode(6,OUTPUT);

analogWrite(6,lpower);

}

void left()

{

digitalWrite(7,0);

digitalWrite(8,1);

digitalWrite(9,0);

digitalWrite(10,0);

pinMode(5,OUTPUT);

analogWrite(5,rpower);

pinMode(6,OUTPUT);

analogWrite(6,lpower);

}

void forward()

{

digitalWrite(7,0);

digitalWrite(8,1);

digitalWrite(9,0);

digitalWrite(10,1);

pinMode(5,OUTPUT);

analogWrite(5,rpower);

pinMode(6,OUTPUT);

analogWrite(6,lpower);

}

void right()

{

digitalWrite(7,0);

digitalWrite(8,0);

digitalWrite(9,0);

digitalWrite(10,1);

pinMode(5,OUTPUT);

analogWrite(5,rpower);

pinMode(6,OUTPUT);

analogWrite(6,lpower);

}

void drivemotor()

{

if(((SensorStatus)==(0))){

forward();

}

if(((SensorStatus)==(1))){

left();

}

if(((SensorStatus)==(2))){

stop();

}

if(((SensorStatus)==(3))){

left();

}

if(((SensorStatus)==(4))){

right();

}

if(((SensorStatus)==(5))){

forward();

}

if(((SensorStatus)==(6))){

right();

}

if(((SensorStatus)==(7))){

stop();

}

}

void stop()

{

digitalWrite(7,0);

digitalWrite(8,0);

digitalWrite(9,0);

digitalWrite(10,0);

pinMode(5,OUTPUT);

analogWrite(5,0);

pinMode(6,OUTPUT);

analogWrite(6,0);

}

void setup(){

pinMode(7,OUTPUT);

pinMode(8,OUTPUT);

pinMode(9,OUTPUT);

pinMode(10,OUTPUT);

pinMode(2,INPUT);

pinMode(3,INPUT);

pinMode(4,INPUT);

irrecv.enableIRIn(); // 啟動接收

lcd.init();

lcd.backlight();

lpower = 200;

rpower = 200;

flag = 1;

sw2 = 1;

sw = 1;

flag2 = 1;

}

void loop(){

if (irrecv.decode(&results)) {

// Serial.println(results.value, HEX);

ir=results.value;

irrecv.resume(); // Receive the next value

}

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)))){

SensorStatus = (digitalRead(2)) + (((digitalRead(3)) * (2)) + ((digitalRead(4)) * (4)));

drivemotor();

}

if((((sw2)==(0))) & (((flag2)==(0)))){

if((getDistance(13,12)) < (20)){

backward();

delay(1000*0.5);

if(((1)==(random(0,1)))){

left();

}else{

right();

}

delay(1000*0.5);

}

forward();

}

if(((ir)==(16754775))){

backward();

}

if(((ir)==(16736925))){

forward();

}

if(((ir)==(16754775))){

backward();

}

if(((ir)==(16720605))){

left();

}

if(((ir)==(16761405))){

right();

}

if(((ir)==(16712445))){

stop();

flag = 1;

flag2 = 1;

}

if(((ir)==(16728765))){

if(((sw)==(0))){

sw = 1;

}

if(((sw)==(1))){

sw = 0;

flag = 0;

}

}

if(((ir)==(16732845))){

if(((sw2)==(0))){

sw2 = 1;

}

if(((sw2)==(1))){

sw2 = 0;

flag2 = 0;

}

}

if(((ir)==(16738455))){

if((lpower) < (255)){

lpower += 5;

}

}

if(((ir)==(16724175))){

if((lpower) > (0)){

lpower += -5;

}

}

if(((ir)==(16756815))){

if((rpower) < (255)){

rpower += 5;

}

}

if(((ir)==(16743045))){

if((rpower) > (0)){

rpower += -5;

}

}

if(((ir)==(16750695))){

if((lpower) < (255)){

lpower += 5;

}

if((rpower) < (255)){

rpower += 5;

}

}

if(((ir)==(16718055))){

if((rpower) > (0)){

lpower += -5;

}

if((rpower) > (0)){

rpower += -5;

}

}

}