{"id":276,"date":"2017-04-28T15:23:39","date_gmt":"2017-04-28T12:23:39","guid":{"rendered":"https:\/\/www.neyaptik.com\/blog\/?p=276"},"modified":"2017-04-28T15:23:39","modified_gmt":"2017-04-28T12:23:39","slug":"arduino-ile-veri-bolme-servo-parse-split","status":"publish","type":"post","link":"https:\/\/www.neyaptik.com\/blog\/arduino-ile-veri-bolme-servo-parse-split\/","title":{"rendered":"Arduino ile Veri B\u00f6lme ve Servo &#8211; Parse, Split"},"content":{"rendered":"<p>Elinizde <em>&#8220;1:565-2:1012-3:765-4:432&#8221;<\/em> bunun gibi bir veri var ve Arduino ile bunu par\u00e7alara ay\u0131r\u0131p, <strong>servolar\u0131n\u0131za<\/strong> veya ba\u015fka bir yere aktarmak m\u0131 istiyorsunuz.<\/p>\n<p>Mesela 565 olan 1. de\u011feri s1 diye bir de\u011fi\u015fkene aktarmak istiyorsunuz. Yap\u0131n\u0131z sabit ama karakter say\u0131s\u0131 de\u011fi\u015fken mi? O zaman bu yaz\u0131 tam size g\u00f6re. Neyse, bu kadar reklam yeter.<\/p>\n<p>\u00d6ncelikle sabit yap\u0131dan kast\u0131m, s\u00fcrekli 4 adet veri g\u00f6ndermek istemeniz mesela. <strong>de\u011ferlerin ka\u00e7 basamakl\u0131 oldu\u011fu <\/strong>-substring&#8217;in aksine-\u00a0hi\u00e7 \u00f6nemli de\u011fil (ilgili veri tipi ram s\u0131n\u0131rlar\u0131 i\u00e7erisindeyse).<\/p>\n<p>\u00d6rne\u011fin PHP veya Python kullansayd\u0131k, kolayl\u0131kla <strong>parse<\/strong>, <strong>regex<\/strong> gibi y\u00f6ntemleri kullanabilirdik. Ne yaz\u0131kki C&#8217;de direkt olarak parse veya regex yok (Harici k\u00fct\u00fcphaneleri saym\u0131yorum tabii ki.). Hemen nas\u0131l yapabilece\u011fimizi anlat\u0131yorum:<\/p>\n<p>Kullanaca\u011f\u0131m\u0131z fonksiyon <strong>sscanf.\u00a0<\/strong>Bu m\u00fcbarek komut bizi bir s\u00fcr\u00fc zorluktan kurtar\u0131yor. Kullan\u0131m\u0131 ise \u015f\u00f6yle:<\/p>\n<pre class=\"\">int sscanf(const char *str, const char *format, ...)\r\n<\/pre>\n<p>Str bizim giri\u015f verimiz iken, format ise veri yap\u0131m\u0131zd\u0131r. Virg\u00fclden sonra ise \u00fczerine yaz\u0131lacak de\u011fi\u015fkenler geliyor. Return olarak da \u00e7\u0131kan veri say\u0131s\u0131n\u0131 veriyor.<\/p>\n<p>Ba\u015fl\u0131\u011fa her ne kadar arduino yazsam da bu bir C kodu. Arduino zaten C\/C++ ile yaz\u0131l\u0131yor. Peki bu kodu \u00f6rnek olarak nas\u0131l kullanabiliriz?<\/p>\n<pre class=\"lang:c++ decode:true\">void setup() {\r\n  \/\/ put your setup code here, to run once:\r\n  Serial.begin(9600);\r\n  int s1key, s2key, s3key; \/\/keyler\r\n  int s1, s2, s3; \/\/de\u011ferler\r\n  char* mesaj = \"1:565-2:1012-3:765-4:432\";  \/\/gelen veri\r\n  int n = sscanf(mesaj, \"%d:%d-%d:%d-%d:%d\", &amp;s1key, &amp;s1, &amp;s2key, &amp;s2, &amp;s3key, &amp;s3); \/\/ sayi:sayi-sayi:sayi-sayi:sayi \u015feklinde gelmesi laz\u0131m. \r\n  Serial.print(F(\"n=\"));Serial.println(n); \/\/\u00e7\u0131kar\u0131lan toplam key ve value say\u0131s\u0131.\r\n  Serial.print(F(\"key1=\"));Serial.print(s1key);Serial.print(F(\", s1=\"));Serial.println(s1); \/\/bu k\u0131s\u0131mlar sadece yazd\u0131rmak i\u00e7in. direkt s1 de\u011fi\u015fkenini kullanabilirsin.\r\n  Serial.print(F(\"key2=\"));Serial.print(s2key);Serial.print(F(\", s2=\"));Serial.println(s2);\r\n  Serial.print(F(\"key3=\"));Serial.print(s3key);Serial.print(F(\", s3=\"));Serial.println(s3);\r\n  \r\n}\r\n\r\nvoid loop() {\r\n  \/\/ put your main code here, to run repeatedly:\r\n\r\n}<\/pre>\n<p>Mesaj adl\u0131 giri\u015f verimizi <strong>Key<\/strong> ve<strong> Value<\/strong>&#8216;lere (Anahtarlara ve De\u011ferlere) b\u00f6ld\u00fck. Ard\u0131ndan bunlar\u0131 Serial&#8217;e yazd\u0131rd\u0131k. Bu verileri<\/p>\n<pre class=\"lang:default decode:true\">analogWrite(9,s1);<\/pre>\n<p>gibi de kullanabilirsiniz.<\/p>\n<p>\u00dcstteki kodumuzun \u00e7\u0131kt\u0131s\u0131 ise \u015f\u00f6yle:<\/p>\n<pre class=\"lang:default decode:true\">n=6\r\nkey1=1, s1=565\r\nkey2=2, s2=1012\r\nkey3=3, s3=765<\/pre>\n<p><em>Bir sorunuz olursa buralarday\u0131m. Yorum b\u0131rakabilirsiniz. Sa\u011fl\u0131cakla kal\u0131n.<\/em><\/p>\n<p><em>Bir k\u0131sm\u0131\u00a0<a href=\"https:\/\/arduino.stackexchange.com\/a\/20829\">https:\/\/arduino.stackexchange.com\/a\/20829<\/a>\u00a0adresinden d\u00fczenlenmi\u015ftir.\u00a0<\/em><\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Elinizde &#8220;1:565-2:1012-3:765-4:432&#8221; bunun gibi bir veri var ve Arduino ile bunu par\u00e7alara ay\u0131r\u0131p, servolar\u0131n\u0131za veya ba\u015fka bir yere aktarmak m\u0131 istiyorsunuz. Mesela 565 olan 1. de\u011feri s1 diye bir de\u011fi\u015fkene aktarmak istiyorsunuz. Yap\u0131n\u0131z sabit ama&#8230;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":278,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[105,95,122],"tags":[199,221,219,220],"_links":{"self":[{"href":"https:\/\/www.neyaptik.com\/blog\/wp-json\/wp\/v2\/posts\/276"}],"collection":[{"href":"https:\/\/www.neyaptik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.neyaptik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.neyaptik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.neyaptik.com\/blog\/wp-json\/wp\/v2\/comments?post=276"}],"version-history":[{"count":2,"href":"https:\/\/www.neyaptik.com\/blog\/wp-json\/wp\/v2\/posts\/276\/revisions"}],"predecessor-version":[{"id":279,"href":"https:\/\/www.neyaptik.com\/blog\/wp-json\/wp\/v2\/posts\/276\/revisions\/279"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.neyaptik.com\/blog\/wp-json\/wp\/v2\/media\/278"}],"wp:attachment":[{"href":"https:\/\/www.neyaptik.com\/blog\/wp-json\/wp\/v2\/media?parent=276"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.neyaptik.com\/blog\/wp-json\/wp\/v2\/categories?post=276"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.neyaptik.com\/blog\/wp-json\/wp\/v2\/tags?post=276"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}