{"id":542,"date":"2017-04-15T07:29:09","date_gmt":"2017-04-15T06:29:09","guid":{"rendered":"https:\/\/www.kolkataonweb.com\/code-bank\/?p=542"},"modified":"2017-04-15T07:29:09","modified_gmt":"2017-04-15T06:29:09","slug":"arduino-as-an-oscilloscope","status":"publish","type":"post","link":"https:\/\/www.kolkataonweb.com\/code-bank\/arduino\/arduino-as-an-oscilloscope\/","title":{"rendered":"Arduino as an Oscilloscope"},"content":{"rendered":"<p>Yes an Arduino can be used as Oscilloscope without any additional hardware.<\/p>\n<p><strong>Burn this code to Arduino<\/strong><\/p>\n<div class=\"wp-geshi-highlight-wrap5\">\n<div class=\"wp-geshi-highlight-wrap4\">\n<div class=\"wp-geshi-highlight-wrap3\">\n<div class=\"wp-geshi-highlight-wrap2\">\n<div class=\"wp-geshi-highlight-wrap\">\n<div class=\"wp-geshi-highlight\">\n<div class=\"c\">\n<pre class='wp-code-highlight prettyprint'><span class=\"kw4\">const<\/span> <span class=\"kw4\">int<\/span> probePin <span class=\"sy0\">=<\/span> A0<span class=\"sy0\">;<\/span>\r\n\u00a0\r\n<span class=\"kw4\">void<\/span> setup<span class=\"br0\">(<\/span><span class=\"br0\">)<\/span> <span class=\"br0\">{<\/span>\r\n  <span class=\"co1\">\/\/Setup serial connection<\/span>\r\n  Serial.<span class=\"me1\">begin<\/span><span class=\"br0\">(<\/span><span class=\"nu0\">9600<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span> \r\n<span class=\"br0\">}<\/span>\r\n\u00a0\r\n<span class=\"kw4\">void<\/span> loop<span class=\"br0\">(<\/span><span class=\"br0\">)<\/span> <span class=\"br0\">{<\/span>\r\n  <span class=\"co1\">\/\/Read analog pin<\/span>\r\n  <span class=\"kw4\">int<\/span> val <span class=\"sy0\">=<\/span> analogRead<span class=\"br0\">(<\/span>probePin<span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span>\r\n\u00a0\r\n  <span class=\"co1\">\/\/Write analog value to serial port:<\/span>\r\n  Serial.<span class=\"me1\">write<\/span><span class=\"br0\">(<\/span> <span class=\"nu12\">0xff<\/span> <span class=\"br0\">)<\/span><span class=\"sy0\">; \/\/can be skipped<\/span>                                                    \r\n  Serial.<span class=\"me1\">write<\/span><span class=\"br0\">(<\/span> <span class=\"br0\">(<\/span>val <span class=\"sy0\">&gt;&gt;<\/span> <span class=\"nu0\">8<\/span><span class=\"br0\">)<\/span> <span class=\"sy0\">&amp;<\/span> <span class=\"nu12\">0xff<\/span> <span class=\"br0\">)<\/span><span class=\"sy0\">;<\/span> \/\/the higher 8 bits                                            \r\n  Serial.<span class=\"me1\">write<\/span><span class=\"br0\">(<\/span> val <span class=\"sy0\">&amp;<\/span> <span class=\"nu12\">0xff<\/span> <span class=\"br0\">)<\/span><span class=\"sy0\">; \/\/the lower 8 bits<\/span>\r\n<span class=\"br0\">}\r\n<\/span><\/pre>\n<p><strong>Download Processing<\/strong> from <a href=\"https:\/\/processing.org\/download\/\">https:\/\/processing.org\/download\/<\/a>\u00a0 This tool will be used to run a C code that will plot the graphs.<\/p>\n<p>Now <strong>run this C code<\/strong> in Processing<\/p>\n<pre class='wp-code-highlight prettyprint'>\/*\r\n\u00a0* Oscilloscope\r\n\u00a0* Gives a visual rendering of analog pin 0 in realtime.\r\n\u00a0* \r\n\u00a0* This project is part of Accrochages\r\n\u00a0* See http:\/\/accrochages.drone.ws\r\n\u00a0* \r\n\u00a0* (c) 2008 Sofian Audry (info@sofianaudry.com)\r\n\u00a0*\r\n\u00a0* This program is free software: you can redistribute it and\/or modify\r\n\u00a0* it under the terms of the GNU General Public License as published by\r\n\u00a0* the Free Software Foundation, either version 3 of the License, or\r\n\u00a0* (at your option) any later version.\r\n\u00a0* \r\n\u00a0* This program is distributed in the hope that it will be useful,\r\n\u00a0* but WITHOUT ANY WARRANTY; without even the implied warranty of\r\n\u00a0* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\u00a0 See the\r\n\u00a0* GNU General Public License for more details.\r\n\u00a0* \r\n\u00a0* You should have received a copy of the GNU General Public License\r\n\u00a0* along with this program.\u00a0 If not, see &lt;http:\/\/www.gnu.org\/licenses\/&gt;.\r\n\u00a0*\/ \r\nimport processing.serial.*;\r\n\r\nSerial port;\u00a0 \/\/ Create object from Serial class\r\nint val;\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ Data received from the serial port\r\nint[] values;\r\nfloat zoom;\r\n\r\nvoid setup() \r\n{\r\n\u00a0 size(1280, 480);\r\n\u00a0 \/\/ Open the port that the board is connected to and use the same speed (9600 bps)\r\n\u00a0 port = new Serial(this, Serial.list()[0], 9600);\r\n\u00a0 values = new int[width];\r\n\u00a0 zoom = 1.0f;\r\n\u00a0 smooth();\r\n}\r\n\r\nint getY(int val) {\r\n\u00a0 return (int)(height - val \/ 1023.0f * (height - 1));\r\n}\r\n\r\nint getValue() {\r\n\u00a0 int value = -1;\r\n\u00a0 while (port.available() &gt;= 3) {\r\n\u00a0\u00a0\u00a0 if (port.read() == 0xff) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 value = (port.read() &lt;&lt; 8) | (port.read());\r\n\u00a0\u00a0\u00a0 }\r\n\u00a0 }\r\n\u00a0 return value;\r\n}\r\n\r\nvoid pushValue(int value) {\r\n\u00a0 for (int i=0; i&lt;width-1; i++)\r\n\u00a0\u00a0\u00a0 values[i] = values[i+1];\r\n\u00a0 values[width-1] = value;\r\n}\r\n\r\nvoid drawLines() {\r\n\u00a0 stroke(255);\r\n\u00a0 \r\n\u00a0 int displayWidth = (int) (width \/ zoom);\r\n\u00a0 \r\n\u00a0 int k = values.length - displayWidth;\r\n\u00a0 \r\n\u00a0 int x0 = 0;\r\n\u00a0 int y0 = getY(values[k]);\r\n\u00a0 for (int i=1; i&lt;displayWidth; i++) {\r\n\u00a0\u00a0\u00a0 k++;\r\n\u00a0\u00a0\u00a0 int x1 = (int) (i * (width-1) \/ (displayWidth-1));\r\n\u00a0\u00a0\u00a0 int y1 = getY(values[k]);\r\n\u00a0\u00a0\u00a0 line(x0, y0, x1, y1);\r\n\u00a0\u00a0\u00a0 x0 = x1;\r\n\u00a0\u00a0\u00a0 y0 = y1;\r\n\u00a0 }\r\n}\r\n\r\nvoid drawGrid() {\r\n\u00a0 stroke(255, 0, 0);\r\n\u00a0 line(0, height\/2, width, height\/2);\r\n}\r\n\r\nvoid keyReleased() {\r\n\u00a0 switch (key) {\r\n\u00a0\u00a0\u00a0 case '+':\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 zoom *= 2.0f;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 println(zoom);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 if ( (int) (width \/ zoom) &lt;= 1 )\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 zoom \/= 2.0f;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 break;\r\n\u00a0\u00a0\u00a0 case '-':\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 zoom \/= 2.0f;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 if (zoom &lt; 1.0f)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 zoom *= 2.0f;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 break;\r\n\u00a0 }\r\n}\r\n\r\nvoid draw()\r\n{\r\n\u00a0 background(0);\r\n\u00a0 drawGrid();\r\n\u00a0 val = getValue();\r\n\u00a0 if (val != -1) {\r\n\u00a0\u00a0\u00a0 pushValue(val);\r\n\u00a0 }\r\n\u00a0 drawLines();\r\n}<\/pre>\n<p>This is not replacement for an actual oscilloscope. It is a simple one that can used to monitor signal levels and voltages.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Yes an Arduino can be used as Oscilloscope without any additional hardware. Burn this code to Arduino const int probePin = A0; \u00a0 void setup() { \/\/Setup serial connection Serial.begin(9600); } \u00a0 void loop() { \/\/Read analog pin int val = analogRead(probePin); \u00a0 \/\/Write analog value to serial port: Serial.write( 0xff ); \/\/can be skipped&hellip; <a class=\"more-link\" href=\"https:\/\/www.kolkataonweb.com\/code-bank\/arduino\/arduino-as-an-oscilloscope\/\">Continue reading <span class=\"screen-reader-text\">Arduino as an Oscilloscope<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[102],"class_list":["post-542","post","type-post","status-publish","format-standard","hentry","category-arduino","tag-oscilloscope","entry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.kolkataonweb.com\/code-bank\/wp-json\/wp\/v2\/posts\/542","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.kolkataonweb.com\/code-bank\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.kolkataonweb.com\/code-bank\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.kolkataonweb.com\/code-bank\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.kolkataonweb.com\/code-bank\/wp-json\/wp\/v2\/comments?post=542"}],"version-history":[{"count":1,"href":"https:\/\/www.kolkataonweb.com\/code-bank\/wp-json\/wp\/v2\/posts\/542\/revisions"}],"predecessor-version":[{"id":545,"href":"https:\/\/www.kolkataonweb.com\/code-bank\/wp-json\/wp\/v2\/posts\/542\/revisions\/545"}],"wp:attachment":[{"href":"https:\/\/www.kolkataonweb.com\/code-bank\/wp-json\/wp\/v2\/media?parent=542"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.kolkataonweb.com\/code-bank\/wp-json\/wp\/v2\/categories?post=542"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.kolkataonweb.com\/code-bank\/wp-json\/wp\/v2\/tags?post=542"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}