Skip to content

Commit

Permalink
Included Streaming lib; added ECHO
Browse files Browse the repository at this point in the history
ECHO outputs serial data with "echo:" attached in front of it.   This allows you to send data to replicatorg witout causing error messages.  Debugging level needs to be set to "INFO" in repg.

Using the streaming lib, messages can be sent like this:

ECHO ("Maximum feedrate "<<_FLOAT(max_feedrate,2))

 will output "echo: Maximum feedrate 300.00"

ECHOLN(x) is the same as ECHO, but adds a linebreak after.
  • Loading branch information
lampmaker committed Oct 18, 2011
1 parent 1f3c0e5 commit d72e485
Show file tree
Hide file tree
Showing 4 changed files with 109 additions and 46 deletions.
2 changes: 2 additions & 0 deletions Marlin/Configuration.h
@@ -1,3 +1,5 @@


#ifndef CONFIGURATION_H
#define CONFIGURATION_H

Expand Down
59 changes: 19 additions & 40 deletions Marlin/EEPROM.h
@@ -1,3 +1,6 @@
#define ECHO(x) Serial << "echo: " << x;
#define ECHOLN(x) Serial << "echo: "<<x<<endl;

//======================================================================================
template <class T> int EEPROM_writeAnything(int &ee, const T& value)
{
Expand All @@ -18,7 +21,6 @@ template <class T> int EEPROM_readAnything(int &ee, T& value)
}
//======================================================================================


#define EEPROM_OFFSET 100

#define EEPROM_VERSION "V04" // IMPORTANT: Whenever there are changes made to the variables stored in EEPROM
Expand Down Expand Up @@ -46,7 +48,7 @@ void StoreSettings() {
char ver2[4]=EEPROM_VERSION;
i=EEPROM_OFFSET;
EEPROM_writeAnything(i,ver2); // validate data
Serial.println("Settings Stored");
ECHOLN("Settings Stored");

}

Expand All @@ -55,7 +57,7 @@ void RetrieveSettings(bool def=false){ // if def=true, the default values will
char stored_ver[4];
char ver[4]=EEPROM_VERSION;
EEPROM_readAnything(i,stored_ver); //read stored version
Serial.print("Version: [");Serial.print(ver);Serial.print("] Stored version: [");Serial.print(stored_ver);Serial.println("]");
// ECHOLN("Version: [" << ver << "] Stored version: [" << stored_ver << "]");
if ((!def)&&(strncmp(ver,stored_ver,3)==0)) { // version number match
EEPROM_readAnything(i,axis_steps_per_unit);
EEPROM_readAnything(i,max_feedrate);
Expand All @@ -70,7 +72,7 @@ void RetrieveSettings(bool def=false){ // if def=true, the default values will
EEPROM_readAnything(i,Kp);
EEPROM_readAnything(i,Ki);
EEPROM_readAnything(i,Kd);
Serial.println("Stored settings retreived:");
ECHOLN("Stored settings retreived:");
}
else {
float tmp1[]=DEFAULT_AXIS_STEPS_PER_UNIT;
Expand All @@ -88,43 +90,20 @@ void RetrieveSettings(bool def=false){ // if def=true, the default values will
mintravelfeedrate=DEFAULT_MINTRAVELFEEDRATE
max_xy_jerk=DEFAULT_XYJERK;
max_z_jerk=DEFAULT_ZJERK;
Serial.println("Using Default settings:");
ECHOLN("Using Default settings:");
}
Serial.println("Steps per unit:");
Serial.print(" M92");
Serial.print(" X");Serial.print(axis_steps_per_unit[0]);
Serial.print(" Y");Serial.print(axis_steps_per_unit[1]);
Serial.print(" Z");Serial.print(axis_steps_per_unit[2]);
Serial.print(" E");Serial.println(axis_steps_per_unit[3]);
Serial.println("Maximum feedrates (mm/s):");
Serial.print (" M203");
Serial.print(" X");Serial.print(max_feedrate[0]/60);
Serial.print(" Y");Serial.print(max_feedrate[1]/60);
Serial.print(" Z");Serial.print(max_feedrate[2]/60);
Serial.print(" E");Serial.println(max_feedrate[3]/60);
Serial.println("Maximum Acceleration (mm/s2):");
Serial.print(" M201");
Serial.print(" X");Serial.print(max_acceleration_units_per_sq_second[0]);
Serial.print(" Y");Serial.print(max_acceleration_units_per_sq_second[1]);
Serial.print(" Z");Serial.print(max_acceleration_units_per_sq_second[2]);
Serial.print(" E");Serial.println(max_acceleration_units_per_sq_second[3]);
Serial.println("Acceleration: S=acceleration, T=retract acceleration");
Serial.print(" M204");
Serial.print(" S");Serial.print(acceleration);
Serial.print(" T");Serial.println(retract_acceleration);
Serial.println("Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum xY jerk (mm/s), Z=maximum Z jerk (mm/s)");
Serial.print(" M205");
Serial.print(" S");Serial.print(minimumfeedrate/60);
Serial.print(" T");Serial.print(mintravelfeedrate/60);
Serial.print(" B");Serial.print(minsegmenttime);
Serial.print(" X");Serial.print(max_xy_jerk/60);
Serial.print(" Z");Serial.println(max_z_jerk/60);
Serial.println("PID settings:");
Serial.print(" M301");
Serial.print(" P");Serial.print(Kp);
Serial.print(" I");Serial.print(Ki);
Serial.print(" D");Serial.println(Kd);

ECHOLN("Steps per unit:");
ECHOLN(" M92 X" <<_FLOAT(axis_steps_per_unit[0],3) << " Y" << _FLOAT(axis_steps_per_unit[1],3) << " Z" << _FLOAT(axis_steps_per_unit[2],3) << " E" << _FLOAT(axis_steps_per_unit[3],3));
ECHOLN("Maximum feedrates (mm/s):");
ECHOLN(" M203 X" <<_FLOAT(max_feedrate[0]/60,2)<<" Y" << _FLOAT(max_feedrate[1]/60,2) << " Z" << _FLOAT(max_feedrate[2]/60,2) << " E" << _FLOAT(max_feedrate[3]/60,2));
ECHOLN("Maximum Acceleration (mm/s2):");
ECHOLN(" M201 X" <<_FLOAT(max_acceleration_units_per_sq_second[0],0) << " Y" << _FLOAT(max_acceleration_units_per_sq_second[1],0) << " Z" << _FLOAT(max_acceleration_units_per_sq_second[2],0) << " E" << _FLOAT(max_acceleration_units_per_sq_second[3],0));
ECHOLN("Acceleration: S=acceleration, T=retract acceleration");
ECHOLN(" M204 S" <<_FLOAT(acceleration,2) << " T" << _FLOAT(retract_acceleration,2));
ECHOLN("Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum xY jerk (mm/s), Z=maximum Z jerk (mm/s)");
ECHOLN(" M205 S" <<_FLOAT(minimumfeedrate/60,2) << " T" << _FLOAT(mintravelfeedrate/60,2) << " B" << _FLOAT(minsegmenttime,2) << " X" << _FLOAT(max_xy_jerk/60,2) << " Z" << _FLOAT(max_z_jerk/60,2));
ECHOLN("PID settings:");
ECHOLN(" M301 P" << _FLOAT(Kp,3) << " I" <<_ FLOAT(Ki,3) << " D" << _FLOAT(Kd,3));
}


10 changes: 4 additions & 6 deletions Marlin/Marlin.pde
Expand Up @@ -36,15 +36,14 @@
This firmware is optimized for gen6 electronics.
*/


#include <EEPROM.h>
#include "fastio.h"
#include "Configuration.h"
#include "pins.h"
#include "Marlin.h"
#include "speed_lookuptable.h"
#include "lcd.h"

#include "streaming.h"

char version_string[] = "U0.9.3.3-BK";

Expand Down Expand Up @@ -296,8 +295,7 @@ void setup()
{

Serial.begin(BAUDRATE);
Serial.print("Marlin ");
Serial.println(version_string);
ECHOLN("Marlin "<<version_string);
Serial.println("start");
#if defined FANCY_LCD || defined SIMPLE_LCD
lcd_init();
Expand Down Expand Up @@ -1158,7 +1156,7 @@ inline void process_commands()
Serial.print("Kd ");Serial.println(Kd*PID_dT);
temp_iState_min = 0.0;
if (Ki!=0) {
temp_iState_max = PID_INTEGRAL_DRIVE_MAX / Ki;
temp_iState_max = PID_INTEGRAL_DRIVE_MAX / (Ki/100.0);
}
else temp_iState_max = 1.0e10;
break;
Expand Down Expand Up @@ -1406,7 +1404,7 @@ void manage_heater()
pTerm = (Kp * error) / 100.0;
temp_iState += error;
temp_iState = constrain(temp_iState, temp_iState_min, temp_iState_max);
iTerm = (Ki * temp_iState);
iTerm = (Ki * temp_iState)/100.0;
dTerm = (Kd * (current_raw_average - temp_dState)) / 100.0;
temp_dState = current_raw_average;
HeaterPower= constrain(pTerm + iTerm - dTerm, 0, PID_MAX);
Expand Down
84 changes: 84 additions & 0 deletions Marlin/streaming.h
@@ -0,0 +1,84 @@
/*
Streaming.h - Arduino library for supporting the << streaming operator
Copyright (c) 2010 Mikal Hart. All rights reserved.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/

#ifndef ARDUINO_STREAMING
#define ARDUINO_STREAMING

//#include <WProgram.h>

#define STREAMING_LIBRARY_VERSION 4

// Generic template
template<class T>
inline Print &operator <<(Print &stream, T arg)
{ stream.print(arg); return stream; }

struct _BASED
{
long val;
int base;
_BASED(long v, int b): val(v), base(b)
{}
};

#define _HEX(a) _BASED(a, HEX)
#define _DEC(a) _BASED(a, DEC)
#define _OCT(a) _BASED(a, OCT)
#define _BIN(a) _BASED(a, BIN)
#define _BYTE(a) _BASED(a, BYTE)

// Specialization for class _BASED
// Thanks to Arduino forum user Ben Combee who suggested this
// clever technique to allow for expressions like
// Serial << _HEX(a);

inline Print &operator <<(Print &obj, const _BASED &arg)
{ obj.print(arg.val, arg.base); return obj; }

#if ARDUINO >= 18
// Specialization for class _FLOAT
// Thanks to Michael Margolis for suggesting a way
// to accommodate Arduino 0018's floating point precision
// feature like this:
// Serial << _FLOAT(gps_latitude, 6); // 6 digits of precision

struct _FLOAT
{
float val;
int digits;
_FLOAT(double v, int d): val(v), digits(d)
{}
};

inline Print &operator <<(Print &obj, const _FLOAT &arg)
{ obj.print(arg.val, arg.digits); return obj; }
#endif

// Specialization for enum _EndLineCode
// Thanks to Arduino forum user Paul V. who suggested this
// clever technique to allow for expressions like
// Serial << "Hello!" << endl;

enum _EndLineCode { endl };

inline Print &operator <<(Print &obj, _EndLineCode arg)
{ obj.println(); return obj; }

#endif

0 comments on commit d72e485

Please sign in to comment.