{"id":973,"date":"2017-05-11T23:51:24","date_gmt":"2017-05-11T15:51:24","guid":{"rendered":"http:\/\/www.luwl.net\/?p=973"},"modified":"2017-05-11T23:51:24","modified_gmt":"2017-05-11T15:51:24","slug":"arduino-%e5%b0%8f%e8%bd%a6","status":"publish","type":"post","link":"http:\/\/www.luwl.net\/?p=973","title":{"rendered":"arduino \u5c0f\u8f66"},"content":{"rendered":"<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n\r\n\/\/\u5b9a\u4e49\u53d8\u91cf\u7a0b\u5e8f\u6bb5\r\n\/\/\u628a\u5c0f\u8f66\u5de6\u8f6e\u7535\u673a\u7f16\u7801\u5668\u7801\u76d8\u7684OUTA\u4fe1\u53f7\u8fde\u63a5\u5230Arduino\u63a7\u5236\u5668\u7684\u6570\u5b57\u7aef\u53e32\uff0c\r\n\/\/\u6570\u5b57\u7aef\u53e32\u662fArduino\u7684\u5916\u90e8\u4e2d\u65ad0\u7684\u7aef\u53e3\u3002\r\n#define PinA_left 2 \/\/\u5916\u90e8\u4e2d\u65ad0\r\n#define PinB_left 8 \/\/\u5c0f\u8f66\u5de6\u8f66\u8f6e\u7535\u673a\u7f16\u7801\u5668\u7801\u76d8\u7684OUTB\u4fe1\u53f7\u8fde\u63a5\u5230\u6570\u5b57\u7aef\u53e38\r\n\/\/\u628a\u5c0f\u8f66\u53f3\u8f66\u8f6e\u7535\u673a\u7f16\u7801\u5668\u7801\u76d8\u7684OUTA\u4fe1\u53f7\u8fde\u63a5\u5230Arduino\u63a7\u5236\u5668\u7684\u6570\u5b57\u7aef\u53e33\uff0c\r\n\/\/\u6570\u5b57\u7aef\u53e33\u662fArduino\u7684\u5916\u90e8\u4e2d\u65ad1\u7684\u7aef\u53e3\u3002\r\n#define PinA_right 3 \/\/\u5916\u90e8\u4e2d\u65ad1\r\n#define PinB_right 9 \/\/\u5c0f\u8f66\u53f3\u8f66\u8f6e\u7535\u673a\u7f16\u7801\u5668\u7801\u76d8\u7684OUTB\u4fe1\u53f7\u8fde\u63a5\u5230\u6570\u5b57\u7aef\u53e39\r\nint E_left =5; \/\/L298P\u76f4\u6d41\u7535\u673a\u9a71\u52a8\u677f\u7684\u5de6\u8f6e\u7535\u673a\u4f7f\u80fd\u7aef\u53e3\u8fde\u63a5\u5230\u6570\u5b57\u63a5\u53e35\r\nint M_left =4; \/\/L298P\u76f4\u6d41\u7535\u673a\u9a71\u52a8\u677f\u7684\u5de6\u8f6e\u7535\u673a\u8f6c\u5411\u7aef\u53e3\u8fde\u63a5\u5230\u6570\u5b57\u63a5\u53e34\r\nint E_right =6; \/\/\u8fde\u63a5\u5c0f\u8f66\u53f3\u8f6e\u7535\u673a\u7684\u4f7f\u80fd\u7aef\u53e3\u5230\u6570\u5b57\u63a5\u53e36\r\nint M_right =7; \/\/\u8fde\u63a5\u5c0f\u8f66\u53f3\u8f6e\u7535\u673a\u7684\u8f6c\u5411\u7aef\u53e3\u5230\u6570\u5b57\u63a5\u53e37\r\nint val_right; \/\/\u5c0f\u8f66\u53f3\u8f6e\u7535\u673a\u7684PWM\u529f\u7387\u503c\r\nint val_start;\/\/\u4e0a\u4f4d\u673a\u63a7\u5236\u5b57\u8282\uff0c\u7528\u4e8e\u63a7\u5236\u7535\u673a\u662f\u5426\u542f\u52a8\uff1b\r\nint val_FB; \/\/\u4e0a\u4f4d\u673a\u63a7\u5236\u5b57\u8282\uff0c\u7528\u4e8e\u63a7\u5236\u7535\u673a\u662f\u6b63\u8f6c\u8fd8\u662f\u53cd\u8f6c\uff1b\r\nint val_left;\/\/\u4e0a\u4f4d\u673a\u63a7\u5236\u5b57\u8282\uff0c\u7528\u4e8e\u63d0\u4f9b\u7ed9\u5de6\u8f6e\u7535\u673aPWM\u529f\u7387\u503c\u3002\r\nint count1 = 0; \/\/\u5de6\u8f6e\u7f16\u7801\u5668\u7801\u76d8\u8109\u51b2\u8ba1\u6570\u503c\r\nint count2= 0; \/\/\u53f3\u8f6e\u7f16\u7801\u5668\u7801\u76d8\u8109\u51b2\u8ba1\u6570\u503c\r\nint rpm1 = 0; \/\/\u5de6\u8f6e\u7535\u673a\u6bcf\u5206\u949f(min)\u8f6c\u901f(r\/min)\r\nint rpm2 = 0; \/\/\u53f3\u8f6e\u7535\u673a\u6bcf\u5206\u949f(min)\u8f6c\u901f(r\/min)\r\nint flag;\/\/\u8bbe\u7f6e\u5c0f\u8f66\u884c\u8f66\u72b6\u6001\uff0c\u662f\u524d\u8fdb\u3001\u540e\u9000\u8fd8\u662f\u505c\u6b62\r\nunsigned long timenew = 0, old_time = 0; \/\/ \u65f6\u95f4\u6807\u8bb0\r\nunsigned long time1 = 0, time2 = 0; \/\/ \u65f6\u95f4\u6807\u8bb0\r\n\r\n\/\/\u521d\u59cb\u5316\u7a0b\u5e8f\u6bb5\r\nvoid setup()\r\n{\r\nSerial.begin(9600); \/\/ \u542f\u52a8\u4e32\u53e3\u901a\u4fe1\uff0c\u6ce2\u7279\u7387\u4e3a9600b\/s\r\npinMode(M_left, OUTPUT); \/\/L298P\u76f4\u6d41\u7535\u673a\u9a71\u52a8\u677f\u7684\u63a7\u5236\u7aef\u53e3\u8bbe\u7f6e\u4e3a\u8f93\u51fa\u6a21\u5f0f\r\npinMode(E_left, OUTPUT);\r\npinMode(M_right, OUTPUT);\r\npinMode(E_right, OUTPUT);\r\npinMode(PinA_left,INPUT); \/\/\u4f3a\u670d\u7535\u673a\u7f16\u7801\u5668\u7684OUTA\u548cOUTB\u4fe1\u53f7\u7aef\u8bbe\u7f6e\u4e3a\u8f93\u5165\u6a21\u5f0f\r\npinMode(PinB_left,INPUT);\r\npinMode(PinA_right,INPUT);\r\npinMode(PinB_right,INPUT);\r\n\/\/\u5b9a\u4e49\u5916\u90e8\u4e2d\u65ad0\u548c1\u7684\u4e2d\u65ad\u5b50\u7a0b\u5e8fCode(),\u4e2d\u65ad\u89e6\u53d1\u4e3a\u4e0b\u8df3\u6cbf\u89e6\u53d1\r\n\/\/\u5f53\u7f16\u7801\u5668\u7801\u76d8\u7684OUTA\u8109\u51b2\u4fe1\u53f7\u53d1\u751f\u4e0b\u8df3\u6cbf\u4e2d\u65ad\u65f6\uff0c\r\n\/\/\u5c06\u81ea\u52a8\u8c03\u7528\u6267\u884c\u4e2d\u65ad\u5b50\u7a0b\u5e8fCode()\u3002\r\nattachInterrupt(0, Code1, FALLING);\/\/\u5c0f\u8f66\u5de6\u8f66\u8f6e\u7535\u673a\u7684\u7f16\u7801\u5668\u8109\u51b2\u4e2d\u65ad\u51fd\u6570\r\nattachInterrupt(1, Code2, FALLING);\/\/\u5c0f\u8f66\u53f3\u8f66\u8f6e\u7535\u673a\u7684\u7f16\u7801\u5668\u8109\u51b2\u4e2d\u65ad\u51fd\u6570\r\n}\r\n\r\n\/\/\u5b50\u7a0b\u5e8f\u7a0b\u5e8f\u6bb5\r\nvoid advance()\/\/\u5c0f\u8f66\u524d\u8fdb\r\n{\r\ndigitalWrite(M_left,HIGH);\r\nanalogWrite(E_left,val_left);\r\ndigitalWrite(M_right,LOW);\r\nanalogWrite(E_right,val_right);\r\n}\r\nvoid back()\/\/\u5c0f\u8f66\u540e\u9000\r\n{\r\ndigitalWrite(M_left,LOW);\r\nanalogWrite(E_left,val_left);\r\ndigitalWrite(M_right,HIGH);\r\nanalogWrite(E_right,val_right);\r\n}\r\nvoid Stop()\/\/\u5c0f\u8f66\u505c\u6b62\r\n{\r\ndigitalWrite(E_right, LOW);\r\ndigitalWrite(E_left, LOW);\r\n}\r\n\r\n\/\/\u4e3b\u7a0b\u5e8f\u6bb5\r\nvoid loop()\r\n{\r\nif (Serial.available()&gt;0) \/\/\u5982\u679cArduino\u63a7\u5236\u5668\u8bfb\u7f13\u51b2\u533a\u4e2d\u5b58\u5728\u4e0a\u4f4d\u673a\u4e0b\u8fbe\u7684\u5b57\u8282\r\n{\r\nval_start= Serial.read(); \/\/\u4ece\u8bfb\u7f13\u51b2\u533a\u4e2d\u8bfb\u53d6\u4e0a\u4f4d\u673a\u7684\u4e09\u4e2a\u63a7\u5236\u5b57\u8282\r\ndelay(5);\r\nval_FB = Serial.read();\r\ndelay(5);\r\nval_left= Serial.read();\r\ndelay(5);\r\nif(val_start==0x11) \/\/\u5982\u679c\u8bfb\u51fa\u7684\u7b2c\u4e00\u4e2a\u5b57\u8282\u4e3a\u5c0f\u8f66\u542f\u52a8\u6807\u5fd7\u5b57\u82820x11\r\n{\r\nif(val_FB ==0xAA) \/\/\u5982\u679c\u8bfb\u51fa\u7684\u7b2c\u4e8c\u4e2a\u5b57\u8282\u4e3a\u5c0f\u8f66\u524d\u8fdb\u6807\u5fd7\u5b57\u82820xAA\r\n{\r\n\/\/\u8bfb\u51fa\u7684\u7b2c\u4e09\u4e2a\u5b57\u8282\u4e3a\u5c0f\u8f66\u5de6\u8f66\u8f6e\u7535\u673a\u7684PWM\u529f\u7387\u503c\uff0c\u628a\u5b83\u8d4b\u503c\u7ed9\u53f3\u8f66\u8f6e\u7535\u673a\u529f\u7387\u53d8\u91cf\r\nval_right=val_left;\r\nadvance(); \/\/\u5c0f\u8f66\u524d\u8fdb\r\nflag='a'; \/\/\u8bbe\u7f6e\u5c0f\u8f66\u524d\u8fdb\u6807\u5fd7\u5b57\u7b26\r\ncount1 = 0; \/\/\u6062\u590d\u5230\u7f16\u7801\u5668\u6d4b\u901f\u7684\u521d\u59cb\u72b6\u6001\r\ncount2 = 0;\r\nold_time= millis();\r\n}\r\nelse if(val_FB ==0xBB) \/\/\u5982\u679c\u8bfb\u51fa\u7684\u7b2c\u4e8c\u4e2a\u5b57\u8282\u4e3a\u5c0f\u8f66\u540e\u9000\u6807\u5fd7\u5b57\u82820xBB\r\n{\r\nval_right=val_left;\r\nback(); \/\/\u5c0f\u8f66\u540e\u9000\r\nflag='b'; \/\/\u8bbe\u7f6e\u5c0f\u8f66\u540e\u9000\u6807\u5fd7\u5b57\u7b26\r\ncount1 = 0; \/\/\u6062\u590d\u5230\u7f16\u7801\u5668\u6d4b\u901f\u7684\u521d\u59cb\u72b6\u6001\r\ncount2 = 0;\r\nold_time= millis();\r\n}\r\n}\r\nelse if(val_start==0x22) \/\/\u5982\u679c\u8bfb\u51fa\u7684\u7b2c\u4e00\u4e2a\u5b57\u8282\u4e3a\u5c0f\u8f66\u505c\u6b62\u6807\u5fd7\u5b57\u82820x22\r\n{\r\nStop(); \/\/\u5c0f\u8f66\u505c\u6b62\r\nflag='s'; \/\/\u8bbe\u7f6e\u5c0f\u8f66\u505c\u6b62\u6807\u5fd7\u5b57\u7b26\r\n}\r\n}\r\ntimenew = millis();\/\/\u4ee5\u6beb\u79d2\u4e3a\u5355\u4f4d\uff0c\u8ba1\u7b97\u5f53\u524d\u65f6\u95f4\r\n\/\/\u8ba1\u7b97\u51fa\u6bcf\u4e00\u79d2\u949f\u7f16\u7801\u5668\u7801\u76d8\u8ba1\u5f97\u7684\u8109\u51b2\u6570\uff0c\r\nif(abs(timenew - old_time) &gt;= 1000) \/\/ \u5982\u679c\u8ba1\u65f6\u65f6\u95f4\u5df2\u8fbe1\u79d2\r\n{\r\ndetachInterrupt(0); \/\/ \u5173\u95ed\u5916\u90e8\u4e2d\u65ad0\r\ndetachInterrupt(1); \/\/ \u5173\u95ed\u5916\u90e8\u4e2d\u65ad1\r\n\/\/\u628a\u6bcf\u4e00\u79d2\u949f\u7f16\u7801\u5668\u7801\u76d8\u8ba1\u5f97\u7684\u8109\u51b2\u6570\uff0c\u6362\u7b97\u4e3a\u5f53\u524d\u8f6c\u901f\u503c\r\n\/\/\u8f6c\u901f\u5355\u4f4d\u662f\u6bcf\u5206\u949f\u591a\u5c11\u8f6c\uff0c\u5373r\/min\u3002\u8fd9\u4e2a\u7f16\u7801\u5668\u7801\u76d8\u4e3a12\u4e2a\u9f7f\u3002\r\nrpm1 =(float)count1*60\/12;\/\/\u5c0f\u8f66\u5de6\u8f66\u8f6e\u7535\u673a\u8f6c\u901f\r\nrpm2 =(float)count2*60\/12; \/\/\u5c0f\u8f66\u53f3\u8f66\u8f6e\u7535\u673a\u8f6c\u901f\r\n\r\n\/\/\u6839\u636e\u5de6\u53f3\u8f66\u8f6e\u8f6c\u901f\u5deerpm1-rpm2\uff0c\u4e58\u4ee5\u6bd4\u4f8b\u56e0\u5b500.4\uff0c\u83b7\u5f97\u6bd4\u4f8b\u8c03\u8282\u540e\u7684\u53f3\u8f66\u8f6e\u7535\u673aPWM\u529f\u7387\u503c\r\nval_right=(float)val_right+(rpm1-rpm2)*0.4;\r\nSerial.print(rpm1);\/\/\u5411\u4e0a\u4f4d\u8ba1\u7b97\u673a\u4e0a\u4f20\u5de6\u8f66\u8f6e\u7535\u673a\u5f53\u524d\u8f6c\u901f\r\nSerial.print(rpm2);\r\nSerial.print(val_right);\/\/ \u5411\u4e0a\u4f4d\u8ba1\u7b97\u673a\u4e0a\u4f20PID\u8c03\u8282\u540e\u7684\u53f3\u8f6e\u7535\u673aPWM\u529f\u7387\u503c\r\nif(flag=='a') \/\/\u6839\u636e\u521a\u521a\u8c03\u8282\u540e\u7684\u5c0f\u8f66\u7535\u673aPWM\u529f\u7387\u503c\uff0c\u53ca\u65f6\u4fee\u6b63\u5c0f\u8f66\u524d\u8fdb\u6216\u8005\u540e\u9000\u72b6\u6001\r\nadvance();\r\nif(flag=='b')\r\nback();\r\n\/\/\u6062\u590d\u5230\u7f16\u7801\u5668\u6d4b\u901f\u7684\u521d\u59cb\u72b6\u6001\r\ncount1 = 0; \/\/\u628a\u8109\u51b2\u8ba1\u6570\u503c\u6e05\u96f6\uff0c\u4ee5\u4fbf\u8ba1\u7b97\u4e0b\u4e00\u79d2\u7684\u8109\u51b2\u8ba1\u6570\r\ncount2 = 0;\r\nold_time= millis(); \/\/ \u8bb0\u5f55\u6bcf\u79d2\u6d4b\u901f\u65f6\u7684\u65f6\u95f4\u8282\u70b9\r\nattachInterrupt(0, Code1,FALLING); \/\/ \u91cd\u65b0\u5f00\u653e\u5916\u90e8\u4e2d\u65ad0\r\nattachInterrupt(1, Code2,FALLING); \/\/ \u91cd\u65b0\u5f00\u653e\u5916\u90e8\u4e2d\u65ad1\r\n}\r\n}\r\n\r\n\/\/ \u5de6\u4fa7\u8f66\u8f6e\u7535\u673a\u7684\u7f16\u7801\u5668\u7801\u76d8\u8ba1\u6570\u4e2d\u65ad\u5b50\u7a0b\u5e8f\r\nvoid Code1()\r\n{\r\n\/\/\u4e3a\u4e86\u4e0d\u8ba1\u5165\u566a\u97f3\u5e72\u6270\u8109\u51b2\uff0c\r\n\/\/\u5f532\u6b21\u4e2d\u65ad\u4e4b\u95f4\u7684\u65f6\u95f4\u5927\u4e8e5ms\u65f6\uff0c\u8ba1\u4e00\u6b21\u6709\u6548\u8ba1\u6570\r\nif((millis()-time1)&gt;5)\r\n\/\/\u5f53\u7f16\u7801\u5668\u7801\u76d8\u7684OUTA\u8109\u51b2\u4fe1\u53f7\u4e0b\u8df3\u6cbf\u6bcf\u4e2d\u65ad\u4e00\u6b21\uff0c\r\ncount1 += 1; \/\/ \u7f16\u7801\u5668\u7801\u76d8\u8ba1\u6570\u52a0\u4e00\r\ntime1==millis();\r\n}\r\n\/\/ \u53f3\u4fa7\u8f66\u8f6e\u7535\u673a\u7684\u7f16\u7801\u5668\u7801\u76d8\u8ba1\u6570\u4e2d\u65ad\u5b50\u7a0b\u5e8f\r\nvoid Code2()\r\n{\r\nif((millis()-time2)&gt;5)\r\n\/\/\u5f53\u7f16\u7801\u5668\u7801\u76d8\u7684OUTA\u8109\u51b2\u4fe1\u53f7\u4e0b\u8df3\u6cbf\u6bcf\u4e2d\u65ad\u4e00\u6b21\uff0c\r\ncount2 += 1; \/\/ \u7f16\u7801\u5668\u7801\u76d8\u8ba1\u6570\u52a0\u4e00\r\ntime2==millis();\r\n}\r\n\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\/\/\u5b9a\u4e49\u53d8\u91cf\u7a0b\u5e8f\u6bb5 \/\/\u628a\u5c0f\u8f66\u5de6\u8f6e\u7535\u673a\u7f16\u7801\u5668\u7801\u76d8\u7684OUTA\u4fe1\u53f7\u8fde\u63a5\u5230Arduin &hellip; <a href=\"http:\/\/www.luwl.net\/?p=973\">\u7ee7\u7eed\u9605\u8bfb <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-973","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/www.luwl.net\/index.php?rest_route=\/wp\/v2\/posts\/973","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.luwl.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.luwl.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.luwl.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.luwl.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=973"}],"version-history":[{"count":1,"href":"http:\/\/www.luwl.net\/index.php?rest_route=\/wp\/v2\/posts\/973\/revisions"}],"predecessor-version":[{"id":974,"href":"http:\/\/www.luwl.net\/index.php?rest_route=\/wp\/v2\/posts\/973\/revisions\/974"}],"wp:attachment":[{"href":"http:\/\/www.luwl.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=973"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.luwl.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=973"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.luwl.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=973"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}