{"id":714,"date":"2011-03-14T21:29:13","date_gmt":"2011-03-14T21:29:13","guid":{"rendered":"http:\/\/blog.ensci.com\/fablab\/?p=714"},"modified":"2011-03-16T22:30:30","modified_gmt":"2011-03-16T22:30:30","slug":"codes-arduino","status":"publish","type":"post","link":"https:\/\/blog.ensci.com\/fablab\/2011\/03\/14\/codes-arduino\/","title":{"rendered":"Codes Arduino"},"content":{"rendered":"<p style=\"text-align: center\"><a href=\"http:\/\/4.bp.blogspot.com\/_52TrOJpuoZ4\/TTwgf3zaN2I\/AAAAAAAAErY\/nbD64tsnSGY\/s1600\/planche%2BCode2-01.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" style=\"margin-top: 0px;margin-bottom: 10px;width: 400px;height: 300px\" src=\"http:\/\/4.bp.blogspot.com\/_52TrOJpuoZ4\/TTwgf3zaN2I\/AAAAAAAAErY\/nbD64tsnSGY\/s400\/planche%2BCode2-01.jpg\" border=\"0\" alt=\"\" width=\"400\" height=\"300\" \/><\/a><span style=\"font-family: arial;font-size: 12px;line-height: 18px\">Version des codes Alpha (encore pas mal de bugs)<\/span><\/p>\n<p>#include &lt;Stepper.h&gt;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>#define RAZ 12<\/p>\n<p>&nbsp;<\/p>\n<p>#define PROXY_SENSOR 0<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>const int mem[29] = { \/\/ 0-29cm<\/p>\n<p>621, \/\/0<\/p>\n<p>603, \/\/1<\/p>\n<p>594, \/\/2<\/p>\n<p>585, \/\/3<\/p>\n<p>576, \/\/4<\/p>\n<p>552, \/\/5<\/p>\n<p>525, \/\/6<\/p>\n<p>478, \/\/7<\/p>\n<p>417, \/\/8<\/p>\n<p>367, \/\/9<\/p>\n<p>335, \/\/10<\/p>\n<p>280, \/\/11<\/p>\n<p>267, \/\/12<\/p>\n<p>230, \/\/13<\/p>\n<p>210, \/\/14<\/p>\n<p>190, \/\/15<\/p>\n<p>173, \/\/16<\/p>\n<p>157, \/\/17<\/p>\n<p>144, \/\/18<\/p>\n<p>130, \/\/19<\/p>\n<p>120, \/\/20<\/p>\n<p>112, \/\/21<\/p>\n<p>100, \/\/22<\/p>\n<p>95, \/\/23<\/p>\n<p>85, \/\/24<\/p>\n<p>77, \/\/25<\/p>\n<p>70, \/\/26<\/p>\n<p>60, \/\/27<\/p>\n<p>58 \u00a0\/\/28<\/p>\n<p>};<\/p>\n<p>&nbsp;<\/p>\n<p>unsigned long val = 0;<\/p>\n<p>int res = 0; \/\/ resultat<\/p>\n<p>int cnt = 0;<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ Les X et Y filtr\u00c8s de l&rsquo;image pr\u00c8c\u00c8dente<\/p>\n<p>int ofx;<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ Les X et Y filtr\u00c8s<\/p>\n<p>int fx;<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ La cible \u2021 atteindre<\/p>\n<p>int nx;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ Vitesse d&rsquo;\u00c8volution<\/p>\n<p>float sx;<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ damp = frictions (1 = pas de frictions)<\/p>\n<p>const float damp = 0.3;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ k = konstante de vitesse du filtre de mouvement<\/p>\n<p>const float k = 0.3;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/\/ 4460x 180\u00b0<\/p>\n<p>\/\/ 2270y \u00a0360\u00b0<\/p>\n<p>\/\/ initialize of the Stepper library:<\/p>\n<p>Stepper tete(200, 2,3, 4,5);<\/p>\n<p>Stepper rouleau(200, 6, 7,8,9);<\/p>\n<p>\/\/Stepper rouleau(400, 2,3, 4,5);<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ stock position (actuelle) de la pointe sur le mat\u00e9riau<\/p>\n<p>int positionX = 0;<\/p>\n<p>int positionY = 0;<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ position voulue<\/p>\n<p>int targetX = 0;<\/p>\n<p>int targetY = 0;<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ r\u00e9ception depuis le port s\u00e9rie<\/p>\n<p>char sInput[5];<\/p>\n<p>int serInputByte = 0;<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ capteur si nous sommes arriv\u00e9s<\/p>\n<p>boolean isArrived = false;<\/p>\n<p>&nbsp;<\/p>\n<p>void setup() {<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ set the motor speed<\/p>\n<p>tete.setSpeed(45);<\/p>\n<p>rouleau.setSpeed(45);<\/p>\n<p>\/\/ Initialize the Serial port:<\/p>\n<p>Serial.begin(9600);<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>ofx = fx = 0;<\/p>\n<p>sx = 0;<\/p>\n<p>&nbsp;<\/p>\n<p>val = 0;<\/p>\n<p>for (int i=0; i&lt;10; i++) {<\/p>\n<p>val+=analogRead(0);<\/p>\n<p>delayMicroseconds(360);<\/p>\n<p>}<\/p>\n<p>val = val\/10;<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ raz();<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>void loop() {<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>if (Serial.available()&gt;0) {<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>char val = Serial.read();<\/p>\n<p>&nbsp;<\/p>\n<p>if ((val!=&rsquo;x&rsquo;) &amp;&amp; (val!=&rsquo;y&rsquo;)) {<\/p>\n<p>sInput[serInputByte] = val;<\/p>\n<p>&nbsp;<\/p>\n<p>if (serInputByte&lt;5) {<\/p>\n<p>serInputByte++;<\/p>\n<p>}<\/p>\n<p>else {<\/p>\n<p>serInputByte = 0;<\/p>\n<p>Serial.println(\u00ab\u00a0ERROR MORE THAN 4 BYTES IN COMMUNICATION!\u00a0\u00bb);<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>}<\/p>\n<p>else {<\/p>\n<p>int number = atoi(sInput);<\/p>\n<p>&nbsp;<\/p>\n<p>if (val==&rsquo;x&rsquo;) targetX = number;<\/p>\n<p>else<\/p>\n<p>targetY = number;<\/p>\n<p>&nbsp;<\/p>\n<p>isArrived = false;<\/p>\n<p>&nbsp;<\/p>\n<p>serInputByte = 0;<\/p>\n<p>sInput[0] = 0;<\/p>\n<p>sInput[1] = 0;<\/p>\n<p>sInput[2] = 0;<\/p>\n<p>sInput[3] = 0;<\/p>\n<p>sInput[4] = 0;<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/\/ multitache pilotage des moteurs<\/p>\n<p>&nbsp;<\/p>\n<p>int xTarg = targetX-positionX;<\/p>\n<p>int yTarg = targetY-positionY;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>if (xTarg!=0) {<\/p>\n<p>&nbsp;<\/p>\n<p>if (xTarg&gt;0) { \/\/ avance si plus petit<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>tete.step(1);<\/p>\n<p>positionX++;<\/p>\n<p>}<\/p>\n<p>else { \/\/\/ recule si plus grand<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>tete.step(-1);<\/p>\n<p>positionX&#8211;;<\/p>\n<p>&nbsp;<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>if (yTarg!=0) {<\/p>\n<p>&nbsp;<\/p>\n<p>if (yTarg&gt;0) {<\/p>\n<p>&nbsp;<\/p>\n<p>rouleau.step(1);<\/p>\n<p>positionY++;<\/p>\n<p>}<\/p>\n<p>else {<\/p>\n<p>rouleau.step(-1);<\/p>\n<p>positionY&#8211;;<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/\/ sync avec l&rsquo;ordi, \u00e7a y est je suis arriv\u00e9<\/p>\n<p>if ((xTarg==0)&amp;&amp;(yTarg==0)) {<\/p>\n<p>if (isArrived!=true) {<\/p>\n<p>\/\/ \u00a0Serial.println(&lsquo;o&rsquo;);<\/p>\n<p>readAndSendSensorData();<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>isArrived = true;<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/\/\/\/\/\/\/\/<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>if (cnt&lt;20) {<\/p>\n<p>cnt++;<\/p>\n<p>}<\/p>\n<p>else {<\/p>\n<p>&nbsp;<\/p>\n<p>val = 0;<\/p>\n<p>for (int i=0; i&lt;10; i++) {<\/p>\n<p>val+=analogRead(0);<\/p>\n<p>delayMicroseconds(360);<\/p>\n<p>}<\/p>\n<p>val = val\/10;<\/p>\n<p>&nbsp;<\/p>\n<p>nx = val;<\/p>\n<p>cnt = 0;<\/p>\n<p>res = getMM();<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/Serial.println(res);<\/p>\n<p>sx = 0;<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>sx += (nx &#8211; fx) * k;<\/p>\n<p>sx *= damp;<\/p>\n<p>fx += sx;<\/p>\n<p>&nbsp;<\/p>\n<p>ofx = fx;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>\/\/ \u00a0Serial.println(proxy); \/\/\/ gimme height info<\/p>\n<p>&nbsp;<\/p>\n<p>}<\/p>\n<p>\/\/\/1170<\/p>\n<p>&nbsp;<\/p>\n<p>void readAndSendSensorData() {<\/p>\n<p>&nbsp;<\/p>\n<p>Serial.println(res);<\/p>\n<p>&nbsp;<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>int getMM() {<\/p>\n<p>&nbsp;<\/p>\n<p>int minA = 0;<\/p>\n<p>int maxB = 0;<\/p>\n<p>int minCm = 0;<\/p>\n<p>int maxCm = 0;<\/p>\n<p>&nbsp;<\/p>\n<p>for (int i=0; i&lt;29; i++) {<\/p>\n<p>&nbsp;<\/p>\n<p>int t = mem[i];<\/p>\n<p>&nbsp;<\/p>\n<p>if (t&lt;fx) {<\/p>\n<p>&nbsp;<\/p>\n<p>maxB = t;<\/p>\n<p>if (i&gt;0) {<\/p>\n<p>minA = mem[i-1];<\/p>\n<p>minCm = i-1;<\/p>\n<p>maxCm = i;<\/p>\n<p>}<\/p>\n<p>i = 29;<\/p>\n<p>&nbsp;<\/p>\n<p>}<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>float result = mapF(fx, minA, maxB, minCm, maxCm);<\/p>\n<p>&nbsp;<\/p>\n<p>return int(result*10.0);<\/p>\n<p>&nbsp;<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>float mapF(float value,<\/p>\n<p>float istart, float istop,<\/p>\n<p>float ostart, float ostop) {<\/p>\n<p>return ostart + (ostop &#8211; ostart) * ((value &#8211; istart) \/ (istop &#8211; istart));<\/p>\n<p>}<\/p>\n<p style=\"text-align: center\">&nbsp;<\/p>\n<p style=\"text-align: center\"><span style=\"font-family: arial;font-size: 12px;line-height: 18px\"><br \/>\n<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Version des codes Alpha (encore pas mal de bugs) #include &lt;Stepper.h&gt; &nbsp; &nbsp; #define RAZ 12 &nbsp; #define PROXY_SENSOR 0 &nbsp; &nbsp; const int mem[29] = { \/\/ 0-29cm 621, \/\/0 603, \/\/1 594, \/\/2 585, \/\/3 576, \/\/4 552, \/\/5 525, \/\/6 478, \/\/7 417, \/\/8 367, \/\/9 335, \/\/10 280, \/\/11 267, \/\/12 [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_links_to":"","_links_to_target":""},"categories":[75,68],"tags":[],"class_list":["post-714","post","type-post","status-publish","format-standard","hentry","category-fabrication","category-scanner3d"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/blog.ensci.com\/fablab\/wp-json\/wp\/v2\/posts\/714","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.ensci.com\/fablab\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.ensci.com\/fablab\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.ensci.com\/fablab\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.ensci.com\/fablab\/wp-json\/wp\/v2\/comments?post=714"}],"version-history":[{"count":4,"href":"https:\/\/blog.ensci.com\/fablab\/wp-json\/wp\/v2\/posts\/714\/revisions"}],"predecessor-version":[{"id":718,"href":"https:\/\/blog.ensci.com\/fablab\/wp-json\/wp\/v2\/posts\/714\/revisions\/718"}],"wp:attachment":[{"href":"https:\/\/blog.ensci.com\/fablab\/wp-json\/wp\/v2\/media?parent=714"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.ensci.com\/fablab\/wp-json\/wp\/v2\/categories?post=714"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.ensci.com\/fablab\/wp-json\/wp\/v2\/tags?post=714"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}