{"id":6252,"date":"2021-07-22T02:03:39","date_gmt":"2021-07-21T19:03:39","guid":{"rendered":"https:\/\/www.phidgets.com\/education\/?page_id=6252"},"modified":"2022-06-01T03:36:05","modified_gmt":"2022-05-31T20:36:05","slug":"lcd-graphing","status":"publish","type":"page","link":"https:\/\/www.phidgets.com\/education\/learn\/projects\/lcd-graphing\/","title":{"rendered":"Graphing with the Graphic LCD"},"content":{"rendered":"<p>[et_pb_section bb_built=&#8221;1&#8243; specialty=&#8221;off&#8221; next_background_color=&#8221;#000000&#8243; _builder_version=&#8221;4.4.1&#8243; custom_padding=&#8221;||0px|&#8221; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243;][et_pb_row _builder_version=&#8221;4.4.1&#8243; use_custom_gutter=&#8221;on&#8221; gutter_width=&#8221;3&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243;][et_pb_column type=&#8221;1_2&#8243; custom_padding__hover=&#8221;|||&#8221; custom_padding=&#8221;|||&#8221;][et_pb_code admin_label=&#8221;Graphing with the Graphic LCD&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243;]<\/p>\n<div class=\"ph-overline-text\"><!-- [et_pb_line_break_holder] -->    <a href=\"\/education\/learn\/projects\">Projects<\/a><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] --><\/p>\n<h1>Graphing with the Graphic LCD<\/h1>\n<p>[\/et_pb_code][et_pb_code admin_label=&#8221;Description&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243;]<pee>In this project, you will learn how to graph data from a sensor to the Graphic LCD.<\/pee>[\/et_pb_code][et_pb_code admin_label=&#8221;ph-button-cta: Start&#8221; _builder_version=&#8221;4.4.1&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243;]<a class=\"ph-button-cta\" href=\"#setup\"><!-- [et_pb_line_break_holder] -->  <\/p>\n<div class=\"ph-button-cta__icon\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->  Start<!-- [et_pb_line_break_holder] --><\/a>[\/et_pb_code][\/et_pb_column][et_pb_column type=&#8221;1_2&#8243; custom_padding__hover=&#8221;|||&#8221; custom_padding=&#8221;|||&#8221;][et_pb_image _builder_version=&#8221;4.6.6&#8243; src=&#8221;https:\/\/www.phidgets.com\/education\/wp-content\/uploads\/2021\/07\/graphic_lcd_graph_title4.jpg&#8221; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; \/][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section bb_built=&#8221;1&#8243; specialty=&#8221;on&#8221; _builder_version=&#8221;4.4.1&#8243; use_custom_gutter=&#8221;on&#8221; gutter_width=&#8221;3&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; prev_background_color=&#8221;#000000&#8243;][et_pb_column type=&#8221;1_4&#8243;][et_pb_code admin_label=&#8221;ph-vertical-nav&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; saved_tabs=&#8221;all&#8221;]<\/p>\n<div class=\"ph-vertical-nav ph-vertical-sticky\"><!-- [et_pb_line_break_holder] -->  <a href=\"#setup\" class=\"ph-vertical-nav-item\">Setup<\/a><!-- [et_pb_line_break_holder] -->  <a href=\"#graphing\" class=\"ph-vertical-nav-item\">Graphing Library<\/a><!-- [et_pb_line_break_holder] -->  <a href=\"#usegraphing\" class=\"ph-vertical-nav-item\">Use the Graphing Library<\/a><!-- [et_pb_line_break_holder] -->  <a href=\"#practice\" class=\"ph-vertical-nav-item\">Practice<\/a><!-- [et_pb_line_break_holder] --><\/div>\n<p>[\/et_pb_code][\/et_pb_column][et_pb_column type=&#8221;3_4&#8243; specialty_columns=&#8221;3&#8243;][et_pb_row_inner _builder_version=&#8221;4.4.1&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; module_id=&#8221;setup&#8221;][et_pb_column_inner type=&#8221;4_4&#8243; saved_specialty_column_type=&#8221;3_4&#8243; custom_padding__hover=&#8221;|||&#8221; custom_padding=&#8221;|||&#8221; saved_specialty_column_type=&#8221;3_4&#8243;][et_pb_code admin_label=&#8221;Setup&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; module_id=&#8221;setup&#8221;]<\/p>\n<h2>Setup<\/h2>\n<p><!-- [et_pb_line_break_holder] --><pee>Before getting started, make sure you have the following parts.<\/pee>[\/et_pb_code][\/et_pb_column_inner][\/et_pb_row_inner][et_pb_row_inner _builder_version=&#8221;4.4.1&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; custom_padding=&#8221;||0px|&#8221;][et_pb_column_inner type=&#8221;1_3&#8243; saved_specialty_column_type=&#8221;3_4&#8243; custom_padding__hover=&#8221;|||&#8221; custom_padding=&#8221;|||&#8221; saved_specialty_column_type=&#8221;3_4&#8243;][et_pb_code admin_label=&#8221;Part: lcd&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; saved_tabs=&#8221;all&#8221;]<\/p>\n<div class=\"ph-part-card\"><!-- [et_pb_line_break_holder] -->  <\/p>\n<div class=\"ph-part-card__top\"><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"ph-part-card__type\"><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"ph-overline-text\"><!-- [et_pb_line_break_holder] -->        <a href=\"\">Sensors \/<\/a><!-- [et_pb_line_break_holder] -->        <a href=\"\">LCD1100<\/a><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"ph-part-card__title\"><!-- [et_pb_line_break_holder] -->      <\/p>\n<h3>Graphic LCD Phidget<\/h3>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->  <\/div>\n<p><!-- [et_pb_line_break_holder] -->  <\/p>\n<div class=\"ph-part-card__bottom\"><!-- [et_pb_line_break_holder] -->    <img decoding=\"async\" src=\"\/education\/wp-content\/uploads\/2021\/05\/graphic-lcd.png\" width=\"75%\"  ><!-- [et_pb_line_break_holder] -->  <\/div>\n<p><!-- [et_pb_line_break_holder] --><\/div>\n<p>[\/et_pb_code][et_pb_code admin_label=&#8221;Part: phidget cable&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; saved_tabs=&#8221;all&#8221;]<\/p>\n<div class=\"ph-part-card\"><!-- [et_pb_line_break_holder] -->  <\/p>\n<div class=\"ph-part-card__top\"><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"ph-part-card__type\"><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"ph-overline-text\"><!-- [et_pb_line_break_holder] -->        <a href=\"\">Cables\/<\/a><!-- [et_pb_line_break_holder] -->        <a href=\"\">3003<\/a><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"ph-part-card__title\"><!-- [et_pb_line_break_holder] -->      <\/p>\n<h3>Phidget Cable<\/h3>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->  <\/div>\n<p><!-- [et_pb_line_break_holder] -->  <\/p>\n<div class=\"ph-part-card__bottom\"><!-- [et_pb_line_break_holder] -->    <img decoding=\"async\" src=\"\/education\/wp-content\/uploads\/2020\/04\/part-phidget-cable.jpg\"><!-- [et_pb_line_break_holder] -->  <\/div>\n<p><!-- [et_pb_line_break_holder] --><\/div>\n<p>[\/et_pb_code][\/et_pb_column_inner][et_pb_column_inner type=&#8221;1_3&#8243; saved_specialty_column_type=&#8221;3_4&#8243; custom_padding__hover=&#8221;|||&#8221; custom_padding=&#8221;|||&#8221; saved_specialty_column_type=&#8221;3_4&#8243;][et_pb_code admin_label=&#8221;Part: vint&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; saved_tabs=&#8221;all&#8221;]<\/p>\n<div class=\"ph-part-card\"><!-- [et_pb_line_break_holder] -->  <\/p>\n<div class=\"ph-part-card__top\"><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"ph-part-card__type\"><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"ph-overline-text\"><!-- [et_pb_line_break_holder] -->        <a href=\"\">Controllers \/<\/a><!-- [et_pb_line_break_holder] -->        <a href=\"\">hub0000<\/a><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"ph-part-card__title\"><!-- [et_pb_line_break_holder] -->      <\/p>\n<h3>VINT Hub<\/h3>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->  <\/div>\n<p><!-- [et_pb_line_break_holder] -->  <\/p>\n<div class=\"ph-part-card__bottom\"><!-- [et_pb_line_break_holder] -->    <img decoding=\"async\" src=\"\/education\/wp-content\/uploads\/2020\/04\/part-vint.jpg\"><!-- [et_pb_line_break_holder] -->  <\/div>\n<p><!-- [et_pb_line_break_holder] --><\/div>\n<p>[\/et_pb_code][\/et_pb_column_inner][et_pb_column_inner type=&#8221;1_3&#8243; saved_specialty_column_type=&#8221;3_4&#8243; custom_padding__hover=&#8221;|||&#8221; custom_padding=&#8221;|||&#8221; saved_specialty_column_type=&#8221;3_4&#8243;][et_pb_code admin_label=&#8221;Part: any sensor&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; saved_tabs=&#8221;all&#8221;]<\/p>\n<div class=\"ph-part-card\"><!-- [et_pb_line_break_holder] -->  <\/p>\n<div class=\"ph-part-card__top\"><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"ph-part-card__type\"><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"ph-overline-text\"><!-- [et_pb_line_break_holder] -->        <a href=\"\">SENSORS\/<\/a><!-- [et_pb_line_break_holder] -->        <a href=\"\">ANY<\/a><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/p>\n<div class=\"ph-part-card__title\"><!-- [et_pb_line_break_holder] -->      <\/p>\n<h3>Any Phidget<\/h3>\n<p><!-- [et_pb_line_break_holder] -->    <\/div>\n<p><!-- [et_pb_line_break_holder] -->  <\/div>\n<p><!-- [et_pb_line_break_holder] -->  <\/p>\n<div class=\"ph-part-card__bottom\"><!-- [et_pb_line_break_holder] -->    <img decoding=\"async\" src=\"\/education\/wp-content\/uploads\/2020\/03\/phidgets-simple-logo-blue.png\" width =\"50%\" height = \"50%\"><!-- [et_pb_line_break_holder] -->  <\/div>\n<p><!-- [et_pb_line_break_holder] --><\/div>\n<p>[\/et_pb_code][\/et_pb_column_inner][\/et_pb_row_inner][et_pb_row_inner admin_label=&#8221;Row&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; module_id=&#8221;graphing&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243;][et_pb_column_inner type=&#8221;4_4&#8243; saved_specialty_column_type=&#8221;3_4&#8243; custom_padding__hover=&#8221;|||&#8221; custom_padding=&#8221;|||&#8221; saved_specialty_column_type=&#8221;3_4&#8243;][\/et_pb_column_inner][\/et_pb_row_inner][et_pb_row_inner _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; module_class=&#8221;ph-user-java&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; module_id=&#8221;write-code&#8221;][et_pb_column_inner type=&#8221;4_4&#8243; saved_specialty_column_type=&#8221;3_4&#8243; custom_padding__hover=&#8221;|||&#8221; custom_padding=&#8221;|||&#8221; saved_specialty_column_type=&#8221;3_4&#8243;][et_pb_code admin_label=&#8221;Graphing Library Java&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243;]<\/p>\n<h2>Graphing Library (Java)<\/h2>\n<p><!-- [et_pb_line_break_holder] --><pee>Copy the code below into a new Java file called <strong>LCDPlot.java<\/strong><!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->Not your programming language? <a class=\"ph-toggle-settings\">Set your preferences<\/a> so we can display relevant code examples<\/pee>[\/et_pb_code][et_pb_code admin_label=&#8221;Code Sample &#8211; Eclipse&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; module_class=&#8221;ph-user-eclipse&#8221;]<\/p>\n<pre class=\"language-java\"><!-- [et_pb_line_break_holder] -->  <code><!-- [et_pb_line_break_holder] -->import java.io.FileWriter;<!-- [et_pb_line_break_holder] -->import java.text.DecimalFormat;<!-- [et_pb_line_break_holder] -->import java.time.LocalDateTime;<!-- [et_pb_line_break_holder] -->import java.time.format.DateTimeFormatter;<!-- [et_pb_line_break_holder] -->import java.util.ArrayList;<!-- [et_pb_line_break_holder] -->import java.util.Collections;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->import com.phidget22.LCD;<!-- [et_pb_line_break_holder] -->import com.phidget22.LCDFont;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->public class LCDPlot {<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    private static ArrayList<Double> data = new ArrayList<Double>();<!-- [et_pb_line_break_holder] -->    private ArrayList<Integer> pixelData = new ArrayList<Integer>();<!-- [et_pb_line_break_holder] -->    private DecimalFormat df = new DecimalFormat(\"0.0\");<!-- [et_pb_line_break_holder] -->    private static int numPoints;<!-- [et_pb_line_break_holder] -->    private double maxTemp = 0;<!-- [et_pb_line_break_holder] -->    private double minTemp = 0;<!-- [et_pb_line_break_holder] -->    private LCD lcd;<!-- [et_pb_line_break_holder] -->    private boolean recordData;<!-- [et_pb_line_break_holder] -->    private Record writeData;<!-- [et_pb_line_break_holder] -->    private int LCD_WIDTH = 127;<!-- [et_pb_line_break_holder] -->    private int Graph_WIDTH = 107;<!-- [et_pb_line_break_holder] -->    private int Graph_HEIGHT = 45;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    public LCDPlot() {<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    ;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\t\/\/ Constructor that records the data passed by user<!-- [et_pb_line_break_holder] -->\tpublic LCDPlot(int dataPoints, boolean recordData) throws Exception {<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        numPoints = dataPoints;<!-- [et_pb_line_break_holder] -->        lcd = new LCD();<!-- [et_pb_line_break_holder] -->        lcd.open(1000);<!-- [et_pb_line_break_holder] -->        lcd.setBacklight(0.5); \/\/ Enable backlight<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        this.recordData = recordData;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        if (recordData) {<!-- [et_pb_line_break_holder] -->            writeData = new Record();<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/\/ Main function that runs all the other functions<!-- [et_pb_line_break_holder] -->    public void start() throws Exception {<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        if (recordData) {<!-- [et_pb_line_break_holder] -->            writeData.writeValue();<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        display();<!-- [et_pb_line_break_holder] -->        yScaling();<!-- [et_pb_line_break_holder] -->        xScaling();<!-- [et_pb_line_break_holder] -->        graph();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/\/ Gets temp from temperature sensor and records in array<!-- [et_pb_line_break_holder] -->    public void addDataPoint(double num) throws Exception {<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Limits array size to the number of points displayed on the screen<!-- [et_pb_line_break_holder] -->        if (data.size() >= numPoints) {<!-- [et_pb_line_break_holder] -->            data.remove(0);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        data.add(num);<!-- [et_pb_line_break_holder] -->        start();<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/\/ Displays elements of graph<!-- [et_pb_line_break_holder] -->    private void display() throws Exception {<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ This initializes the graph axis<!-- [et_pb_line_break_holder] -->        lcd.drawLine(20, 11, 20, 56);<!-- [et_pb_line_break_holder] -->        lcd.drawLine(20, 56, 127, 56);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        maxTemp = Collections.max(data);<!-- [et_pb_line_break_holder] -->        minTemp = Collections.min(data);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Writes Max, Min and Current Temp<!-- [et_pb_line_break_holder] -->        lcd.writeText(LCDFont.DIMENSIONS_5X8, 1, 1, \"Min: \" + String.valueOf(df.format(minTemp)));<!-- [et_pb_line_break_holder] -->        lcd.writeText(LCDFont.DIMENSIONS_5X8, 51, 1, \"Max: \" + String.valueOf(df.format(maxTemp)));<!-- [et_pb_line_break_holder] -->        lcd.writeText(LCDFont.DIMENSIONS_6X12, 101, 1, String.valueOf(df.format(data.get(data.size() - 1))));<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/\/ Auto scales y-axis<!-- [et_pb_line_break_holder] -->    private void yScaling() throws Exception {<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        Double temp = Collections.max(data);<!-- [et_pb_line_break_holder] -->        Double scale = ((maxTemp - minTemp) \/ 5);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Draws ticks and numbers | Starts on pixel 11 and moves down 9 pixels at a<!-- [et_pb_line_break_holder] -->        \/\/ time. At each increment, a small visible line is drawn to indicate the<!-- [et_pb_line_break_holder] -->        \/\/ location as well as a numeric value is printed out on the screen.<!-- [et_pb_line_break_holder] -->        for (int i = 11; i <= 56; i += 9) {<!-- [et_pb_line_break_holder] -->            lcd.drawLine(20, i, 21, i);<!-- [et_pb_line_break_holder] -->            lcd.writeText(LCDFont.DIMENSIONS_5X8, 0, i, Double.toString(Double.valueOf(df.format(temp))));<!-- [et_pb_line_break_holder] -->            temp -= scale;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/\/ Auto scales x-axis<!-- [et_pb_line_break_holder] -->    private void xScaling() throws Exception {<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Draws ticks on x-axis |The graph starts at pixel 20, and draws a vertical<!-- [et_pb_line_break_holder] -->        \/\/ tick of width 2 across the x-axis for each data point<!-- [et_pb_line_break_holder] -->        int scale = Math.round(Graph_WIDTH \/ (numPoints - 1));<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        for (int i = 20 + scale; i < LCD_WIDTH; i += scale) {<!-- [et_pb_line_break_holder] -->            lcd.drawLine(i, 56, i, 58);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/\/ Draws the graph<!-- [et_pb_line_break_holder] -->    private void graph() throws Exception {<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        double range = maxTemp - minTemp;<!-- [et_pb_line_break_holder] -->        int scale = Math.round(Graph_WIDTH \/ (numPoints - 1));<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Changes the pixel location of the data based on min and max data points |<!-- [et_pb_line_break_holder] -->        \/\/ Math: Let x be the pixel location of the data point. x\/Graph_Height in pixels<!-- [et_pb_line_break_holder] -->        \/\/ = (data point - min temp)\/temp range.<!-- [et_pb_line_break_holder] -->        \/\/ Solving for x will result in a ratio where the pixel location simulates the<!-- [et_pb_line_break_holder] -->        \/\/ distribution of the temperature<!-- [et_pb_line_break_holder] -->        for (int i = 0; i < data.size(); i++) {<!-- [et_pb_line_break_holder] -->            double pixel = 56 - (data.get(i) - minTemp) \/ range * Graph_HEIGHT;<!-- [et_pb_line_break_holder] -->            pixelData.add((int) Math.round(pixel));<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Temp 2 gives the pixel for the first time data point<!-- [et_pb_line_break_holder] -->        int temp2 = 20;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Graphs data | The LCD will draw a line between the pixel of the previous data<!-- [et_pb_line_break_holder] -->        \/\/ point and the current data point<!-- [et_pb_line_break_holder] -->        for (int i = 0; i < data.size(); i++) {<!-- [et_pb_line_break_holder] -->            if (i > 0) {<!-- [et_pb_line_break_holder] -->                lcd.drawLine(temp2 - scale, pixelData.get(i - 1), temp2, pixelData.get(i));<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            temp2 += scale;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        pixelData.clear();<!-- [et_pb_line_break_holder] -->        lcd.flush();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Clears the space of the graph essential refreshing the screen every time a<!-- [et_pb_line_break_holder] -->        \/\/ new data point is added<!-- [et_pb_line_break_holder] -->        lcd.drawRect(21, 11, LCD_WIDTH, 55, true, true);<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    public void closeDevices() {<!-- [et_pb_line_break_holder] -->        try {<!-- [et_pb_line_break_holder] -->            \/\/ Close LCD so it isnt left on at the end of the program<!-- [et_pb_line_break_holder] -->            lcd.close();<!-- [et_pb_line_break_holder] -->        } catch (Exception e) {<!-- [et_pb_line_break_holder] -->            \/\/ This is a better way of handeling exceptions vs throwing them<!-- [et_pb_line_break_holder] -->            System.out.printf(\"Error when trying to close LCD:\\n%s\", e);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/\/ Records the temp into a file<!-- [et_pb_line_break_holder] -->    class Record extends LCDPlot {<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        String name;<!-- [et_pb_line_break_holder] -->        FileWriter outfile;<!-- [et_pb_line_break_holder] -->        int count = 0;<!-- [et_pb_line_break_holder] -->        int counter = 0;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        public Record() throws Exception {<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            DateTimeFormatter dtf = DateTimeFormatter.ofPattern(\"yyyy\/MM\/dd HH:mm:ss\");<!-- [et_pb_line_break_holder] -->            LocalDateTime now = LocalDateTime.now();<!-- [et_pb_line_break_holder] -->            name = dtf.format(now);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Can't title files with \"\/\" or \":\" so they are replaced by \"_\" and \".\"<!-- [et_pb_line_break_holder] -->            name = name.replace(\"\/\", \"_\").replace(\":\", \".\");<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        public void writeValue() throws Exception {<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Creates a file writer to the csv file<!-- [et_pb_line_break_holder] -->            outfile = new FileWriter(name + \".csv\", true);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ If it is the first data point, then it titles the columns in excel file<!-- [et_pb_line_break_holder] -->            if (count == 0) {<!-- [et_pb_line_break_holder] -->                outfile.write(\"Data Points, Temperature \\n\");<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Count keeps track of what data point we are on | If count exceeds the total<!-- [et_pb_line_break_holder] -->            \/\/ numPoints (i.e. the number of points present in the data array) then we<!-- [et_pb_line_break_holder] -->            \/\/ control counter (the index on the most recent data point in the array) to be the last element<!-- [et_pb_line_break_holder] -->            \/\/ in the array<!-- [et_pb_line_break_holder] -->            if (count >= numPoints) {<!-- [et_pb_line_break_holder] -->                this.counter = numPoints - 1;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Writes data point number and data value to excel file<!-- [et_pb_line_break_holder] -->            String num = Double.toString(data.get(this.counter));<!-- [et_pb_line_break_holder] -->            outfile.write(Integer.toString(count) + \",\" + num + \"\\n\");<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            count++;<!-- [et_pb_line_break_holder] -->            this.counter++;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            outfile.close();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->  <\/code><!-- [et_pb_line_break_holder] --><\/pre>\n<p>[\/et_pb_code][et_pb_code admin_label=&#8221;Code Sample &#8211; Netbeans&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; module_class=&#8221;ph-user-netbeans&#8221;]<\/p>\n<pre class=\"language-java\"><!-- [et_pb_line_break_holder] -->  <code><!-- [et_pb_line_break_holder] -->package plotting;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->import java.io.FileWriter;<!-- [et_pb_line_break_holder] -->import java.text.DecimalFormat;<!-- [et_pb_line_break_holder] -->import java.time.LocalDateTime;<!-- [et_pb_line_break_holder] -->import java.time.format.DateTimeFormatter;<!-- [et_pb_line_break_holder] -->import java.util.ArrayList;<!-- [et_pb_line_break_holder] -->import java.util.Collections;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->import com.phidget22.LCD;<!-- [et_pb_line_break_holder] -->import com.phidget22.LCDFont;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->public class LCDPlot {<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    private static ArrayList<Double> data = new ArrayList<Double>();<!-- [et_pb_line_break_holder] -->    private ArrayList<Integer> pixelData = new ArrayList<Integer>();<!-- [et_pb_line_break_holder] -->    private DecimalFormat df = new DecimalFormat(\"0.0\");<!-- [et_pb_line_break_holder] -->    private static int numPoints;<!-- [et_pb_line_break_holder] -->    private double maxTemp = 0;<!-- [et_pb_line_break_holder] -->    private double minTemp = 0;<!-- [et_pb_line_break_holder] -->    private LCD lcd;<!-- [et_pb_line_break_holder] -->    private boolean recordData;<!-- [et_pb_line_break_holder] -->    private Record writeData;<!-- [et_pb_line_break_holder] -->    private int LCD_WIDTH = 127;<!-- [et_pb_line_break_holder] -->    private int Graph_WIDTH = 107;<!-- [et_pb_line_break_holder] -->    private int Graph_HEIGHT = 45;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    public LCDPlot() {<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    ;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\t\/\/ Constructor that records the data passed by user<!-- [et_pb_line_break_holder] -->\tpublic LCDPlot(int dataPoints, boolean recordData) throws Exception {<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        numPoints = dataPoints;<!-- [et_pb_line_break_holder] -->        lcd = new LCD();<!-- [et_pb_line_break_holder] -->        lcd.open(1000);<!-- [et_pb_line_break_holder] -->        lcd.setBacklight(0.5); \/\/ Enable backlight<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        this.recordData = recordData;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        if (recordData) {<!-- [et_pb_line_break_holder] -->            writeData = new Record();<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/\/ Main function that runs all the other functions<!-- [et_pb_line_break_holder] -->    public void start() throws Exception {<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        if (recordData) {<!-- [et_pb_line_break_holder] -->            writeData.writeValue();<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        display();<!-- [et_pb_line_break_holder] -->        yScaling();<!-- [et_pb_line_break_holder] -->        xScaling();<!-- [et_pb_line_break_holder] -->        graph();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/\/ Gets temp from temperature sensor and records in array<!-- [et_pb_line_break_holder] -->    public void addDataPoint(double num) throws Exception {<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Limits array size to the number of points displayed on the screen<!-- [et_pb_line_break_holder] -->        if (data.size() >= numPoints) {<!-- [et_pb_line_break_holder] -->            data.remove(0);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        data.add(num);<!-- [et_pb_line_break_holder] -->        start();<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/\/ Displays elements of graph<!-- [et_pb_line_break_holder] -->    private void display() throws Exception {<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ This initializes the graph axis<!-- [et_pb_line_break_holder] -->        lcd.drawLine(20, 11, 20, 56);<!-- [et_pb_line_break_holder] -->        lcd.drawLine(20, 56, 127, 56);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        maxTemp = Collections.max(data);<!-- [et_pb_line_break_holder] -->        minTemp = Collections.min(data);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Writes Max, Min and Current Temp<!-- [et_pb_line_break_holder] -->        lcd.writeText(LCDFont.DIMENSIONS_5X8, 1, 1, \"Min: \" + String.valueOf(df.format(minTemp)));<!-- [et_pb_line_break_holder] -->        lcd.writeText(LCDFont.DIMENSIONS_5X8, 51, 1, \"Max: \" + String.valueOf(df.format(maxTemp)));<!-- [et_pb_line_break_holder] -->        lcd.writeText(LCDFont.DIMENSIONS_6X12, 101, 1, String.valueOf(df.format(data.get(data.size() - 1))));<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/\/ Auto scales y-axis<!-- [et_pb_line_break_holder] -->    private void yScaling() throws Exception {<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        Double temp = Collections.max(data);<!-- [et_pb_line_break_holder] -->        Double scale = ((maxTemp - minTemp) \/ 5);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Draws ticks and numbers | Starts on pixel 11 and moves down 9 pixels at a<!-- [et_pb_line_break_holder] -->        \/\/ time. At each increment, a small visible line is drawn to indicate the<!-- [et_pb_line_break_holder] -->        \/\/ location as well as a numeric value is printed out on the screen.<!-- [et_pb_line_break_holder] -->        for (int i = 11; i <= 56; i += 9) {<!-- [et_pb_line_break_holder] -->            lcd.drawLine(20, i, 21, i);<!-- [et_pb_line_break_holder] -->            lcd.writeText(LCDFont.DIMENSIONS_5X8, 0, i, Double.toString(Double.valueOf(df.format(temp))));<!-- [et_pb_line_break_holder] -->            temp -= scale;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/\/ Auto scales x-axis<!-- [et_pb_line_break_holder] -->    private void xScaling() throws Exception {<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Draws ticks on x-axis |The graph starts at pixel 20, and draws a vertical<!-- [et_pb_line_break_holder] -->        \/\/ tick of width 2 across the x-axis for each data point<!-- [et_pb_line_break_holder] -->        int scale = Math.round(Graph_WIDTH \/ (numPoints - 1));<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        for (int i = 20 + scale; i < LCD_WIDTH; i += scale) {<!-- [et_pb_line_break_holder] -->            lcd.drawLine(i, 56, i, 58);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/\/ Draws the graph<!-- [et_pb_line_break_holder] -->    private void graph() throws Exception {<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        double range = maxTemp - minTemp;<!-- [et_pb_line_break_holder] -->        int scale = Math.round(Graph_WIDTH \/ (numPoints - 1));<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Changes the pixel location of the data based on min and max data points |<!-- [et_pb_line_break_holder] -->        \/\/ Math: Let x be the pixel location of the data point. x\/Graph_Height in pixels<!-- [et_pb_line_break_holder] -->        \/\/ = (data point - min temp)\/temp range.<!-- [et_pb_line_break_holder] -->        \/\/ Solving for x will result in a ratio where the pixel location simulates the<!-- [et_pb_line_break_holder] -->        \/\/ distribution of the temperature<!-- [et_pb_line_break_holder] -->        for (int i = 0; i < data.size(); i++) {<!-- [et_pb_line_break_holder] -->            double pixel = 56 - (data.get(i) - minTemp) \/ range * Graph_HEIGHT;<!-- [et_pb_line_break_holder] -->            pixelData.add((int) Math.round(pixel));<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Temp 2 gives the pixel for the first time data point<!-- [et_pb_line_break_holder] -->        int temp2 = 20;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Graphs data | The LCD will draw a line between the pixel of the previous data<!-- [et_pb_line_break_holder] -->        \/\/ point and the current data point<!-- [et_pb_line_break_holder] -->        for (int i = 0; i < data.size(); i++) {<!-- [et_pb_line_break_holder] -->            if (i > 0) {<!-- [et_pb_line_break_holder] -->                lcd.drawLine(temp2 - scale, pixelData.get(i - 1), temp2, pixelData.get(i));<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            temp2 += scale;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        pixelData.clear();<!-- [et_pb_line_break_holder] -->        lcd.flush();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Clears the space of the graph essential refreshing the screen every time a<!-- [et_pb_line_break_holder] -->        \/\/ new data point is added<!-- [et_pb_line_break_holder] -->        lcd.drawRect(21, 11, LCD_WIDTH, 55, true, true);<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    public void closeDevices() {<!-- [et_pb_line_break_holder] -->        try {<!-- [et_pb_line_break_holder] -->            \/\/ Close LCD so it isnt left on at the end of the program<!-- [et_pb_line_break_holder] -->            lcd.close();<!-- [et_pb_line_break_holder] -->        } catch (Exception e) {<!-- [et_pb_line_break_holder] -->            \/\/ This is a better way of handeling exceptions vs throwing them<!-- [et_pb_line_break_holder] -->            System.out.printf(\"Error when trying to close LCD:\\n%s\", e);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/\/ Records the temp into a file<!-- [et_pb_line_break_holder] -->    class Record extends LCDPlot {<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        String name;<!-- [et_pb_line_break_holder] -->        FileWriter outfile;<!-- [et_pb_line_break_holder] -->        int count = 0;<!-- [et_pb_line_break_holder] -->        int counter = 0;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        public Record() throws Exception {<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            DateTimeFormatter dtf = DateTimeFormatter.ofPattern(\"yyyy\/MM\/dd HH:mm:ss\");<!-- [et_pb_line_break_holder] -->            LocalDateTime now = LocalDateTime.now();<!-- [et_pb_line_break_holder] -->            name = dtf.format(now);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Can't title files with \"\/\" or \":\" so they are replaced by \"_\" and \".\"<!-- [et_pb_line_break_holder] -->            name = name.replace(\"\/\", \"_\").replace(\":\", \".\");<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        public void writeValue() throws Exception {<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Creates a file writer to the csv file<!-- [et_pb_line_break_holder] -->            outfile = new FileWriter(name + \".csv\", true);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ If it is the first data point, then it titles the columns in excel file<!-- [et_pb_line_break_holder] -->            if (count == 0) {<!-- [et_pb_line_break_holder] -->                outfile.write(\"Data Points, Temperature \\n\");<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Count keeps track of what data point we are on | If count exceeds the total<!-- [et_pb_line_break_holder] -->            \/\/ numPoints (i.e. the number of points present in the data array) then we<!-- [et_pb_line_break_holder] -->            \/\/ control counter (the index on the most recent data point in the array) to be the last element<!-- [et_pb_line_break_holder] -->            \/\/ in the array<!-- [et_pb_line_break_holder] -->            if (count >= numPoints) {<!-- [et_pb_line_break_holder] -->                this.counter = numPoints - 1;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Writes data point number and data value to excel file<!-- [et_pb_line_break_holder] -->            String num = Double.toString(data.get(this.counter));<!-- [et_pb_line_break_holder] -->            outfile.write(Integer.toString(count) + \",\" + num + \"\\n\");<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            count++;<!-- [et_pb_line_break_holder] -->            this.counter++;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            outfile.close();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->  <\/code><!-- [et_pb_line_break_holder] --><\/pre>\n<p>[\/et_pb_code][et_pb_code admin_label=&#8221;Code Sample &#8211; Processing&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; module_class=&#8221;ph-user-processing&#8221;]<\/p>\n<pre class=\"language-java\"><!-- [et_pb_line_break_holder] -->  <code><!-- [et_pb_line_break_holder] -->Code not available for Processing.<!-- [et_pb_line_break_holder] -->  <\/code><!-- [et_pb_line_break_holder] --><\/pre>\n<p>[\/et_pb_code][\/et_pb_column_inner][\/et_pb_row_inner][et_pb_row_inner _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; module_class=&#8221;ph-user-python&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; module_id=&#8221;write-code&#8221;][et_pb_column_inner type=&#8221;4_4&#8243; saved_specialty_column_type=&#8221;3_4&#8243; custom_padding__hover=&#8221;|||&#8221; custom_padding=&#8221;|||&#8221; saved_specialty_column_type=&#8221;3_4&#8243;][et_pb_code admin_label=&#8221;Graphing Library Python&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243;]<\/p>\n<h2>Graphing Library (Python)<\/h2>\n<p><!-- [et_pb_line_break_holder] --><pee>Copy the code below into a new Python file called <strong>LCDPlot.py<\/strong><!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->Not your programming language? <a class=\"ph-toggle-settings\">Set your preferences<\/a> so we can display relevant code examples<\/pee>[\/et_pb_code][et_pb_code admin_label=&#8221;Code Sample&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243;]<\/p>\n<pre class=\"language-python\"><!-- [et_pb_line_break_holder] -->  <code><!-- [et_pb_line_break_holder] -->from Phidget22.Devices.LCD import *<!-- [et_pb_line_break_holder] -->from datetime import datetime<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->class LCDPlot:<!-- [et_pb_line_break_holder] -->    name = \"\"<!-- [et_pb_line_break_holder] -->    counting = 0<!-- [et_pb_line_break_holder] -->    count = 0<!-- [et_pb_line_break_holder] -->    data = []<!-- [et_pb_line_break_holder] -->    pixel_data = []<!-- [et_pb_line_break_holder] -->    num_points = 0<!-- [et_pb_line_break_holder] -->    max_temp = 0<!-- [et_pb_line_break_holder] -->    min_temp = 0<!-- [et_pb_line_break_holder] -->    lcd = LCD()<!-- [et_pb_line_break_holder] -->    record = True<!-- [et_pb_line_break_holder] -->    LCD_WIDTH = 127<!-- [et_pb_line_break_holder] -->    Graph_WIDTH = 107<!-- [et_pb_line_break_holder] -->    Graph_HEIGHT = 45<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    # Constructor that self.self.records the self.self.data passed by user<!-- [et_pb_line_break_holder] -->    def __init__(self, dataPoints, record_data):<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        self.lcd.openWaitForAttachment(1000)<!-- [et_pb_line_break_holder] -->        self.lcd.setBacklight(0.5)<!-- [et_pb_line_break_holder] -->        self.num_points = dataPoints<!-- [et_pb_line_break_holder] -->        self.record = record_data<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        # Initializes the name of the file with date and time<!-- [et_pb_line_break_holder] -->        # Can't title files with \"\/\" or \":\" so they are replaced by \"_\" and \".\"<!-- [et_pb_line_break_holder] -->        if self.record:<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            # Get current time when starting program<!-- [et_pb_line_break_holder] -->            # Used to name the csv file to which the data will be written to<!-- [et_pb_line_break_holder] -->            self.name = datetime.now().strftime(\"%m_%d_%Y %H.%M.%S\")<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    # Main function that runs all the other functions<!-- [et_pb_line_break_holder] -->    def start(self):<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        if self.record:<!-- [et_pb_line_break_holder] -->            self.write_file()<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        self.display()<!-- [et_pb_line_break_holder] -->        self.y_scaling()<!-- [et_pb_line_break_holder] -->        self.x_scaling()<!-- [et_pb_line_break_holder] -->        self.graph()<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    # Gets temp from temperature sensor and records in array<!-- [et_pb_line_break_holder] -->    def add_data_point(self, num):<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        # Limits array size to the number of points displayed on the screen<!-- [et_pb_line_break_holder] -->        if len(self.data) >= self.num_points:<!-- [et_pb_line_break_holder] -->            self.data.pop(0)<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        self.data.append(num)<!-- [et_pb_line_break_holder] -->        self.start()<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    # Displays elements of graph<!-- [et_pb_line_break_holder] -->    def display(self):<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        # This initializes the graph axis<!-- [et_pb_line_break_holder] -->        self.lcd.drawLine(20, 11, 20, 56)<!-- [et_pb_line_break_holder] -->        self.lcd.drawLine(20, 56, 127, 56)<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        self.max_temp = max(self.data)<!-- [et_pb_line_break_holder] -->        self.min_temp = min(self.data)<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        # Writes Max, Min and Current Temp<!-- [et_pb_line_break_holder] -->        self.lcd.writeText(LCDFont.FONT_5x8, 1, 1, \"Min: \" + str(round(self.min_temp, 1)))<!-- [et_pb_line_break_holder] -->        self.lcd.writeText(LCDFont.FONT_5x8, 51, 1, \"Max: \" + str(round(self.max_temp, 1)))<!-- [et_pb_line_break_holder] -->        self.lcd.writeText(LCDFont.FONT_6x12, 101, 1, str(round(self.data[len(self.data) - 1], 1)))<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    # Auto scales x-axis<!-- [et_pb_line_break_holder] -->    def x_scaling(self):<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        # Draws ticks on x-axis |The graph starts at pixel 20, and draws a vertical<!-- [et_pb_line_break_holder] -->        # tick of width 2 across the x-axis for each data point<!-- [et_pb_line_break_holder] -->        scale = round(self.Graph_WIDTH \/ (self.num_points - 1))<!-- [et_pb_line_break_holder] -->        i = 20 + scale<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        while i < self.LCD_WIDTH:<!-- [et_pb_line_break_holder] -->            self.lcd.drawLine(i, 56, i, 58)<!-- [et_pb_line_break_holder] -->            i += scale<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    # Auto scales y-axis<!-- [et_pb_line_break_holder] -->    def y_scaling(self):<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        temp = max(self.data)<!-- [et_pb_line_break_holder] -->        scale = ((self.max_temp - self.min_temp) \/ 5)<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        # Draws ticks and numbers | Starts on pixel 11 and moves down 9 pixels at a<!-- [et_pb_line_break_holder] -->        # time. At each increment, a small visible line is drawn to indicate the<!-- [et_pb_line_break_holder] -->        # location as well as a numeric value is printed out on the screen.<!-- [et_pb_line_break_holder] -->        i = 11<!-- [et_pb_line_break_holder] -->        while i <= 56:<!-- [et_pb_line_break_holder] -->            self.lcd.drawLine(20, i, 21, i)<!-- [et_pb_line_break_holder] -->            self.lcd.writeText(LCDFont.FONT_5x8, 0, i, str(round(temp, 1)))<!-- [et_pb_line_break_holder] -->            temp -= scale<!-- [et_pb_line_break_holder] -->            i += 9<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    # Draws the graph<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    def graph(self):<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        size = self.max_temp - self.min_temp<!-- [et_pb_line_break_holder] -->        scale = round(self.Graph_WIDTH \/ (self.num_points - 1))<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        # Ensures that when there is only 1 data point the scale is not 0. | In this case, an arbitrary value for<!-- [et_pb_line_break_holder] -->        # the scale is set so the the pixel location formula will not divide by zero. This is auto adjusted<!-- [et_pb_line_break_holder] -->        # with more data points.<!-- [et_pb_line_break_holder] -->        if size == 0:<!-- [et_pb_line_break_holder] -->            size = 2<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        # Changes the pixel location of the data based on min and max data points |<!-- [et_pb_line_break_holder] -->        # Math: Let x be the pixel location of the data point. x\/Graph_Height in pixels<!-- [et_pb_line_break_holder] -->        # = (data point - min temp)\/temp range.<!-- [et_pb_line_break_holder] -->        # Solving for x will result in a ratio where the pixel location simulates the<!-- [et_pb_line_break_holder] -->        # distribution of the temperature<!-- [et_pb_line_break_holder] -->        for i in range(len(self.data)):<!-- [et_pb_line_break_holder] -->            pixel = 56 - (self.data[i] - self.min_temp) \/ size * self.Graph_HEIGHT<!-- [et_pb_line_break_holder] -->            self.pixel_data.append(round(pixel))<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        # Temp 2 gives the pixel for the first time data point<!-- [et_pb_line_break_holder] -->        temp2 = 20<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        # Graphs data | The LCD will draw a line between the pixel of the previous data<!-- [et_pb_line_break_holder] -->        # point and the current data point<!-- [et_pb_line_break_holder] -->        for i in range(len(self.data)):<!-- [et_pb_line_break_holder] -->            if i > 0:<!-- [et_pb_line_break_holder] -->                self.lcd.drawLine(temp2 - scale, self.pixel_data[i - 1], temp2, self.pixel_data[i])<!-- [et_pb_line_break_holder] -->            temp2 += scale<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        self.pixel_data.clear()<!-- [et_pb_line_break_holder] -->        self.lcd.flush()<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        # Clears the space of the graph essential refreshing the screen every time a<!-- [et_pb_line_break_holder] -->        # new data point is added<!-- [et_pb_line_break_holder] -->        self.lcd.drawRect(21, 11, self.LCD_WIDTH, 55, True, True)<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    # Records the temp into a file<!-- [et_pb_line_break_holder] -->    def write_file(self):<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        # Creates a file writer to the csv file<!-- [et_pb_line_break_holder] -->        file = open(self.name + \".csv\", \"a\")<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        # If it is the first data point, then it titles the columns in excel file<!-- [et_pb_line_break_holder] -->        if self.count == 0:<!-- [et_pb_line_break_holder] -->            file.write(\"Data points\" + \",\" + \"Temperature \\n\")<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        # Count keeps track of what data point we are on | If count exceeds the total<!-- [et_pb_line_break_holder] -->        # numPoints (i.e. the number of points present in the data array) then we<!-- [et_pb_line_break_holder] -->        # control counter (the index on the most recent data point in the array) to be the last element<!-- [et_pb_line_break_holder] -->        # in the array<!-- [et_pb_line_break_holder] -->        if self.counting >= self.num_points:<!-- [et_pb_line_break_holder] -->            self.counting = self.num_points - 1<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        # Writes data point number and data value to excel file<!-- [et_pb_line_break_holder] -->        file.write(str(self.count) + \",\" + str(self.data[self.counting]) + \"\\n\")<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        self.count += 1<!-- [et_pb_line_break_holder] -->        self.counting += 1<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        file.close()<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    def close_objects(self):<!-- [et_pb_line_break_holder] -->        self.lcd.close()<!-- [et_pb_line_break_holder] -->  <\/code><!-- [et_pb_line_break_holder] --><\/pre>\n<p>[\/et_pb_code][\/et_pb_column_inner][\/et_pb_row_inner][et_pb_row_inner _builder_version=&#8221;4.4.1&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; module_class=&#8221;ph-user-csharp&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; module_id=&#8221;write-code&#8221;][et_pb_column_inner type=&#8221;4_4&#8243; saved_specialty_column_type=&#8221;3_4&#8243; custom_padding__hover=&#8221;|||&#8221; custom_padding=&#8221;|||&#8221; saved_specialty_column_type=&#8221;3_4&#8243;][et_pb_code admin_label=&#8221;Graphing Library C#&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243;]<\/p>\n<h2>Graphing Library (C#)<\/h2>\n<p><!-- [et_pb_line_break_holder] --><pee>Copy the code below into a new C# file called <strong>LCDPlot.cs<\/strong><!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->Not your programming language? <a class=\"ph-toggle-settings\">Set your preferences<\/a> so we can display relevant code examples<\/pee>[\/et_pb_code][et_pb_code admin_label=&#8221;Code Sample&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243;]<\/p>\n<pre class=\"language-csharp\"><!-- [et_pb_line_break_holder] -->  <code><!-- [et_pb_line_break_holder] -->using System;<!-- [et_pb_line_break_holder] -->using System.Collections.Generic;<!-- [et_pb_line_break_holder] -->using System.IO;<!-- [et_pb_line_break_holder] -->using System.Linq;<!-- [et_pb_line_break_holder] -->using Phidget22;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->namespace Plotting<!-- [et_pb_line_break_holder] -->{<!-- [et_pb_line_break_holder] -->    class LCDPlot<!-- [et_pb_line_break_holder] -->    {<!-- [et_pb_line_break_holder] -->        public static List<Double> data = new List<Double>();<!-- [et_pb_line_break_holder] -->        static List<int> pixelData = new List<int>();<!-- [et_pb_line_break_holder] -->        public static int numPoints;<!-- [et_pb_line_break_holder] -->        double maxTemp;<!-- [et_pb_line_break_holder] -->        double minTemp;<!-- [et_pb_line_break_holder] -->        LCD lcd;<!-- [et_pb_line_break_holder] -->        Boolean recordData;<!-- [et_pb_line_break_holder] -->        Record writeData;<!-- [et_pb_line_break_holder] -->        int LCD_WIDTH = 127;<!-- [et_pb_line_break_holder] -->        int Graph_WIDTH = 107;<!-- [et_pb_line_break_holder] -->        int Graph_HEIGHT = 45;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        public LCDPlot()<!-- [et_pb_line_break_holder] -->        {<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Constructor that recrods data passed by user<!-- [et_pb_line_break_holder] -->        public LCDPlot(int dataPoints, Boolean recordData)<!-- [et_pb_line_break_holder] -->        {<!-- [et_pb_line_break_holder] -->            numPoints = dataPoints;<!-- [et_pb_line_break_holder] -->            lcd = new LCD();<!-- [et_pb_line_break_holder] -->            lcd.Open(1000);<!-- [et_pb_line_break_holder] -->            lcd.setBacklight(0.5);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            this.recordData = recordData;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            if (recordData)<!-- [et_pb_line_break_holder] -->                writeData = new Record();<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Main function that runs all other functions<!-- [et_pb_line_break_holder] -->        public void start()<!-- [et_pb_line_break_holder] -->        {<!-- [et_pb_line_break_holder] -->            if (recordData)<!-- [et_pb_line_break_holder] -->                writeData.writeData();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            Display();<!-- [et_pb_line_break_holder] -->            XScaling();<!-- [et_pb_line_break_holder] -->            YScaling();<!-- [et_pb_line_break_holder] -->            Graph();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Gets temp from temp sensor<!-- [et_pb_line_break_holder] -->        public void addDataPoint(double num)<!-- [et_pb_line_break_holder] -->        {<!-- [et_pb_line_break_holder] -->            \/\/ Limits array size to the number of points displayed on the screen<!-- [et_pb_line_break_holder] -->            if (data.Count() >= numPoints)<!-- [et_pb_line_break_holder] -->                data.RemoveAt(0);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            data.Add(num);<!-- [et_pb_line_break_holder] -->            start();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/Displays elements of graph<!-- [et_pb_line_break_holder] -->        private void Display()<!-- [et_pb_line_break_holder] -->        {<!-- [et_pb_line_break_holder] -->            \/\/ This initializes the graph axis<!-- [et_pb_line_break_holder] -->            lcd.DrawLine(20, 11, 20, 56);<!-- [et_pb_line_break_holder] -->            lcd.DrawLine(20, 56, LCD_WIDTH, 56);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            maxTemp = data.Max();<!-- [et_pb_line_break_holder] -->            minTemp = data.Min();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Writes Max, Min and Current Temp<!-- [et_pb_line_break_holder] -->            lcd.WriteText(LCDFont.Dimensions_5x8, 1, 1, \"Min: \" + minTemp.ToString(\"0.0\"));<!-- [et_pb_line_break_holder] -->            lcd.WriteText(LCDFont.Dimensions_5x8, 51, 1, \"Max: \" + maxTemp.ToString(\"0.0\"));<!-- [et_pb_line_break_holder] -->            lcd.WriteText(LCDFont.Dimensions_6x12, 101, 1, data[data.Count - 1].ToString(\"0.0\"));<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Scales x-axis<!-- [et_pb_line_break_holder] -->        private void XScaling()<!-- [et_pb_line_break_holder] -->        {<!-- [et_pb_line_break_holder] -->            double temp = Graph_WIDTH \/ (numPoints - 1);<!-- [et_pb_line_break_holder] -->            int scale = (int)Math.Round(temp);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Draws ticks on x-axis |The graph starts at pixel 20, and draws a vertical<!-- [et_pb_line_break_holder] -->            \/\/ tick of width 2 across the x-axis for each data point<!-- [et_pb_line_break_holder] -->            for (int i = 20 + scale; i<LCD_WIDTH; i += scale)<!-- [et_pb_line_break_holder] -->            {<!-- [et_pb_line_break_holder] -->                lcd.DrawLine(i, 56, i, 58);<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Scales y-axis<!-- [et_pb_line_break_holder] -->        private void YScaling()<!-- [et_pb_line_break_holder] -->        {<!-- [et_pb_line_break_holder] -->            double temp = data.Max();<!-- [et_pb_line_break_holder] -->            double scale = (maxTemp - minTemp) \/ 5;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Draws ticks and numbers | Starts on pixel 11 and moves down 9 pixels at a<!-- [et_pb_line_break_holder] -->            \/\/ time. At each increment, a small visible line is drawn to indicate the<!-- [et_pb_line_break_holder] -->            \/\/ location as well as a numeric value is printed out on the screen.<!-- [et_pb_line_break_holder] -->            for (int i =11; i <= 56; i+=9)<!-- [et_pb_line_break_holder] -->            {<!-- [et_pb_line_break_holder] -->                lcd.DrawLine(20, i, 21, i);<!-- [et_pb_line_break_holder] -->                lcd.WriteText(LCDFont.Dimensions_5x8, 0, i, temp.ToString(\"0.0\"));<!-- [et_pb_line_break_holder] -->                temp -= scale;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/Draws the graph<!-- [et_pb_line_break_holder] -->        private void Graph()<!-- [et_pb_line_break_holder] -->        {<!-- [et_pb_line_break_holder] -->            double temp = (Graph_WIDTH\/(numPoints -1));<!-- [et_pb_line_break_holder] -->            double size = maxTemp - minTemp;<!-- [et_pb_line_break_holder] -->            int scale = (int)Math.Round(temp);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            if (size == 0)<!-- [et_pb_line_break_holder] -->                size = 2;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Changes the pixel location of the data based on min and max data points |<!-- [et_pb_line_break_holder] -->            \/\/ Math: Let x be the pixel location of the data point. x\/Graph_Height in pixels<!-- [et_pb_line_break_holder] -->            \/\/ = (data point - min temp)\/temp range.<!-- [et_pb_line_break_holder] -->            \/\/ Solving for x will result in a ratio where the pixel location simulates the<!-- [et_pb_line_break_holder] -->            \/\/ distribution of the temperature<!-- [et_pb_line_break_holder] -->            for (int i =0; i<data.Count; i++)<!-- [et_pb_line_break_holder] -->            {<!-- [et_pb_line_break_holder] -->                double pixel = 56 - (data[i] - minTemp) \/ size * Graph_HEIGHT;<!-- [et_pb_line_break_holder] -->     <!-- [et_pb_line_break_holder] -->                pixelData.Add((int)Math.Round(pixel));<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Temp 2 gives the pixel for the first time data point<!-- [et_pb_line_break_holder] -->            int temp2 = 20;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Graphs data | The LCD will draw a line between the pixel of the previous data<!-- [et_pb_line_break_holder] -->            \/\/ point and the current data point<!-- [et_pb_line_break_holder] -->            for (int i =0; i <data.Count; i++)<!-- [et_pb_line_break_holder] -->            {<!-- [et_pb_line_break_holder] -->                if (i > 0)<!-- [et_pb_line_break_holder] -->                    lcd.DrawLine(temp2 - scale, pixelData[i - 1], temp2, pixelData[i]);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->                temp2 += scale;<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            pixelData.Clear();<!-- [et_pb_line_break_holder] -->            lcd.Flush();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Clears the space of the graph essential refreshing the screen every time a<!-- [et_pb_line_break_holder] -->            \/\/ new data point is added<!-- [et_pb_line_break_holder] -->            lcd.DrawRectangle(21, 11, LCD_WIDTH, 55, true, true);<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/\/ Records temp into a file<!-- [et_pb_line_break_holder] -->    class Record : LCDPlot{<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        String name;<!-- [et_pb_line_break_holder] -->        int count = 0;<!-- [et_pb_line_break_holder] -->        int counter = 0;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        public Record()<!-- [et_pb_line_break_holder] -->        {<!-- [et_pb_line_break_holder] -->            name = DateTime.Now.ToString();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Can't title files with \"\/\" or \":\" so they are replaced by \"_\" and \".\"<!-- [et_pb_line_break_holder] -->            name = name.Replace(\"\/\", \"_\").Replace(\":\", \".\");<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        public void writeData()<!-- [et_pb_line_break_holder] -->        {<!-- [et_pb_line_break_holder] -->            \/\/ Creates a file writer to the csv file<!-- [et_pb_line_break_holder] -->            StreamWriter sw = new StreamWriter(@name + \".csv\", true);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ If it is the first data point, then it titles the columns in excel file<!-- [et_pb_line_break_holder] -->            if (count == 0)<!-- [et_pb_line_break_holder] -->                sw.WriteLine(\"data points, temperature\");<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Count keeps track of what data point we are on | If count exceeds the total<!-- [et_pb_line_break_holder] -->            \/\/ numPoints (i.e. the number of points present in the data array) then we<!-- [et_pb_line_break_holder] -->            \/\/ control counter (the index on the most recent data point in the array) to be the last element<!-- [et_pb_line_break_holder] -->            \/\/ in the array<!-- [et_pb_line_break_holder] -->            if (count >= numPoints)<!-- [et_pb_line_break_holder] -->                counter = numPoints - 1;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/ Writes data point number and data value to excel file<!-- [et_pb_line_break_holder] -->            sw.WriteLine(count.ToString() + \",\" + data[counter].ToString());<!-- [et_pb_line_break_holder] -->       <!-- [et_pb_line_break_holder] -->            count++;<!-- [et_pb_line_break_holder] -->            counter++;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            sw.Close();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->  <\/code><!-- [et_pb_line_break_holder] --><\/pre>\n<p>[\/et_pb_code][\/et_pb_column_inner][\/et_pb_row_inner][et_pb_row_inner _builder_version=&#8221;4.4.1&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; module_class=&#8221;ph-user-swift&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; module_id=&#8221;write-code&#8221;][et_pb_column_inner type=&#8221;4_4&#8243; saved_specialty_column_type=&#8221;3_4&#8243; custom_padding__hover=&#8221;|||&#8221; custom_padding=&#8221;|||&#8221; saved_specialty_column_type=&#8221;3_4&#8243;][et_pb_code admin_label=&#8221;Graphing Library Swift&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243;]<\/p>\n<h2>Write Code (Swift)<\/h2>\n<p><!-- [et_pb_line_break_holder] --><pee>Code not available for Swift.  Please <a class=\"ph-toggle-settings\">set your preferences<\/a> and select a new language.<\/pee>[\/et_pb_code][\/et_pb_column_inner][\/et_pb_row_inner][et_pb_row_inner admin_label=&#8221;Row&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; module_id=&#8221;usegraphing&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243;][et_pb_column_inner type=&#8221;4_4&#8243; saved_specialty_column_type=&#8221;3_4&#8243; custom_padding__hover=&#8221;|||&#8221; custom_padding=&#8221;|||&#8221; saved_specialty_column_type=&#8221;3_4&#8243;][\/et_pb_column_inner][\/et_pb_row_inner][et_pb_row_inner _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; module_class=&#8221;ph-user-java&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; module_id=&#8221;write-code&#8221;][et_pb_column_inner type=&#8221;4_4&#8243; saved_specialty_column_type=&#8221;3_4&#8243; custom_padding__hover=&#8221;|||&#8221; custom_padding=&#8221;|||&#8221; saved_specialty_column_type=&#8221;3_4&#8243;][et_pb_code admin_label=&#8221;Use the Graphing Library (Java)&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243;]<\/p>\n<h2>Use the Graphing Library (Java)<\/h2>\n<p><!-- [et_pb_line_break_holder] --><pee>Create a new Java project called <strong>Plotting<\/strong> and copy the code below into your project. If you need a reminder of how to do this, revisit the <a href=\"\/education\/learn\/getting-started-kit-tutorial\/configure-ide\">Getting Started Course.<\/a><!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->Not your programming language? <a class=\"ph-toggle-settings\">Set your preferences<\/a> so we can display relevant code examples<\/pee>[\/et_pb_code][et_pb_code admin_label=&#8221;Code Sample &#8211; Eclipse&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; module_class=&#8221;ph-user-eclipse&#8221;]<\/p>\n<pre class=\"language-java\"><!-- [et_pb_line_break_holder] -->  <code><!-- [et_pb_line_break_holder] -->\/\/Add Phidgets Library<!-- [et_pb_line_break_holder] -->import com.phidget22.*;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->public class Plotting {<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    public static void main(String[] args) throws Exception {<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/Create<!-- [et_pb_line_break_holder] -->        TemperatureSensor temperatureSensor = new TemperatureSensor();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/Open<!-- [et_pb_line_break_holder] -->        temperatureSensor.open(1000);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/Create LCDPlot object<!-- [et_pb_line_break_holder] -->        \/\/First argument refers to the number of data points displayed on the graph<!-- [et_pb_line_break_holder] -->        \/\/Second argument indicates whether or not to store data to a file<!-- [et_pb_line_break_holder] -->        LCDPlot graph = new LCDPlot(10, true);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/Use your Phidgets<!-- [et_pb_line_break_holder] -->        while (true) {<!-- [et_pb_line_break_holder] -->            graph.addDataPoint(temperatureSensor.getTemperature());<!-- [et_pb_line_break_holder] -->            Thread.sleep(temperatureSensor.getDataInterval());<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->  <\/code><!-- [et_pb_line_break_holder] --><\/pre>\n<p>[\/et_pb_code][et_pb_code admin_label=&#8221;Code Sample &#8211; Netbeans&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; module_class=&#8221;ph-user-netbeans&#8221;]<\/p>\n<pre class=\"language-java\"><!-- [et_pb_line_break_holder] -->  <code><!-- [et_pb_line_break_holder] -->package plotting;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/Add Phidgets Library<!-- [et_pb_line_break_holder] -->import com.phidget22.*;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->public class Plotting {<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    public static void main(String[] args) throws Exception {<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/Create<!-- [et_pb_line_break_holder] -->        TemperatureSensor temperatureSensor = new TemperatureSensor();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/Open<!-- [et_pb_line_break_holder] -->        temperatureSensor.open(1000);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/Create LCDPlot object<!-- [et_pb_line_break_holder] -->        \/\/First argument refers to the number of data points displayed on the graph<!-- [et_pb_line_break_holder] -->        \/\/Second argument indicates whether or not to store data to a file<!-- [et_pb_line_break_holder] -->        LCDPlot graph = new LCDPlot(10, true);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/Use your Phidgets<!-- [et_pb_line_break_holder] -->        while (true) {<!-- [et_pb_line_break_holder] -->            graph.addDataPoint(temperatureSensor.getTemperature());<!-- [et_pb_line_break_holder] -->            Thread.sleep(temperatureSensor.getDataInterval());<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->  <\/code><!-- [et_pb_line_break_holder] --><\/pre>\n<p>[\/et_pb_code][et_pb_code admin_label=&#8221;Code Sample &#8211; Processing&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; module_class=&#8221;ph-user-processing&#8221;]<\/p>\n<pre class=\"language-java\"><!-- [et_pb_line_break_holder] -->  <code><!-- [et_pb_line_break_holder] -->Code not available for Processing.<!-- [et_pb_line_break_holder] -->  <\/code><!-- [et_pb_line_break_holder] --><\/pre>\n<p>[\/et_pb_code][et_pb_code admin_label=&#8221;Project structure&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243;]<pee>Drag <strong>LCDPlot.java<\/strong> into your new project.<\/pee>[\/et_pb_code][et_pb_video admin_label=&#8221;Video (Netbeans)&#8221; _builder_version=&#8221;4.6.6&#8243; src=&#8221;https:\/\/www.phidgets.com\/education\/wp-content\/uploads\/2021\/07\/lcdgraph_java_netbeans.mp4&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; module_class=&#8221;ph-user-netbeans&#8221; \/][et_pb_video admin_label=&#8221;Video (Eclipse)&#8221; _builder_version=&#8221;4.6.6&#8243; src=&#8221;https:\/\/www.phidgets.com\/education\/wp-content\/uploads\/2021\/07\/lcdgraph_java_eclipse.mp4&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; module_class=&#8221;ph-user-eclipse&#8221; \/][\/et_pb_column_inner][\/et_pb_row_inner][et_pb_row_inner _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; module_class=&#8221;ph-user-python&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; module_id=&#8221;write-code&#8221;][et_pb_column_inner type=&#8221;4_4&#8243; saved_specialty_column_type=&#8221;3_4&#8243; custom_padding__hover=&#8221;|||&#8221; custom_padding=&#8221;|||&#8221; saved_specialty_column_type=&#8221;3_4&#8243;][et_pb_code admin_label=&#8221;Use the Graphing Library (Python)&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243;]<\/p>\n<h2>Use the Graphing Library (Python)<\/h2>\n<p><!-- [et_pb_line_break_holder] --><pee>Copy the code below into a new Python script called <strong>plotting.py<\/strong><!-- [et_pb_line_break_holder] -->Not your programming language? <a class=\"ph-toggle-settings\">Set your preferences<\/a> so we can display relevant code examples<\/pee>[\/et_pb_code][et_pb_code admin_label=&#8221;Code Sample&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243;]<\/p>\n<pre class=\"language-python\"><!-- [et_pb_line_break_holder] -->  <code><!-- [et_pb_line_break_holder] -->#Add Phidgets Library<!-- [et_pb_line_break_holder] -->from Phidget22.Devices.TemperatureSensor import *<!-- [et_pb_line_break_holder] -->#Required for LCD plotting<!-- [et_pb_line_break_holder] -->from LCDPlot import LCDPlot<!-- [et_pb_line_break_holder] -->#Required for sleep statement<!-- [et_pb_line_break_holder] -->import time<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->#Create<!-- [et_pb_line_break_holder] -->temperatureSensor = TemperatureSensor()<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->#Open <!-- [et_pb_line_break_holder] -->temperatureSensor.openWaitForAttachment(1000)<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->#Create LCDPlot object<!-- [et_pb_line_break_holder] -->#First argument refers to the number of data points displayed on the graph<!-- [et_pb_line_break_holder] -->#Second argument indicates whether or not to store data to a file<!-- [et_pb_line_break_holder] -->graph = LCDPlot(10, True) <!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->#Use your Phidgets<!-- [et_pb_line_break_holder] -->while True:<!-- [et_pb_line_break_holder] -->    graph.add_data_point(temperatureSensor.getTemperature())<!-- [et_pb_line_break_holder] -->    time.sleep(temperatureSensor.getDataInterval()\/1000)<!-- [et_pb_line_break_holder] -->  <\/code><!-- [et_pb_line_break_holder] --><\/pre>\n<p>[\/et_pb_code][et_pb_divider _builder_version=&#8221;4.6.6&#8243; divider_weight=&#8221;10px&#8221; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; show_divider=&#8221;off&#8221; \/][et_pb_code admin_label=&#8221;Project structure&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243;]<pee>You should now have both files in the same location.<\/pee>[\/et_pb_code][et_pb_image _builder_version=&#8221;4.6.6&#8243; src=&#8221;https:\/\/www.phidgets.com\/education\/wp-content\/uploads\/2021\/07\/lcd_graph_python_structure2.jpg&#8221; show_in_lightbox=&#8221;on&#8221; align=&#8221;center&#8221; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; \/][\/et_pb_column_inner][\/et_pb_row_inner][et_pb_row_inner _builder_version=&#8221;4.4.1&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; module_class=&#8221;ph-user-csharp&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; module_id=&#8221;write-code&#8221;][et_pb_column_inner type=&#8221;4_4&#8243; saved_specialty_column_type=&#8221;3_4&#8243; custom_padding__hover=&#8221;|||&#8221; custom_padding=&#8221;|||&#8221; saved_specialty_column_type=&#8221;3_4&#8243;][et_pb_code admin_label=&#8221;Use the Graphing Library (C#)&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243;]<\/p>\n<h2>Use the Graphing Library (C#)<\/h2>\n<p><!-- [et_pb_line_break_holder] --><pee>Create a new C# project called <strong>Plotting<\/strong> and copy the code below into your class file. If you need a reminder of how to do this, revisit the <a href=\"\/education\/learn\/getting-started-kit-tutorial\/configure-ide\">Getting Started Course.<\/a><!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->Not your programming language? <a class=\"ph-toggle-settings\">Set your preferences<\/a> so we can display relevant code examples<\/pee>[\/et_pb_code][et_pb_code admin_label=&#8221;Code Sample&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243;]<\/p>\n<pre class=\"language-csharp\"><!-- [et_pb_line_break_holder] -->  <code><!-- [et_pb_line_break_holder] -->\/\/Add Phidgets Library<!-- [et_pb_line_break_holder] -->using Phidget22;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->namespace Plotting<!-- [et_pb_line_break_holder] -->{<!-- [et_pb_line_break_holder] -->    class Program<!-- [et_pb_line_break_holder] -->    {<!-- [et_pb_line_break_holder] -->        static void Main(string[] args)<!-- [et_pb_line_break_holder] -->        {<!-- [et_pb_line_break_holder] -->            \/\/Create<!-- [et_pb_line_break_holder] -->            TemperatureSensor temperatureSensor = new TemperatureSensor();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/Open<!-- [et_pb_line_break_holder] -->            temperatureSensor.Open(1000);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/Create LCDPlot object<!-- [et_pb_line_break_holder] -->            \/\/First argument refers to the number of data points displayed on the graph<!-- [et_pb_line_break_holder] -->            \/\/Second argument indicates whether or not to store data to a file<!-- [et_pb_line_break_holder] -->            LCDPlot graph = new LCDPlot(12, true);<!-- [et_pb_line_break_holder] -->            <!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            \/\/Use your Phidgets<!-- [et_pb_line_break_holder] -->            while (true)<!-- [et_pb_line_break_holder] -->            {<!-- [et_pb_line_break_holder] -->                graph.addDataPoint(temperatureSensor.Temperature);<!-- [et_pb_line_break_holder] -->                System.Threading.Thread.Sleep(temperatureSensor.DataInterval);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->  <\/code><!-- [et_pb_line_break_holder] --><\/pre>\n<p>[\/et_pb_code][et_pb_code admin_label=&#8221;Project structure&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243;]<pee>Drag <strong>LCDPlot.cs<\/strong> into your new project.<\/pee>[\/et_pb_code][et_pb_video admin_label=&#8221;Video (C#)&#8221; _builder_version=&#8221;4.6.6&#8243; src=&#8221;https:\/\/www.phidgets.com\/education\/wp-content\/uploads\/2021\/07\/lcdgraph_csharp.mp4&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; \/][\/et_pb_column_inner][\/et_pb_row_inner][et_pb_row_inner _builder_version=&#8221;4.4.1&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; module_class=&#8221;ph-user-swift&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; module_id=&#8221;write-code&#8221;][et_pb_column_inner type=&#8221;4_4&#8243; saved_specialty_column_type=&#8221;3_4&#8243; custom_padding__hover=&#8221;|||&#8221; custom_padding=&#8221;|||&#8221; saved_specialty_column_type=&#8221;3_4&#8243;][et_pb_code admin_label=&#8221;Use the Graphing Library (Swift)&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243;]<\/p>\n<h2>Use the Graphing Library (Swift)<\/h2>\n<p><!-- [et_pb_line_break_holder] --><pee>Code not available for Swift.  Please <a class=\"ph-toggle-settings\">set your preferences<\/a> and select a new language.<\/pee>[\/et_pb_code][\/et_pb_column_inner][\/et_pb_row_inner][et_pb_row_inner _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; module_class=&#8221;ph-user-java&#8221;][et_pb_column_inner type=&#8221;4_4&#8243; saved_specialty_column_type=&#8221;3_4&#8243; custom_padding__hover=&#8221;|||&#8221; custom_padding=&#8221;|||&#8221; saved_specialty_column_type=&#8221;3_4&#8243;][et_pb_code admin_label=&#8221;Run Your Program (Java)&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243;]<\/p>\n<h2>Run Your Program<\/h2>\n<p><!-- [et_pb_line_break_holder] --><pee>Run your <strong>Plotting.java<\/strong> file. You will see a graph being displayed on the Graphic LCD.<\/pee>[\/et_pb_code][\/et_pb_column_inner][\/et_pb_row_inner][et_pb_row_inner _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; module_class=&#8221;ph-user-csharp&#8221;][et_pb_column_inner type=&#8221;4_4&#8243; saved_specialty_column_type=&#8221;3_4&#8243; custom_padding__hover=&#8221;|||&#8221; custom_padding=&#8221;|||&#8221; saved_specialty_column_type=&#8221;3_4&#8243;][et_pb_code admin_label=&#8221;Run Your Program (C#)&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243;]<\/p>\n<h2>Run Your Program<\/h2>\n<p><!-- [et_pb_line_break_holder] --><pee>Run your program. You will see a graph being displayed on the Graphic LCD.<\/pee>[\/et_pb_code][\/et_pb_column_inner][\/et_pb_row_inner][et_pb_row_inner _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; module_class=&#8221;ph-user-python&#8221;][et_pb_column_inner type=&#8221;4_4&#8243; saved_specialty_column_type=&#8221;3_4&#8243; custom_padding__hover=&#8221;|||&#8221; custom_padding=&#8221;|||&#8221; saved_specialty_column_type=&#8221;3_4&#8243;][et_pb_code admin_label=&#8221;Run Your Program (Python)&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243;]<\/p>\n<h2>Run Your Program<\/h2>\n<p><!-- [et_pb_line_break_holder] --><pee>Run your <strong>plotting.py<\/strong> script. You will see a graph being displayed on the Graphic LCD.<\/pee>[\/et_pb_code][\/et_pb_column_inner][\/et_pb_row_inner][et_pb_row_inner _builder_version=&#8221;4.4.1&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243; module_id=&#8221;practice&#8221;][et_pb_column_inner type=&#8221;4_4&#8243; saved_specialty_column_type=&#8221;3_4&#8243; custom_padding__hover=&#8221;|||&#8221; custom_padding=&#8221;|||&#8221; saved_specialty_column_type=&#8221;3_4&#8243;][et_pb_code admin_label=&#8221;Practice&#8221; _builder_version=&#8221;4.6.6&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243;]<\/p>\n<h2>Practice<\/h2>\n<p><!-- [et_pb_line_break_holder] --><\/p>\n<ol><!-- [et_pb_line_break_holder] --><\/p>\n<li>Try graphing values from a different sensor.<\/li>\n<p><!-- [et_pb_line_break_holder] --><\/p>\n<li>Try modifying the LCDPlot file to add new functionality to the graphing library.<\/li>\n<p><!-- [et_pb_line_break_holder] --><\/ol>\n<p>[\/et_pb_code][\/et_pb_column_inner][\/et_pb_row_inner][et_pb_row_inner admin_label=&#8221;Row&#8221;][et_pb_column_inner type=&#8221;4_4&#8243; saved_specialty_column_type=&#8221;3_4&#8243; custom_padding__hover=&#8221;|||&#8221; custom_padding=&#8221;|||&#8221; saved_specialty_column_type=&#8221;3_4&#8243;][et_pb_code admin_label=&#8221;ph-button-cta: Back to Projects&#8221; _builder_version=&#8221;4.4.1&#8243; box_shadow_horizontal_tablet=&#8221;0px&#8221; box_shadow_vertical_tablet=&#8221;0px&#8221; box_shadow_blur_tablet=&#8221;40px&#8221; box_shadow_spread_tablet=&#8221;0px&#8221; vertical_offset_tablet=&#8221;0&#8243; horizontal_offset_tablet=&#8221;0&#8243; z_index_tablet=&#8221;0&#8243;]<a class=\"ph-button-cta\" href=\"\/education\/learn\/projects\"><!-- [et_pb_line_break_holder] -->  <\/p>\n<div class=\"ph-button-cta__icon\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->  Back to Projects<!-- [et_pb_line_break_holder] --><\/a>[\/et_pb_code][\/et_pb_column_inner][\/et_pb_row_inner][\/et_pb_column][\/et_pb_section]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>from Phidget22.Devices.LCD import *from datetime import datetimeclass LCDPlot: name = &#8220;&#8221; counting = 0 count = 0 data = [] pixel_data = [] num_points = 0 max_temp = 0 min_temp = 0 lcd = LCD() record = True LCD_WIDTH = 127 Graph_WIDTH = 107 Graph_HEIGHT = 45 # Constructor that self.self.records the self.self.data passed by [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":842,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_et_pb_use_builder":"on","_et_pb_old_content":"<!-- wp:paragraph -->\r\n<p>This is an example page. It's different from a blog post because it will stay in one place and will show up in your site navigation (in most themes). Most people start with an About page that introduces them to potential site visitors. It might say something like this:<\/p>\r\n<!-- \/wp:paragraph --><!-- wp:quote -->\r\n<blockquote class=\"wp-block-quote\">\r\n<p>Hi there! I'm a bike messenger by day, aspiring actor by night, and this is my website. I live in Los Angeles, have a great dog named Jack, and I like pi\u00f1a coladas. (And gettin' caught in the rain.)<\/p>\r\n<\/blockquote>\r\n<!-- \/wp:quote --><!-- wp:paragraph -->\r\n<p>...or something like this:<\/p>\r\n<!-- \/wp:paragraph --><!-- wp:quote -->\r\n<blockquote class=\"wp-block-quote\">\r\n<p>The XYZ Doohickey Company was founded in 1971, and has been providing quality doohickeys to the public ever since. Located in Gotham City, XYZ employs over 2,000 people and does all kinds of awesome things for the Gotham community.<\/p>\r\n<\/blockquote>\r\n<!-- \/wp:quote --><!-- wp:paragraph -->\r\n<p>As a new WordPress user, you should go to <a href=\"https:\/\/www.phidgets.com\/education\/wp-admin\/\">your dashboard<\/a> to delete this page and create new pages for your content. Have fun!<\/p>\r\n<!-- \/wp:paragraph -->","_et_gb_content_width":"","footnotes":""},"class_list":["post-6252","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.phidgets.com\/education\/wp-json\/wp\/v2\/pages\/6252","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.phidgets.com\/education\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.phidgets.com\/education\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.phidgets.com\/education\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.phidgets.com\/education\/wp-json\/wp\/v2\/comments?post=6252"}],"version-history":[{"count":30,"href":"https:\/\/www.phidgets.com\/education\/wp-json\/wp\/v2\/pages\/6252\/revisions"}],"predecessor-version":[{"id":8252,"href":"https:\/\/www.phidgets.com\/education\/wp-json\/wp\/v2\/pages\/6252\/revisions\/8252"}],"up":[{"embeddable":true,"href":"https:\/\/www.phidgets.com\/education\/wp-json\/wp\/v2\/pages\/842"}],"wp:attachment":[{"href":"https:\/\/www.phidgets.com\/education\/wp-json\/wp\/v2\/media?parent=6252"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}