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;
}
}
}