在arduino中文社区无意间看到了一个大神的帖子,从此就一直关注着他,他的每一个项目都是很厉害的,有关于平衡的,图像识别,等等,于是乎,我也照着做了一个,效果很好。
资料教程:http://www.geek-workshop.com/forum.php?mod=viewthread&tid=26747&highlight=opencv
视频地址https://v.qq.com/x/page/v0569i0805x.html
非原创 ,,, 资料来自于极客工坊大神 彭稚辉先生
其个人网站------
1 /******************************************* 2 一个个人小项目,配套APP下载以及相关教程见 3 http://pengzhihui.xyz/2016/05/05/trace/ 4 *******************************************/ 5 #include <Arduino.h> 6 #include <SPI.h> 7 #include <U8g2lib.h> 8 #include <TraceApp.h> 9 #include <Servo.h> 10 U8G2_SSD1306_128X64_NONAME_1_4W_SW_SPI u8g2(U8G2_R0, /* d0=*/ 4, /* d1=*/ 5, /* cs=*/ 3, /* dc=*/ 6, /* reset=*/ 7); 11 char val='/'; 12 Servo myservoL; 13 Servo myservoR; 14 int zero= 100; 15 SoftwareSerial mySerial(0, 1); // RX为D10, TX为D11,可以自己任意修改 16 TraceApp obj((SoftwareSerial&)mySerial, 9600); //实例化检测对象 17 void Stop() 18 { 19 myservoL.detach(); 20 myservoR.detach(); 21 // myservoL.write(zero); 22 //myservoR.write(zero); 23 } 24 void setup() 25 { 26 Serial.begin(9600); //硬件串口用于调试 27 u8g2.begin(); 28 obj.begin(); //初始化 29 myservoL.attach(9); 30 myservoR.attach(10); 31 myservoL.write(100); //左轮归零 32 myservoR.write(100);//右轮归零 33 } 34 void loop() 35 { 36 obj.routine(); //尽可能让这一句频繁运行 37 if (obj.valid()) //检测的物体是否有效 38 { 39 /* u8g2.firstPage(); 40 do { 41 u8g2.setFont(u8g2_font_ncenB14_tr);//设置字体集 42 Serial.print("Obj detected at:"); 43 Serial.print(obj.getX()); //x坐标 44 u8g2.setCursor(0, 15); //设置光标处 45 u8g2.print("X="); //输出内容 46 u8g2.setCursor(30, 15); //设置光标处 47 u8g2.print(obj.getX()); //输出内容 48 Serial.print(","); 49 Serial.print(obj.getY()); //y坐标 50 u8g2.setCursor(0, 30); //设置光标处 51 u8g2.print("Y="); //输出内容 52 u8g2.setCursor(30, 30); //设置光标处 53 u8g2.print(obj.getY()); //输出内容 54 Serial.print(" with size of:"); 55 Serial.println(obj.getT()); //物体大小 56 u8g2.setCursor(0, 45); //设置光标处 57 u8g2.print("T="); //输出内容 58 u8g2.setCursor(30, 45); //设置光标处 59 u8g2.print(obj.getT()); //输出内容 60 }while ( u8g2.nextPage() );*/ 61 int LL = obj.getX()-150; 62 int RR = obj.getY()-250; 63 if(LL<20&&LL>-20||RR<20&&RR>-20) 64 { 65 Stop(); 66 } 67 else { 68 myservoL.attach(9); 69 myservoR.attach(10); 70 myservoL.write(zero-RR); 71 myservoR.write(zero-LL); 72 } 73 } 74 else 75 { 76 Stop(); 77 u8g2.firstPage(); 78 do{ 79 u8g2.setFont(u8g2_font_ncenB14_tr);//设置字体集 80 u8g2.setCursor(30, 15); //设置光标处 81 u8g2.print("Lost!!"); //输出内容 82 }while( u8g2.nextPage() ); 83 Serial.println("No obj or too many detected"); 84 } 85 delay(100); 86 }