1111
1212 The library, these listeners, a quick-start guide, and usage examples are available at:
1313
14- https://github.com/devinconley/ArduinoPlotter
14+ https://github.com/devinconley/Arduino-Plotter
1515
1616 -------------------------------------------------------------------------------------------
1717 Plotter
18- v1.1 .0
19- https://github.com/devinconley/ArduinoPlotter
18+ v2.0 .0
19+ https://github.com/devinconley/Arduino-Plotter
2020 by Devin Conley
2121 ===========================================================================================
2222 */
2323
2424#include " Plotter.h"
2525
26+ // Plotter
27+
2628Plotter::Plotter () {
2729 Serial.begin (115200 );
2830 head = NULL ;
@@ -33,145 +35,135 @@ Plotter::Plotter() {
3335 last_updated = millis ();
3436}
3537
36- Plotter::~Plotter () {
37- GraphNode* temp = head;
38- GraphNode* temp_next;
39- while (temp->next ) {
40- temp_next = temp->next ;
38+ Plotter::~Plotter ()
39+ {
40+ Graph * temp = head;
41+ Graph * temp_next;
42+ while (temp->next )
43+ {
44+ temp_next = temp->next ;
45+ delete temp;
46+ temp = temp_next;
47+ }
4148 delete temp;
42- temp = temp_next;
43- }
44- delete temp;
45- }
46-
47- void Plotter::addTimeGraph (String title, int points_displayed, String labelA, double & refA) {
48- String labels[] = {labelA};
49- double * refs[] = {&refA};
50- addGraphHelper (title, labels, refs, 1 , false , points_displayed);
5149}
5250
53- void Plotter::addTimeGraph (String title, int points_displayed, String labelA, double & refA,
54- String labelB, double & refB) {
55- String labels[] = {labelA, labelB};
56- double * refs[] = {&refA, &refB};
57- addGraphHelper (title, labels, refs, 2 , false , points_displayed);
51+ void Plotter::addGraphHelper (String title, VarWrapper * wrappers, int sz, bool xvy, int points_displayed) {
52+ Graph * temp = new Graph ( title, wrappers, sz, xvy, points_displayed );
53+ if (head)
54+ {
55+ tail->next = temp;
56+ tail = temp;
57+ }
58+ else
59+ {
60+ head = temp;
61+ tail = temp;
62+ }
63+
64+ total_size += sz;
65+ num_graphs++;
66+ if (points_displayed > max_points_displayed)
67+ {
68+ max_points_displayed = points_displayed;
69+ }
70+
71+ last_updated = millis ();
5872}
5973
60- void Plotter::addTimeGraph (String title, int points_displayed, String labelA, double & refA,
61- String labelB, double & refB, String labelC, double & refC) {
62- String labels[] = {labelA, labelB, labelC};
63- double * refs[] = {&refA, &refB, &refC};
64- addGraphHelper (title, labels, refs, 3 , false , points_displayed);
74+ bool Plotter::remove (int index) {
75+ if (num_graphs == 0 || index < 0 || num_graphs <= index)
76+ {
77+ return false ;
78+ }
79+ else
80+ {
81+ Graph * temp = head;
82+ if (index == 0 )
83+ {
84+ head = head->next ;
85+ delete temp;
86+ }
87+ else
88+ {
89+ Graph * last = temp;
90+ for (int i = 0 ; i < index; i++)
91+ {
92+ last = temp;
93+ temp = temp->next ;
94+ }
95+ last->next = temp->next ;
96+ num_graphs--;
97+ total_size -= temp->size ;
98+ delete temp;
99+ }
100+ last_updated = millis ();
101+ return true ;
102+ }
65103}
66104
67- void Plotter::addTimeGraph (String title, int points_displayed, String labelA, double & refA,
68- String labelB, double & refB, String labelC, double & refC,
69- String labelD, double & refD) {
70- String labels[] = {labelA, labelB, labelC, labelD};
71- double * refs[] = {&refA, &refB, &refC, &refD};
72- addGraphHelper (title, labels, refs, 4 , false , points_displayed);
105+ void Plotter::plot () {
106+ String code = OUTER_KEY;
107+ code += (num_graphs + INNER_KEY + total_size + INNER_KEY
108+ + max_points_displayed + INNER_KEY + last_updated + INNER_KEY);
109+ Serial.print (code);
110+ Graph * temp = head;
111+ while (temp != NULL )
112+ {
113+ Serial.println ();
114+ temp->plot ();
115+ temp = temp->next ;
116+ }
117+ Serial.println (OUTER_KEY);
73118}
74119
75- void Plotter::addTimeGraph (String title, int points_displayed, String labelA, double & refA,
76- String labelB, double & refB, String labelC, double & refC,
77- String labelD, double & refD, String labelE, double & refE) {
78- String labels[] = {labelA, labelB, labelC, labelD, labelE};
79- double * refs[] = {&refA, &refB, &refC, &refD, &refE};
80- addGraphHelper (title, labels, refs, 5 , false , points_displayed);
81- }
120+ // Graph
82121
83- void Plotter::addTimeGraph (String title, int points_displayed, String labelA, double & refA,
84- String labelB, double & refB, String labelC, double & refC,
85- String labelD, double & refD, String labelE, double & refE,
86- String labelF, double & refF) {
87- String labels[] = {labelA, labelB, labelC, labelD, labelE, labelF};
88- double * refs[] = {&refA, &refB, &refC, &refD, &refE, &refF};
89- addGraphHelper (title, labels, refs, 6 , false , points_displayed);
90- }
91-
92- void Plotter::addXYGraph (String title, int points_displayed, String labelX, double & refX,
93- String labelY, double & refY) {
94- String labels[] = {labelX, labelY};
95- double * refs[] = {&refX, &refY};
96- addGraphHelper (title, labels, refs, 2 , true , points_displayed);
97- }
122+ Plotter::Graph::Graph (String title, VarWrapper * wrappers, int size, bool xvy, int points_displayed) :
123+ title( title ),
124+ wrappers( wrappers ),
125+ size( size ),
126+ xvy( xvy ),
127+ points_displayed( points_displayed ),
128+ next( NULL )
129+ {}
98130
99- void Plotter::addGraphHelper (String title, String labels[], double * refs[], int sz, bool xvy, int points_displayed) {
100- GraphNode* temp = new GraphNode (title, labels, refs, sz, xvy, points_displayed);
101- if (head) {
102- tail->next = temp;
103- tail = temp;
104- } else {
105- head = temp;
106- tail = temp;
107- }
108-
109- total_size += sz;
110- num_graphs++;
111- if (points_displayed > max_points_displayed) {
112- max_points_displayed = points_displayed;
113- }
114- last_updated = millis ();
131+ Plotter::Graph::~Graph ()
132+ {
133+ delete[] wrappers;
115134}
116135
117- bool Plotter::remove (int index) {
118- if (num_graphs == 0 || index < 0 || num_graphs <= index) {
119- return false ;
120- } else {
121- GraphNode* temp = head;
122- if (index == 0 ) {
123- head = head->next ;
124- delete temp;
125- } else {
126- GraphNode* last = temp;
127- for (int i = 0 ; i < index; i++) {
128- last = temp;
129- temp = temp->next ;
130- }
131- last->next = temp->next ;
132- num_graphs--;
133- total_size -= temp->size ;
134- delete temp;
136+ void Plotter::Graph::plot () {
137+ Serial.print (title); Serial.print (INNER_KEY);
138+ Serial.print (xvy); Serial.print (INNER_KEY);
139+ Serial.print (points_displayed); Serial.print (INNER_KEY);
140+ Serial.print (size); Serial.print (INNER_KEY);
141+ for (int i = 0 ; i < size; i++)
142+ {
143+ Serial.print ( wrappers[i].GetLabel () ); Serial.print (INNER_KEY);
144+ Serial.print ( wrappers[i].GetValue () ); Serial.print (INNER_KEY);
135145 }
136- last_updated = millis ();
137- return true ;
138- }
139146}
140147
141- void Plotter::plot () {
142- String code = OUTER_KEY;
143- code += (num_graphs + INNER_KEY + total_size + INNER_KEY
144- + max_points_displayed + INNER_KEY + last_updated + INNER_KEY);
145- Serial.print (code);
146- GraphNode* temp = head;
147- while (temp != NULL ) {
148- Serial.println ();
149- temp->plot ();
150- temp = temp->next ;
151- }
152- Serial.println (OUTER_KEY);
153- }
148+ // VariableWrapper
149+
150+ Plotter::VarWrapper::VarWrapper () :
151+ ref( NULL ),
152+ deref( NULL )
153+ {}
154154
155+ Plotter::VarWrapper::VarWrapper ( String label, void * ref, double ( * deref )( void * ) ) :
156+ label( label ),
157+ ref ( ref ),
158+ deref ( deref )
159+ {}
155160
156- Plotter::GraphNode::GraphNode (String title, String* _labels, double ** _refs, int size, bool xvy,
157- int points_displayed) : title(title), size(size), xvy(xvy),
158- points_displayed(points_displayed) {
159- next = NULL ;
160- labels = new String[size];
161- refs = new double *[size];
162- for (int i = 0 ; i < size; i++) {
163- labels[i] = _labels[i];
164- refs[i] = _refs[i];
165- }
161+ String Plotter::VarWrapper::GetLabel ()
162+ {
163+ return label;
166164}
167165
168- void Plotter::GraphNode::plot () {
169- Serial.print (title); Serial.print (INNER_KEY);
170- Serial.print (xvy); Serial.print (INNER_KEY);
171- Serial.print (points_displayed); Serial.print (INNER_KEY);
172- Serial.print (size); Serial.print (INNER_KEY);
173- for (int i = 0 ; i < size; i++) {
174- Serial.print (labels[i]); Serial.print (INNER_KEY);
175- Serial.print (*(refs[i])); Serial.print (INNER_KEY);
176- }
166+ double Plotter::VarWrapper::GetValue ()
167+ {
168+ return deref ( ref );
177169}
0 commit comments