// LCD_PLOT - Arduino
//
// Tx ---------------------------- To Serial LCD (LCD #117)
//
// Peter H Anderson, Baltimore, MD, May 10, '07
void setup()
{
Serial.begin(9600);
delay(100);
Serial.print("?B40"); // set backlight intensity
delay(100);
Serial.print("?D00000000000000000"); // define special characters
delay(300); // delay to allow write to EEPROM
Serial.print("?D1000000000000001f");
delay(300);
Serial.print("?D20000000000001f1f");
delay(300);
Serial.print("?D300000000001f1f1f");
delay(300);
Serial.print("?D4000000001f1f1f1f");
delay(300);
Serial.print("?D50000001f1f1f1f1f");
delay(300);
Serial.print("?D600001f1f1f1f1f1f");
delay(300);
Serial.print("?D7001f1f1f1f1f1f1f");
delay(300);
}
void loop()
{
int i, scale32_array[30], temperature, scale32, num_cols;
Serial.print("?f");
delay(200);
num_cols = 0; // number of cols of data initialized
for (i=0; i<30; i++)
{
temperature = meas_temp(i);
scale32 = scale_temperature(temperature);
num_cols = add_to_array(scale32_array, scale32, num_cols);
plot_array(scale32_array, num_cols);
delay(1000); // **************** Adjust as required
}
while(1)
{
/* loop */
}
}
void plot_array(int a[], int num_cols)
{
int n;
for (n=0; n<num_cols; n++)
{
plot_bar(a[n], n);
}
}
int add_to_array(int a[], int v, int num_col)
{
int n, index;
index = num_col;
if (index < 20)
{
a[index] = v;
++index;
return(index); // number of elements in the array
}
else
{
for (n=0; n<19; n++)
{
a[n] = a[n+1]; // move to the left
}
a[19] = v; // put the new element on the end
return(20); // number of elements in the array
}
}
int meas_temp(int n)
{
// this is a stub which simulates a teamperature reading
const int temp_readings[30] = {500, 550, 525, 550, 567, 575,
592, 613, 650, 675, 690, 703,
705, 715, 712, 717, 712, 700,
695, 690, 675, 680, 670, 665,
655, 650, 640, 645, 640, 635};
return(temp_readings[n]);
}
int scale_temperature(int t)
{
int num_lines;
num_lines = (28 * t - 28* 490) / (720 - 490); // 28 * (t - 475) / (750 - 475)
return(num_lines);
}
void plot_bar(int hght, int col)
{
int n, row;
for (n=0; n <4; n++)
{
row = 3 - n;
Serial.print("?x");
if(col < 10)
{
Serial.print("0"); // be sure it is two characters
}
Serial.print(col);
Serial.print("?y");
Serial.print(row);
if (hght >=7)
{
Serial.print("?7"); // lay down a full block
hght = hght - 7;
}
else
{
Serial.print("?");
Serial.print(hght);
hght = 0;
}
delay(10);
}
}