chiark / gitweb /
made progmem mainly, found one bug in cardreader, added a empty class for cardreader...
authorBernhard Kubicek <kubicek@gmx.at>
Mon, 7 Nov 2011 21:33:13 +0000 (22:33 +0100)
committerBernhard Kubicek <kubicek@gmx.at>
Mon, 7 Nov 2011 21:33:13 +0000 (22:33 +0100)
Marlin/EEPROMwrite.h
Marlin/Marlin.h
Marlin/Marlin.pde
Marlin/cardreader.h
Marlin/cardreader.pde
Marlin/pins.h
Marlin/ultralcd.pde

index db9f2fde17fd16d522b1f4617e5b0eebcc910cba..ae31bc9ec407b46a687dc9bbdd794a505a0f5015 100644 (file)
@@ -25,6 +25,19 @@ template <class T> int EEPROM_readAnything(int &ee, T& value)
 }
 //======================================================================================
 
+#include <avr/pgmspace.h>
+
+void serialprintPGM(const char *str)
+{
+  char ch=pgm_read_byte(str);
+  while(ch)
+  {
+    Serial.print(ch);
+    ch=pgm_read_byte(++str);
+  }
+}
+#define SerialprintPGM(x) serialprintPGM(PSTR(x))
+
 #define EEPROM_OFFSET 100
 
 
@@ -62,7 +75,7 @@ void StoreSettings()
   char ver2[4]=EEPROM_VERSION;
   i=EEPROM_OFFSET;
   EEPROM_writeAnything(i,ver2); // validate data
-  SERIAL_ECHOLN("Settings Stored");
+  SerialprintPGM("echo: Settings Stored\n");
 }
 
 void RetrieveSettings(bool def=false)
@@ -91,7 +104,7 @@ void RetrieveSettings(bool def=false)
     EEPROM_readAnything(i,Ki);
     EEPROM_readAnything(i,Kd);
 
-    SERIAL_ECHOLN("Stored settings retreived:");
+    SerialprintPGM("echo: Stored settings retreived:\n");
   }
   else 
   {
@@ -111,21 +124,57 @@ void RetrieveSettings(bool def=false)
     mintravelfeedrate=DEFAULT_MINTRAVELFEEDRATE;
     max_xy_jerk=DEFAULT_XYJERK;
     max_z_jerk=DEFAULT_ZJERK;
-    SERIAL_ECHOLN("Using Default settings:");
+    SerialprintPGM("echo: Using Default settings:\n");
   }
-  SERIAL_ECHOLN("Steps per unit:");
-  SERIAL_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));
-  SERIAL_ECHOLN("Maximum feedrates (mm/s):");
-  SERIAL_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));
-  SERIAL_ECHOLN("Maximum Acceleration (mm/s2):");
-  SERIAL_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));
-  SERIAL_ECHOLN("Acceleration: S=acceleration, T=retract acceleration");
-  SERIAL_ECHOLN("   M204 S"  <<_FLOAT(acceleration,2) << " T" << _FLOAT(retract_acceleration,2));
-  SERIAL_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)");
-  SERIAL_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));
+  SerialprintPGM("echo: Steps per unit:\n   M92 X");
+    Serial.print(axis_steps_per_unit[0]);
+    SerialprintPGM(" Y"); 
+    Serial.print(axis_steps_per_unit[1]);
+    SerialprintPGM(" Z");
+    Serial.print(axis_steps_per_unit[2]);
+    SerialprintPGM(" E");
+    Serial.print(axis_steps_per_unit[3]);
+    
+  SerialprintPGM("\nMaximum feedrates (mm/s):\n   M203 X"  );
+    Serial.print(max_feedrate[0]/60);
+    SerialprintPGM(" Y" ); 
+    Serial.print(max_feedrate[1]/60 ); 
+    SerialprintPGM(" Z" ); 
+    Serial.print(max_feedrate[2]/60 ); 
+    SerialprintPGM(" E" ); 
+    Serial.print(max_feedrate[3]/60);
+  SerialprintPGM("\nMaximum Acceleration (mm/s2):\n   M201 X"  );
+    Serial.print(max_acceleration_units_per_sq_second[0] ); 
+    SerialprintPGM(" Y" ); 
+    Serial.print(max_acceleration_units_per_sq_second[1] ); 
+    SerialprintPGM(" Z" ); 
+    Serial.print(max_acceleration_units_per_sq_second[2] );
+    SerialprintPGM(" E" ); 
+    Serial.print(max_acceleration_units_per_sq_second[3]);
+  SerialprintPGM("\necho: Acceleration: S=acceleration, T=retract acceleration\n   M204 S"  );
+    Serial.print(acceleration ); 
+    SerialprintPGM(" T" ); 
+    Serial.print(retract_acceleration);
+  SerialprintPGM("\necho: 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)");
+  SerialprintPGM("   M205 S"  );
+    Serial.print(minimumfeedrate/60 ); 
+    SerialprintPGM(" T" ); 
+    Serial.print(mintravelfeedrate/60 ); 
+    SerialprintPGM(" B" ); 
+    Serial.print(minsegmenttime ); 
+    SerialprintPGM(" X" ); 
+    Serial.print(max_xy_jerk/60 ); 
+    SerialprintPGM(" Z" ); 
+    Serial.print(max_z_jerk/60);
+    SerialprintPGM("\n" ); 
   #ifdef PIDTEMP
-    SERIAL_ECHOLN("PID settings:");
-    SERIAL_ECHOLN("   M301 P"  << _FLOAT(Kp,3) << " I" << _FLOAT(Ki,3) << " D" << _FLOAT(Kd,3));  
+    SerialprintPGM("PID settings:");
+    SerialprintPGM("   M301 P"  ); 
+    Serial.print(Kp ); 
+    SerialprintPGM(" I" ); 
+    Serial.print(Ki ); 
+    SerialprintPGM(" D" ); 
+    Serial.print(Kd);  
   #endif
 }  
 
index 21eadeeb5ecdc91b459f1cb447abe9833bdd1d59..61b56fb97c443aab276b16548a1a3372b27650a5 100644 (file)
@@ -9,8 +9,10 @@
 #include "streaming.h"
 #define SERIAL_ECHO(x) Serial << "echo: " << x;
 #define SERIAL_ECHOLN(x) Serial << "echo: "<<x<<endl;
-#define SERIAL_ERROR(x) Serial << "echo: ERROR: " << x;
-#define SERIAL_ERRORLN(x) Serial << "echo: ERROR: " << x<<endl;
+#define SERIAL_ERROR(x) Serial << "Error: " << x;
+#define SERIAL_ERRORLN(x) Serial << "Error: " << x<<endl;
+#define SERIAL_PROTOCOL(x) Serial << x;
+#define SERIAL_PROTOCOLLN(x) Serial << x<<endl;
 
 void get_command();
 void process_commands();
index 104fc6576e93b07df0b8e3ba574fb0f48d1e1023..311ab0180df3708df2367a1fc1b0a5484a6f2c8f 100644 (file)
@@ -44,6 +44,7 @@ char version_string[] = "1.0.0 Alpha 1";
 
 
 
+
 // look here for descriptions of gcodes: http://linuxcnc.org/handbook/gcode/g-code.html
 // http://objects.reprap.org/wiki/Mendel_User_Manual:_RepRapGCodes
 
@@ -171,6 +172,23 @@ static unsigned long stoptime=0;
 //===========================================================================
 
 
+extern "C"{
+  extern unsigned int __bss_end;
+  extern unsigned int __heap_start;
+  extern void *__brkval;
+
+  int freeMemory() {
+    int free_memory;
+
+    if((int)__brkval == 0)
+      free_memory = ((int)&free_memory) - ((int)&__bss_end);
+    else
+      free_memory = ((int)&free_memory) - ((int)__brkval);
+
+    return free_memory;
+  }
+}
+
 
 //adds an command to the main command buffer
 //thats really done in a non-safe way.
@@ -191,7 +209,9 @@ void setup()
 { 
   Serial.begin(BAUDRATE);
   SERIAL_ECHOLN("Marlin "<<version_string);
-  Serial.println("start");
+  SERIAL_PROTOCOLLN("start");
+  Serial.print("echo: Free Memory:");
+  serial.println(freeMemory());
   for(int8_t i = 0; i < BUFSIZE; i++)
   {
     fromsd[i] = false;
@@ -224,12 +244,12 @@ void loop()
        if(strstr(cmdbuffer[bufindr],"M29") == NULL)
        {
          card.write_command(cmdbuffer[bufindr]);
-         Serial.println("ok");
+         SERIAL_PROTOCOLLN("ok");
        }
        else
        {
          card.closefile();
-         Serial.println("Done saving file.");
+         SERIAL_PROTOCOLLN("Done saving file.");
        }
       }
       else
@@ -264,8 +284,7 @@ inline void get_command()
           strchr_pointer = strchr(cmdbuffer[bufindw], 'N');
           gcode_N = (strtol(&cmdbuffer[bufindw][strchr_pointer - cmdbuffer[bufindw] + 1], NULL, 10));
           if(gcode_N != gcode_LastN+1 && (strstr(cmdbuffer[bufindw], "M110") == NULL) ) {
-            Serial.print("Serial Error: Line Number is not Last Line Number+1, Last Line:");
-            Serial.println(gcode_LastN);
+            SERIAL_ERRORLN("Line Number is not Last Line Number+1, Last Line:"<<gcode_LastN);
             //Serial.println(gcode_N);
             FlushSerialRequestResend();
             serial_count = 0;
@@ -280,8 +299,7 @@ inline void get_command()
             strchr_pointer = strchr(cmdbuffer[bufindw], '*');
 
             if( (int)(strtod(&cmdbuffer[bufindw][strchr_pointer - cmdbuffer[bufindw] + 1], NULL)) != checksum) {
-              Serial.print("Error: checksum mismatch, Last Line:");
-              Serial.println(gcode_LastN);
+              SERIAL_ERRORLN("checksum mismatch, Last Line:"<<gcode_LastN);
               FlushSerialRequestResend();
               serial_count = 0;
               return;
@@ -290,8 +308,7 @@ inline void get_command()
           }
           else 
           {
-            Serial.print("Error: No Checksum with line number, Last Line:");
-            Serial.println(gcode_LastN);
+            SERIAL_ERRORLN("No Checksum with line number, Last Line:"<<gcode_LastN);
             FlushSerialRequestResend();
             serial_count = 0;
             return;
@@ -304,8 +321,7 @@ inline void get_command()
         {
           if((strstr(cmdbuffer[bufindw], "*") != NULL))
           {
-            Serial.print("Error: No Line Number with checksum, Last Line:");
-            Serial.println(gcode_LastN);
+            SERIAL_ERRORLN("No Line Number with checksum, Last Line:"<<gcode_LastN);
             serial_count = 0;
             return;
           }
@@ -321,7 +337,7 @@ inline void get_command()
             if(card.saving)
               break;
            #endif //SDSUPPORT
-            Serial.println("ok"); 
+            SERIAL_PROTOCOLLN("ok"); 
             break;
           default:
             break;
@@ -353,15 +369,15 @@ inline void get_command()
      
       if(card.eof()){
         card.sdprinting = false;
-        Serial.println("echo: Done printing file");
+        SERIAL_PROTOCOL("Done printing file");
         stoptime=millis();
         char time[30];
         unsigned long t=(stoptime-starttime)/1000;
         int sec,min;
         min=t/60;
         sec=t%60;
-        sprintf(time,"echo: %i min, %i sec",min,sec);
-        Serial.println(time);
+        sprintf(time,"%i min, %i sec",min,sec);
+        SERIAL_ECHOLN(time);
         LCD_MESSAGE(time);
         card.checkautostart(true);
       }
@@ -517,9 +533,9 @@ inline void process_commands()
     #ifdef SDSUPPORT
 
     case 20: // M20 - list SD card
-      Serial.println("Begin file list");
+      SERIAL_PROTOCOLLN("Begin file list");
       card.ls();
-      Serial.println("End file list");
+      SERIAL_PROTOCOLLN("End file list");
       break;
     case 21: // M21 - init SD card
       
@@ -575,8 +591,8 @@ inline void process_commands()
       int sec,min;
       min=t/60;
       sec=t%60;
-      sprintf(time,"echo: time needed %i min, %i sec",min,sec);
-      Serial.println(time);
+      sprintf(time,"%i min, %i sec",min,sec);
+      SERIAL_ERRORLN(time);
       LCD_MESSAGE(time);
     }
     break;
@@ -613,6 +629,7 @@ inline void process_commands()
       if (code_seen('S')) setTargetBed(code_value());
       break;
     case 105: // M105
+      //SERIAL_ECHOLN(freeMemory());
       #if (TEMP_0_PIN > -1) || defined (HEATER_USES_AD595)
         tt = degHotend0();
       #endif
@@ -620,21 +637,21 @@ inline void process_commands()
           bt = degBed();
       #endif
       #if (TEMP_0_PIN > -1) || defined (HEATER_USES_AD595)
-        Serial.print("ok T:");
-        Serial.print(tt); 
+        SERIAL_PROTOCOL("ok T:");
+        SERIAL_PROTOCOL(tt); 
         #if TEMP_1_PIN > -1 
           #ifdef PIDTEMP
-            Serial.print(" B:");
+            SERIAL_PROTOCOL(" B:");
             #if TEMP_1_PIN > -1
-              Serial.println(bt); 
+              SERIAL_PROTOCOLLN(bt); 
             #else
-              Serial.println(HeaterPower); 
+              SERIAL_PROTOCOLLN(HeaterPower); 
             #endif
           #else //not PIDTEMP
-            Serial.println();
+            SERIAL_PROTOCOLLN("");
            #endif //PIDTEMP
          #else
-            Serial.println();
+            SERIAL_PROTOCOLLN("");
           #endif //TEMP_1_PIN
         #else
           SERIAL_ERRORLN("No thermistors - no temp");
@@ -664,8 +681,7 @@ inline void process_commands()
         #endif //TEMP_RESIDENCY_TIME
         if( (millis() - codenum) > 1000 ) 
         { //Print Temp Reading every 1 second while heating up/cooling down
-          Serial.print("T:");
-        Serial.println( degHotend0() ); 
+          SERIAL_PROTOCOLLN("T:"<< degHotend0() ); 
           codenum = millis();
         }
         manage_heater();
@@ -694,12 +710,8 @@ inline void process_commands()
           if( (millis()-codenum) > 1000 ) //Print Temp Reading every 1 second while heating up.
           {
             float tt=degHotend0();
-            Serial.print("T:");
-            Serial.println( tt );
-            Serial.print("ok T:");
-            Serial.print( tt ); 
-            Serial.print(" B:");
-            Serial.println( degBed() ); 
+            SERIAL_PROTOCOLLN("T:"<<tt );
+            SERIAL_PROTOCOLLN("ok T:"<<tt <<" B:"<<degBed() ); 
             codenum = millis(); 
           }
           manage_heater();
@@ -766,53 +778,53 @@ inline void process_commands()
       }
       break;
     case 115: // M115
-      Serial.println("FIRMWARE_NAME:Marlin; Sprinter/grbl mashup for gen6 FIRMWARE_URL:http://www.mendel-parts.com PROTOCOL_VERSION:1.0 MACHINE_TYPE:Mendel EXTRUDER_COUNT:1");
+      SERIAL_PROTOCOLLN("FIRMWARE_NAME:Marlin; Sprinter/grbl mashup for gen6 FIRMWARE_URL:http://www.mendel-parts.com PROTOCOL_VERSION:1.0 MACHINE_TYPE:Mendel EXTRUDER_COUNT:1");
       break;
     case 114: // M114
-      Serial.print("X:");
-      Serial.print(current_position[X_AXIS]);
-      Serial.print("Y:");
-      Serial.print(current_position[Y_AXIS]);
-      Serial.print("Z:");
-      Serial.print(current_position[Z_AXIS]);
-      Serial.print("E:");      
-      Serial.print(current_position[E_AXIS]);
+      SERIAL_PROTOCOL("X:");
+      SERIAL_PROTOCOL(current_position[X_AXIS]);
+      SERIAL_PROTOCOL("Y:");
+      SERIAL_PROTOCOL(current_position[Y_AXIS]);
+      SERIAL_PROTOCOL("Z:");
+      SERIAL_PROTOCOL(current_position[Z_AXIS]);
+      SERIAL_PROTOCOL("E:");      
+      SERIAL_PROTOCOL(current_position[E_AXIS]);
       #ifdef DEBUG_STEPS
-        Serial.print(" Count X:");
-        Serial.print(float(count_position[X_AXIS])/axis_steps_per_unit[X_AXIS]);
-        Serial.print("Y:");
-        Serial.print(float(count_position[Y_AXIS])/axis_steps_per_unit[Y_AXIS]);
-        Serial.print("Z:");
-        Serial.println(float(count_position[Z_AXIS])/axis_steps_per_unit[Z_AXIS]);
+        SERIAL_PROTOCOL(" Count X:");
+        SERIAL_PROTOCOL(float(count_position[X_AXIS])/axis_steps_per_unit[X_AXIS]);
+        SERIAL_PROTOCOL("Y:");
+        SERIAL_PROTOCOL(float(count_position[Y_AXIS])/axis_steps_per_unit[Y_AXIS]);
+        SERIAL_PROTOCOL("Z:");
+        SERIAL_PROTOCOL(float(count_position[Z_AXIS])/axis_steps_per_unit[Z_AXIS]);
       #endif
-      Serial.println("");
+      SERIAL_PROTOCOLLN("");
       break;
     case 119: // M119
       #if (X_MIN_PIN > -1)
-        Serial.print("x_min:");
-        Serial.print((READ(X_MIN_PIN)^ENDSTOPS_INVERTING)?"H ":"L ");
+        SERIAL_PROTOCOL("x_min:");
+        SERIAL_PROTOCOL(((READ(X_MIN_PIN)^ENDSTOPS_INVERTING)?"H ":"L "));
       #endif
       #if (X_MAX_PIN > -1)
-        Serial.print("x_max:");
-        Serial.print((READ(X_MAX_PIN)^ENDSTOPS_INVERTING)?"H ":"L ");
+        SERIAL_PROTOCOL("x_max:");
+        SERIAL_PROTOCOL(((READ(X_MAX_PIN)^ENDSTOPS_INVERTING)?"H ":"L "));
       #endif
       #if (Y_MIN_PIN > -1)
-        Serial.print("y_min:");
-        Serial.print((READ(Y_MIN_PIN)^ENDSTOPS_INVERTING)?"H ":"L ");
+        SERIAL_PROTOCOL("y_min:");
+        SERIAL_PROTOCOL(((READ(Y_MIN_PIN)^ENDSTOPS_INVERTING)?"H ":"L "));
       #endif
       #if (Y_MAX_PIN > -1)
-        Serial.print("y_max:");
-        Serial.print((READ(Y_MAX_PIN)^ENDSTOPS_INVERTING)?"H ":"L ");
+        SERIAL_PROTOCOL("y_max:");
+        SERIAL_PROTOCOL(((READ(Y_MAX_PIN)^ENDSTOPS_INVERTING)?"H ":"L "));
       #endif
       #if (Z_MIN_PIN > -1)
-        Serial.print("z_min:");
-        Serial.print((READ(Z_MIN_PIN)^ENDSTOPS_INVERTING)?"H ":"L ");
+        SERIAL_PROTOCOL("z_min:");
+        SERIAL_PROTOCOL(((READ(Z_MIN_PIN)^ENDSTOPS_INVERTING)?"H ":"L "));
       #endif
       #if (Z_MAX_PIN > -1)
-        Serial.print("z_max:");
-        Serial.print((READ(Z_MAX_PIN)^ENDSTOPS_INVERTING)?"H ":"L ");
+        SERIAL_PROTOCOL("z_max:");
+        SERIAL_PROTOCOL(((READ(Z_MAX_PIN)^ENDSTOPS_INVERTING)?"H ":"L "));
       #endif
-      Serial.println("");
+      SERIAL_PROTOCOLLN("");
       break;
       //TODO: update for all axis, use for loop
     case 201: // M201
@@ -885,9 +897,7 @@ inline void process_commands()
   }
   else
   {
-    Serial.print("echo: Unknown command:\"");
-    Serial.print(cmdbuffer[bufindr]);
-    Serial.println("\"");
+    SERIAL_ECHOLN("Unknown command:\""<<cmdbuffer[bufindr]<<"\"");
   }
 
   ClearToSend();
@@ -897,8 +907,7 @@ void FlushSerialRequestResend()
 {
   //char cmdbuffer[bufindr][100]="Resend:";
   Serial.flush();
-  Serial.print("Resend:");
-  Serial.println(gcode_LastN + 1);
+  SERIAL_PROTOCOLLN("Resend:"<<gcode_LastN + 1);
   ClearToSend();
 }
 
@@ -909,7 +918,7 @@ void ClearToSend()
   if(fromsd[bufindr])
     return;
   #endif //SDSUPPORT
-  Serial.println("ok"); 
+  SERIAL_PROTOCOLLN("ok"); 
 }
 
 inline void get_coordinates()
index 583c55c74a577fb5c2fe46f292da9f29ebee56c9..03696fa616a5767838d8a60d488edd56b56c3a28 100644 (file)
@@ -31,7 +31,7 @@ public:
 
   inline void ls() {root.ls();};
   inline bool eof() { sdpos = file.curPosition();return sdpos>=filesize ;};
-  inline char get() {  int16_t n = file.read(); return (n!=-1)?(char)n:'\n';};
+  inline char get() {  int16_t n = file.read(); return (n==-1)?'\n':(char)n;};
   inline void setIndex(long index) {sdpos = index;file.seekSet(index);};
 
 public:
@@ -52,6 +52,35 @@ private:
   bool autostart_stilltocheck; //the sd start is delayed, because otherwise the serial cannot answer fast enought to make contact with the hostsoftware.
 };
   
+
+#else
+class CardReader
+{
+public:
+  inline CardReader(){};
+  
+  inline static void initsd(){};
+  inline static void write_command(char *buf){};
+  
+  inline static void checkautostart(bool x) {}; 
+  
+  inline static void closefile() {};
+  inline static void release(){};
+  inline static void startFileprint(){};
+  inline static void startFilewrite(char *name){};
+  inline static void pauseSDPrint(){};
+  inline static void getStatus(){};
+  
+  inline static void selectFile(char* name){};
+  inline static void getfilename(const uint8_t nr){};
+  inline static uint8_t getnrfilenames(){return 0;};
+  
+
+  inline static void ls() {};
+  inline static bool eof() {return true;};
+  inline static char get() {return 0;};
+  inline static void setIndex(){};
+};
 #endif //SDSUPPORT
   
   
index a49b9999f632f9b8c8777bcf433631a221eeefcc..cd4bfeb7abaf2cdb98e8ba99071a0c8d4feea75e 100644 (file)
@@ -76,17 +76,14 @@ void CardReader::selectFile(char* name)
     file.close();
    
     if (file.open(&root, name, O_READ)) {
-      Serial.print("File opened:");
-      Serial.print(name);
-      Serial.print(" Size:");
       filesize = file.fileSize();
-      Serial.println(filesize);
+      SERIAL_PROTOCOLLN("File opened:"<<name<<" Size:"<<filesize);
       sdpos = 0;
       
-      Serial.println("File selected");
+      SERIAL_PROTOCOLLN("File selected");
     }
     else{
-      Serial.println("file.open failed");
+      SERIAL_PROTOCOLLN("file.open failed");
     }
   }
 }
@@ -101,14 +98,11 @@ void CardReader::startFilewrite(char *name)
     
     if (!file.open(&root, name, O_CREAT | O_APPEND | O_WRITE | O_TRUNC))
     {
-      Serial.print("open failed, File: ");
-      Serial.print(name);
-      Serial.print(".");
+      SERIAL_PROTOCOLLN("open failed, File: "<<name<<".");
     }
     else{
       saving = true;
-      Serial.print("Writing to file: ");
-      Serial.println(name);
+      SERIAL_PROTOCOLLN("Writing to file: "<<name);
     }
   }
 }
@@ -116,13 +110,10 @@ void CardReader::startFilewrite(char *name)
 void CardReader::getStatus()
 {
   if(cardOK){
-    Serial.print("SD printing byte ");
-    Serial.print(sdpos);
-    Serial.print("/");
-    Serial.println(filesize);
+    SERIAL_PROTOCOLLN("SD printing byte "<<sdpos<<"/"<<filesize);
   }
   else{
-    Serial.println("Not SD printing");
+    SERIAL_PROTOCOLLN("Not SD printing");
   }
 }
 void CardReader::write_command(char *buf)
index 807709e2beb2d1f35d0d97c892010aa57605c02e..fbb4f194c9f7835d71ddf1854042a3ff0fc729fa 100644 (file)
-#ifndef PINS_H
-#define PINS_H
-
-/****************************************************************************************
-* Arduino pin assignment
-*
-*                  ATMega168
-*                   +-\/-+
-*             PC6  1|    |28  PC5 (AI 5 / D19)
-*       (D 0) PD0  2|    |27  PC4 (AI 4 / D18)
-*       (D 1) PD1  3|    |26  PC3 (AI 3 / D17)
-*       (D 2) PD2  4|    |25  PC2 (AI 2 / D16)
-*  PWM+ (D 3) PD3  5|    |24  PC1 (AI 1 / D15)
-*       (D 4) PD4  6|    |23  PC0 (AI 0 / D14)
-*             VCC  7|    |22  GND
-*             GND  8|    |21  AREF
-*             PB6  9|    |20  AVCC
-*             PB7 10|    |19  PB5 (D 13)
-*  PWM+ (D 5) PD5 11|    |18  PB4 (D 12)
-*  PWM+ (D 6) PD6 12|    |17  PB3 (D 11) PWM
-*       (D 7) PD7 13|    |16  PB2 (D 10) PWM
-*       (D 8) PB0 14|    |15  PB1 (D 9)  PWM
-*                   +----+
-****************************************************************************************/
-#if MOTHERBOARD == 0
-#define KNOWN_BOARD 1
-
-#ifndef __AVR_ATmega168__
-#error Oops!  Make sure you have 'Arduino Diecimila' selected from the boards menu.
-#endif
-
-#define X_STEP_PIN          2
-#define X_DIR_PIN           3
-#define X_ENABLE_PIN       -1
-#define X_MIN_PIN           4
-#define X_MAX_PIN           9
-
-#define Y_STEP_PIN         10
-#define Y_DIR_PIN           7
-#define Y_ENABLE_PIN       -1
-#define Y_MIN_PIN           8
-#define Y_MAX_PIN          13
-
-#define Z_STEP_PIN         19
-#define Z_DIR_PIN          18
-#define Z_ENABLE_PIN        5
-#define Z_MIN_PIN          17
-#define Z_MAX_PIN          16
-
-#define E_STEP_PIN         11
-#define E_DIR_PIN          12
-#define E_ENABLE_PIN       -1
-
-#define SDPOWER          -1
-#define SDSS          -1
-#define LED_PIN            -1
-#define FAN_PIN            -1
-#define PS_ON_PIN          15
-#define KILL_PIN           -1
-
-#define HEATER_0_PIN        6
-#define TEMP_0_PIN          0    // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!
-#define HEATER_1_PIN        -1
-#define HEATER_2_PIN        -1
-#endif
-
-
-
-/****************************************************************************************
-* Sanguino/RepRap Motherboard with direct-drive extruders
-*
-*                        ATMega644P
-*
-*                        +---\/---+
-*            (D 0) PB0  1|        |40  PA0 (AI 0 / D31)
-*            (D 1) PB1  2|        |39  PA1 (AI 1 / D30)
-*       INT2 (D 2) PB2  3|        |38  PA2 (AI 2 / D29)
-*        PWM (D 3) PB3  4|        |37  PA3 (AI 3 / D28)
-*        PWM (D 4) PB4  5|        |36  PA4 (AI 4 / D27)
-*       MOSI (D 5) PB5  6|        |35  PA5 (AI 5 / D26)
-*       MISO (D 6) PB6  7|        |34  PA6 (AI 6 / D25)
-*        SCK (D 7) PB7  8|        |33  PA7 (AI 7 / D24)
-*                  RST  9|        |32  AREF
-*                  VCC 10|        |31  GND 
-*                  GND 11|        |30  AVCC
-*                XTAL2 12|        |29  PC7 (D 23)
-*                XTAL1 13|        |28  PC6 (D 22)
-*       RX0 (D 8)  PD0 14|        |27  PC5 (D 21) TDI
-*       TX0 (D 9)  PD1 15|        |26  PC4 (D 20) TDO
-*  INT0 RX1 (D 10) PD2 16|        |25  PC3 (D 19) TMS
-*  INT1 TX1 (D 11) PD3 17|        |24  PC2 (D 18) TCK
-*       PWM (D 12) PD4 18|        |23  PC1 (D 17) SDA
-*       PWM (D 13) PD5 19|        |22  PC0 (D 16) SCL
-*       PWM (D 14) PD6 20|        |21  PD7 (D 15) PWM
-*                        +--------+
-*
-****************************************************************************************/
-#if MOTHERBOARD == 1
-#define KNOWN_BOARD 1
-
-#ifndef __AVR_ATmega644P__
-#error Oops!  Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu.
-#endif
-
-#define X_STEP_PIN         15
-#define X_DIR_PIN          18
-#define X_ENABLE_PIN       19
-#define X_MIN_PIN          20
-#define X_MAX_PIN          21
-
-#define Y_STEP_PIN         23
-#define Y_DIR_PIN          22
-#define Y_ENABLE_PIN       19
-#define Y_MIN_PIN          25
-#define Y_MAX_PIN          26
-
-#define Z_STEP_PIN         29
-#define Z_DIR_PIN          30
-#define Z_ENABLE_PIN       31
-#define Z_MIN_PIN           2
-#define Z_MAX_PIN           1
-
-#define E_STEP_PIN         12
-#define E_DIR_PIN          16
-#define E_ENABLE_PIN        3
-
-#define SDPOWER          -1
-#define SDSS          -1
-#define LED_PIN             0
-#define FAN_PIN            -1
-#define PS_ON_PIN          -1
-#define KILL_PIN           -1
-
-#define HEATER_0_PIN       14
-#define TEMP_0_PIN          4 //D27   // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!
-#define HEATER_1_PIN        -1
-#define HEATER_2_PIN        -1
-/*  Unused (1) (2) (3) 4 5 6 7 8 9 10 11 12 13 (14) (15) (16) 17 (18) (19) (20) (21) (22) (23) 24 (25) (26) (27) 28 (29) (30) (31)  */
-
-
-
-#endif
-
-
-/****************************************************************************************
-* RepRap Motherboard  ****---NOOOOOO RS485/EXTRUDER CONTROLLER!!!!!!!!!!!!!!!!!---*******
-*
-****************************************************************************************/
-#if MOTHERBOARD == 2
-#define KNOWN_BOARD 1
-
-#ifndef __AVR_ATmega644P__
-#error Oops!  Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu.
-#endif
-
-#define X_STEP_PIN      15
-#define X_DIR_PIN       18
-#define X_ENABLE_PIN    19
-#define X_MIN_PIN       20
-#define X_MAX_PIN       21
-
-#define Y_STEP_PIN      23
-#define Y_DIR_PIN       22
-#define Y_ENABLE_PIN    24
-#define Y_MIN_PIN       25
-#define Y_MAX_PIN       26
-
-#define Z_STEP_PINN     27
-#define Z_DIR_PINN      28
-#define Z_ENABLE_PIN    29
-#define Z_MIN_PIN       30
-#define Z_MAX_PIN       31
-
-#define E_STEP_PIN      17
-#define E_DIR_PIN       16
-#define E_ENABLE_PIN    -1
-
-#define SDPOWER          -1
-#define SDSS          4
-#define LED_PIN          0
-
-#define SD_CARD_WRITE    2
-#define SD_CARD_DETECT   3
-#define SD_CARD_SELECT   4
-
-//our RS485 pins
-#define TX_ENABLE_PIN  12
-#define RX_ENABLE_PIN  13
-
-//pin for controlling the PSU.
-#define PS_ON_PIN       14
-
-#define FAN_PIN         -1
-#define KILL_PIN        -1
-
-#define HEATER_0_PIN    -1
-#define TEMP_0_PIN      -1    // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!
-#define HEATER_1_PIN        -1
-#define HEATER_2_PIN        -1
-
-
-
-#endif
-
-/****************************************************************************************
-* Arduino Mega pin assignment
-*
-****************************************************************************************/
-#if MOTHERBOARD == 33
-#define MOTHERBOARD 3
-#define RAMPS_V_1_3
-#endif
-#if MOTHERBOARD == 3
-#define KNOWN_BOARD 1
-
-//////////////////FIX THIS//////////////
-#ifndef __AVR_ATmega1280__
- #ifndef __AVR_ATmega2560__
- #error Oops!  Make sure you have 'Arduino Mega' selected from the 'Tools -> Boards' menu.
- #endif
-#endif
-
-// uncomment one of the following lines for RAMPS v1.3 or v1.0, comment both for v1.2 or 1.1
-// #define RAMPS_V_1_3
-// #define RAMPS_V_1_0
-
-#ifdef RAMPS_V_1_3
-
-#define X_STEP_PIN         54
-#define X_DIR_PIN          55
-#define X_ENABLE_PIN       38
-#define X_MIN_PIN           3
-#define X_MAX_PIN          -1   //2 //Max endstops default to disabled "-1", set to commented value to enable.
-
-#define Y_STEP_PIN         60
-#define Y_DIR_PIN          61
-#define Y_ENABLE_PIN       56
-#define Y_MIN_PIN          14
-#define Y_MAX_PIN          -1   //15
-
-#define Z_STEP_PIN         46
-#define Z_DIR_PIN          48
-#define Z_ENABLE_PIN       62
-#define Z_MIN_PIN          18
-#define Z_MAX_PIN          -1   //19
-
-#define E_STEP_PIN         26
-#define E_DIR_PIN          28
-#define E_ENABLE_PIN       24
-
-#define SDPOWER            -1
-#define SDSS               53
-#define LED_PIN            13
-#define FAN_PIN            9
-#define PS_ON_PIN          12
-#define KILL_PIN           -1
-
-#define HEATER_0_PIN       10
-#define HEATER_1_PIN       8
-#define HEATER_2_PIN        -1
-#define TEMP_0_PIN         13   // ANALOG NUMBERING
-#define TEMP_1_PIN         14   // ANALOG NUMBERING
-#define TEMP_2_PIN         -1   // ANALOG NUMBERING
-
-
-#else // RAMPS_V_1_1 or RAMPS_V_1_2 as default
-
-#define X_STEP_PIN         26
-#define X_DIR_PIN          28
-#define X_ENABLE_PIN       24
-#define X_MIN_PIN           3
-#define X_MAX_PIN          -1    //2
-
-#define Y_STEP_PIN         38
-#define Y_DIR_PIN          40
-#define Y_ENABLE_PIN       36
-#define Y_MIN_PIN          16
-#define Y_MAX_PIN          -1    //17
-
-#define Z_STEP_PIN         44
-#define Z_DIR_PIN          46
-#define Z_ENABLE_PIN       42
-#define Z_MIN_PIN          18
-#define Z_MAX_PIN          -1    //19
-
-#define E_STEP_PIN         32
-#define E_DIR_PIN          34
-#define E_ENABLE_PIN       30
-
-#define SDPOWER            48
-#define SDSS               53
-#define LED_PIN            13
-#define PS_ON_PIN          -1
-#define KILL_PIN           -1
-
-
-
-#ifdef RAMPS_V_1_0 // RAMPS_V_1_0
-  #define HEATER_0_PIN     12    // RAMPS 1.0
-  #define HEATER_1_PIN     -1    // RAMPS 1.0
-  #define FAN_PIN          11    // RAMPS 1.0
-
-#else // RAMPS_V_1_1 or RAMPS_V_1_2
-  #define HEATER_0_PIN     10    // RAMPS 1.1
-  #define HEATER_1_PIN      8    // RAMPS 1.1
-  #define FAN_PIN           9    // RAMPS 1.1
-#endif
-#define HEATER_2_PIN        -1
-#define TEMP_0_PIN          2    // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!
-#define TEMP_1_PIN          1    // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!
-#define TEMP_2_PIN          -1    // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!
-#endif
-
-// SPI for Max6675 Thermocouple 
-
-#ifndef SDSUPPORT
-// these pins are defined in the SD library if building with SD support  #define SCK_PIN          52
-  #define MISO_PIN         50
-  #define MOSI_PIN         51
-  #define MAX6675_SS       53
-#else
-  #define MAX6675_SS       49
-#endif
-
-
-#endif
-/****************************************************************************************
-* Duemilanove w/ ATMega328P pin assignment
-*
-****************************************************************************************/
-#if MOTHERBOARD == 4
-#define KNOWN_BOARD 1
-
-#ifndef __AVR_ATmega328P__
-#error Oops!  Make sure you have 'Arduino Duemilanove w/ ATMega328' selected from the 'Tools -> Boards' menu.
-#endif
-
-#define X_STEP_PIN         19
-#define X_DIR_PIN          18
-#define X_ENABLE_PIN       -1
-#define X_MIN_PIN          17
-#define X_MAX_PIN          -1
-
-#define Y_STEP_PIN         10
-#define Y_DIR_PIN           7
-#define Y_ENABLE_PIN       -1
-#define Y_MIN_PIN           8
-#define Y_MAX_PIN          -1
-
-#define Z_STEP_PIN         13
-#define Z_DIR_PIN           3
-#define Z_ENABLE_PIN        2
-#define Z_MIN_PIN           4
-#define Z_MAX_PIN          -1
-
-#define E_STEP_PIN         11
-#define E_DIR_PIN          12
-#define E_ENABLE_PIN       -1
-
-#define SDPOWER          -1
-#define SDSS          -1
-#define LED_PIN            -1
-#define FAN_PIN             5
-#define PS_ON_PIN          -1
-#define KILL_PIN           -1
-
-#define HEATER_0_PIN        6
-#define TEMP_0_PIN          0    // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!
-#define HEATER_1_PIN        -1
-#define HEATER_2_PIN        -1
-
-#endif
-
-/****************************************************************************************
-* Gen6 pin assignment
-*
-****************************************************************************************/
-#if MOTHERBOARD == 5
-#define KNOWN_BOARD 1
-
-#ifndef __AVR_ATmega644P__
-    #error Oops!  Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu.
-#endif
-
-//x axis pins
-    #define X_STEP_PIN      15
-    #define X_DIR_PIN       18
-    #define X_ENABLE_PIN    19
-    #define X_MIN_PIN       20
-    #define X_MAX_PIN       -1
-    
-    //y axis pins
-    #define Y_STEP_PIN      23
-    #define Y_DIR_PIN       22
-    #define Y_ENABLE_PIN    24
-    #define Y_MIN_PIN       25
-    #define Y_MAX_PIN       -1
-    
-    //z axis pins
-    #define Z_STEP_PIN      27
-    #define Z_DIR_PIN       28
-    #define Z_ENABLE_PIN    29
-    #define Z_MIN_PIN       30
-    #define Z_MAX_PIN       -1
-    
-    //extruder pins
-    #define E_STEP_PIN      4     //Edited @ EJE Electronics 20100715
-    #define E_DIR_PIN       2     //Edited @ EJE Electronics 20100715
-    #define E_ENABLE_PIN    3     //Added @ EJE Electronics 20100715
-    #define TEMP_0_PIN      5     //changed @ rkoeppl 20110410
-    #define HEATER_0_PIN    14    //changed @ rkoeppl 20110410
-    #define HEATER_1_PIN    -1    //changed @ rkoeppl 20110410
-    #define HEATER_2_PIN        -1
-    
-    #define SDPOWER          -1
-    #define SDSS          17
-    #define LED_PIN         -1    //changed @ rkoeppl 20110410
-    #define TEMP_1_PIN      -1    //changed @ rkoeppl 20110410
-    #define TEMP_2_PIN      -1
-    #define FAN_PIN         -1    //changed @ rkoeppl 20110410
-    #define PS_ON_PIN       -1    //changed @ rkoeppl 20110410
-    //our pin for debugging.
-    
-    #define DEBUG_PIN        0
-    
-    //our RS485 pins
-    #define TX_ENABLE_PIN      12
-    #define RX_ENABLE_PIN      13
-
-#endif
-
-/****************************************************************************************
-* Sanguinololu pin assignment
-*
-****************************************************************************************/
-#if MOTHERBOARD == 62
-#define MOTHERBOARD 6
-#define SANGUINOLOLU_V_1_2 
-#endif
-#if MOTHERBOARD == 6
-#define KNOWN_BOARD 1
-#ifndef __AVR_ATmega644P__
-#error Oops!  Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu.
-#endif
-
-#define X_STEP_PIN         15
-#define X_DIR_PIN          21
-#define X_MIN_PIN          18
-#define X_MAX_PIN           -2
-
-#define Y_STEP_PIN         22
-#define Y_DIR_PIN          23
-#define Y_MIN_PIN          19
-#define Y_MAX_PIN          -1
-
-#define Z_STEP_PIN         3
-#define Z_DIR_PIN          2
-#define Z_MIN_PIN          20
-#define Z_MAX_PIN          -1
-
-#define E_STEP_PIN         1
-#define E_DIR_PIN          0
-
-#define LED_PIN            -1
-
-#define FAN_PIN            -1 
-
-#define PS_ON_PIN          -1
-#define KILL_PIN           -1
-
-#define HEATER_0_PIN       13 // (extruder)
-
-#ifdef SANGUINOLOLU_V_1_2
-
-#define HEATER_1_PIN       12 // (bed)
-#define X_ENABLE_PIN       14
-#define Y_ENABLE_PIN       14
-#define Z_ENABLE_PIN       26
-#define E_ENABLE_PIN       14
-
-#else
-
-#define HEATER_1_PIN       14  // (bed)
-#define X_ENABLE_PIN       -1
-#define Y_ENABLE_PIN       -1
-#define Z_ENABLE_PIN       -1
-#define E_ENABLE_PIN       -1
-
-#endif
-
-#define TEMP_0_PIN          7   // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! (pin 33 extruder)
-#define TEMP_1_PIN          6   // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! (pin 34 bed)
-#define TEMP_2_PIN         -1
-#define SDPOWER            -1
-#define SDSS               31
-#define HEATER_2_PIN       -1
-
-#endif
-
-
-#if MOTHERBOARD == 7
-#define KNOWN_BOARD
-/*****************************************************************
-* Ultimaker pin assignment
-******************************************************************/
-
-#ifndef __AVR_ATmega1280__
- #ifndef __AVR_ATmega2560__
- #error Oops!  Make sure you have 'Arduino Mega' selected from the 'Tools -> Boards' menu.
- #endif
-#endif
-
-#define X_STEP_PIN 25
-#define X_DIR_PIN 23
-#define X_MIN_PIN 22
-#define X_MAX_PIN 24
-#define X_ENABLE_PIN 27
-
-#define Y_STEP_PIN 31
-#define Y_DIR_PIN 33
-#define Y_MIN_PIN 26
-#define Y_MAX_PIN 28
-#define Y_ENABLE_PIN 29
-
-#define Z_STEP_PIN 37 
-#define Z_DIR_PIN 39
-#define Z_MIN_PIN 30
-#define Z_MAX_PIN 32
-#define Z_ENABLE_PIN 35
-
-#define HEATER_1_PIN 4 
-#define TEMP_1_PIN 11  
-
-#define EXTRUDER_0_STEP_PIN 43 
-#define EXTRUDER_0_DIR_PIN 45
-#define EXTRUDER_0_ENABLE_PIN 41
-#define HEATER_0_PIN  2
-#define TEMP_0_PIN 8   
-
-#define EXTRUDER_1_STEP_PIN 49 
-#define EXTRUDER_1_DIR_PIN 47
-#define EXTRUDER_1_ENABLE_PIN 51
-#define EXTRUDER_1_HEATER_PIN 3
-#define EXTRUDER_1_TEMPERATURE_PIN 10 
-#define HEATER_2_PIN 51
-#define TEMP_2_PIN 3
-
-
-
-#define E_STEP_PIN         EXTRUDER_0_STEP_PIN
-#define E_DIR_PIN          EXTRUDER_0_DIR_PIN
-#define E_ENABLE_PIN       EXTRUDER_0_ENABLE_PIN
-
-#define SDPOWER            -1
-#define SDSS               53
-#define LED_PIN            13
-#define FAN_PIN            7
-#define PS_ON_PIN          12
-#define KILL_PIN           -1
-
-#ifdef ULTRA_LCD
-
-  #ifdef NEWPANEL
-  //arduino pin witch triggers an piezzo beeper
-    #define BEEPER 18
-
-    #define LCD_PINS_RS 20 
-    #define LCD_PINS_ENABLE 17
-    #define LCD_PINS_D4 16
-    #define LCD_PINS_D5 21 
-    #define LCD_PINS_D6 5
-    #define LCD_PINS_D7 6
-    
-    //buttons are directly attached
-    #define BTN_EN1 40
-    #define BTN_EN2 42
-    #define BTN_ENC 19  //the click
-    
-    #define BLEN_C 2
-    #define BLEN_B 1
-    #define BLEN_A 0
-    
-    #define SDCARDDETECT 38
-    
-      //encoder rotation values
-    #define encrot0 0
-    #define encrot1 2
-    #define encrot2 3
-    #define encrot3 1
-  #else //old style panel with shift register
-    //arduino pin witch triggers an piezzo beeper
-    #define BEEPER 18
-
-    //buttons are attached to a shift register
-    #define SHIFT_CLK 38
-    #define SHIFT_LD 42
-    #define SHIFT_OUT 40
-    #define SHIFT_EN 17
-    
-    #define LCD_PINS_RS 16 
-    #define LCD_PINS_ENABLE 5
-    #define LCD_PINS_D4 6
-    #define LCD_PINS_D5 21 
-    #define LCD_PINS_D6 20
-    #define LCD_PINS_D7 19
-    
-    //encoder rotation values
-    #define encrot0 0
-    #define encrot1 2
-    #define encrot2 3
-    #define encrot3 1
-
-    
-    //bits in the shift register that carry the buttons for:
-    // left up center down right red
-    #define BL_LE 7
-    #define BL_UP 6
-    #define BL_MI 5
-    #define BL_DW 4
-    #define BL_RI 3
-    #define BL_ST 2
-
-    #define BLEN_B 1
-    #define BLEN_A 0
-  #endif 
-#endif //ULTRA_LCD
-
-#endif
-
-/****************************************************************************************
-* Teensylu 0.7 pin assingments (ATMEGA90USB)
-* Requires the Teensyduino software with Teensy2.0++ selected in arduino IDE!
-****************************************************************************************/
-#if MOTHERBOARD == 8
-#define MOTHERBOARD 8
-#define KNOWN_BOARD 1
-
-
-#define X_STEP_PIN          0  
-#define X_DIR_PIN           1  
-#define X_ENABLE_PIN       39 
-#define X_MIN_PIN          13 
-#define X_MAX_PIN          -1    
-
-#define Y_STEP_PIN          2  
-#define Y_DIR_PIN           3 
-#define Y_ENABLE_PIN       38 
-#define Y_MIN_PIN          14 
-#define Y_MAX_PIN          -1    
-
-#define Z_STEP_PIN          4
-#define Z_DIR_PIN           5 
-#define Z_ENABLE_PIN       23 
-#define Z_MIN_PIN          15 
-#define Z_MAX_PIN          -1    
-
-#define E_STEP_PIN          6  
-#define E_DIR_PIN           7 
-#define E_ENABLE_PIN       19 
-
-
-
-#define HEATER_0_PIN       21  // Extruder
-#define HEATER_1_PIN       20  // Bed
-#define HEATER_2_PIN       -1
-#define FAN_PIN            22  // Fan   
-
-#define TEMP_0_PIN          7  // Extruder
-#define TEMP_1_PIN          6  // Bed
-#define TEMP_2_PIN         -1
-
-#define SDPOWER            -1
-#define SDSS                8
-#define LED_PIN            -1
-#define PS_ON_PIN          -1
-#define KILL_PIN           -1 
-#define ALARM_PIN          -1
-
-#ifndef SDSUPPORT
-// these pins are defined in the SD library if building with SD support  
-  #define SCK_PIN           9 
-  #define MISO_PIN         11 
-  #define MOSI_PIN         10 
-#endif
-#endif
-
-#ifndef KNOWN_BOARD
-#error Unknown MOTHERBOARD value in configuration.h
-#endif
-
-//List of pins which to ignore when asked to change by gcode, 0 and 1 are RX and TX, do not mess with those!
-#define SENSITIVE_PINS {0, 1, X_STEP_PIN, X_DIR_PIN, X_ENABLE_PIN, X_MIN_PIN, X_MAX_PIN, Y_STEP_PIN, Y_DIR_PIN, Y_ENABLE_PIN, Y_MIN_PIN, Y_MAX_PIN, Z_STEP_PIN, Z_DIR_PIN, Z_ENABLE_PIN, Z_MIN_PIN, Z_MAX_PIN, E_STEP_PIN, E_DIR_PIN, E_ENABLE_PIN, LED_PIN, PS_ON_PIN, HEATER_0_PIN, HEATER_1_PIN, HEATER_2_PIN, FAN_PIN, TEMP_0_PIN, TEMP_1_PIN, TEMP_2_PIN}
-
+#ifndef PINS_H\r
+#define PINS_H\r
+\r
+/****************************************************************************************\r
+* Arduino pin assignment\r
+*\r
+*                  ATMega168\r
+*                   +-\/-+\r
+*             PC6  1|    |28  PC5 (AI 5 / D19)\r
+*       (D 0) PD0  2|    |27  PC4 (AI 4 / D18)\r
+*       (D 1) PD1  3|    |26  PC3 (AI 3 / D17)\r
+*       (D 2) PD2  4|    |25  PC2 (AI 2 / D16)\r
+*  PWM+ (D 3) PD3  5|    |24  PC1 (AI 1 / D15)\r
+*       (D 4) PD4  6|    |23  PC0 (AI 0 / D14)\r
+*             VCC  7|    |22  GND\r
+*             GND  8|    |21  AREF\r
+*             PB6  9|    |20  AVCC\r
+*             PB7 10|    |19  PB5 (D 13)\r
+*  PWM+ (D 5) PD5 11|    |18  PB4 (D 12)\r
+*  PWM+ (D 6) PD6 12|    |17  PB3 (D 11) PWM\r
+*       (D 7) PD7 13|    |16  PB2 (D 10) PWM\r
+*       (D 8) PB0 14|    |15  PB1 (D 9)  PWM\r
+*                   +----+\r
+****************************************************************************************/\r
+#if MOTHERBOARD == 0\r
+#define KNOWN_BOARD 1\r
+\r
+#ifndef __AVR_ATmega168__\r
+#error Oops!  Make sure you have 'Arduino Diecimila' selected from the boards menu.\r
+#endif\r
+\r
+#define X_STEP_PIN          2\r
+#define X_DIR_PIN           3\r
+#define X_ENABLE_PIN       -1\r
+#define X_MIN_PIN           4\r
+#define X_MAX_PIN           9\r
+\r
+#define Y_STEP_PIN         10\r
+#define Y_DIR_PIN           7\r
+#define Y_ENABLE_PIN       -1\r
+#define Y_MIN_PIN           8\r
+#define Y_MAX_PIN          13\r
+\r
+#define Z_STEP_PIN         19\r
+#define Z_DIR_PIN          18\r
+#define Z_ENABLE_PIN        5\r
+#define Z_MIN_PIN          17\r
+#define Z_MAX_PIN          16\r
+\r
+#define E_STEP_PIN         11\r
+#define E_DIR_PIN          12\r
+#define E_ENABLE_PIN       -1\r
+\r
+#define SDPOWER          -1\r
+#define SDSS          -1\r
+#define LED_PIN            -1\r
+#define FAN_PIN            -1\r
+#define PS_ON_PIN          15\r
+#define KILL_PIN           -1\r
+\r
+#define HEATER_0_PIN        6\r
+#define TEMP_0_PIN          0    // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!\r
+#define HEATER_1_PIN        -1\r
+#define HEATER_2_PIN        -1\r
+#endif\r
+\r
+\r
+\r
+/****************************************************************************************\r
+* Sanguino/RepRap Motherboard with direct-drive extruders\r
+*\r
+*                        ATMega644P\r
+*\r
+*                        +---\/---+\r
+*            (D 0) PB0  1|        |40  PA0 (AI 0 / D31)\r
+*            (D 1) PB1  2|        |39  PA1 (AI 1 / D30)\r
+*       INT2 (D 2) PB2  3|        |38  PA2 (AI 2 / D29)\r
+*        PWM (D 3) PB3  4|        |37  PA3 (AI 3 / D28)\r
+*        PWM (D 4) PB4  5|        |36  PA4 (AI 4 / D27)\r
+*       MOSI (D 5) PB5  6|        |35  PA5 (AI 5 / D26)\r
+*       MISO (D 6) PB6  7|        |34  PA6 (AI 6 / D25)\r
+*        SCK (D 7) PB7  8|        |33  PA7 (AI 7 / D24)\r
+*                  RST  9|        |32  AREF\r
+*                  VCC 10|        |31  GND \r
+*                  GND 11|        |30  AVCC\r
+*                XTAL2 12|        |29  PC7 (D 23)\r
+*                XTAL1 13|        |28  PC6 (D 22)\r
+*       RX0 (D 8)  PD0 14|        |27  PC5 (D 21) TDI\r
+*       TX0 (D 9)  PD1 15|        |26  PC4 (D 20) TDO\r
+*  INT0 RX1 (D 10) PD2 16|        |25  PC3 (D 19) TMS\r
+*  INT1 TX1 (D 11) PD3 17|        |24  PC2 (D 18) TCK\r
+*       PWM (D 12) PD4 18|        |23  PC1 (D 17) SDA\r
+*       PWM (D 13) PD5 19|        |22  PC0 (D 16) SCL\r
+*       PWM (D 14) PD6 20|        |21  PD7 (D 15) PWM\r
+*                        +--------+\r
+*\r
+****************************************************************************************/\r
+#if MOTHERBOARD == 1\r
+#define KNOWN_BOARD 1\r
+\r
+#ifndef __AVR_ATmega644P__\r
+#error Oops!  Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu.\r
+#endif\r
+\r
+#define X_STEP_PIN         15\r
+#define X_DIR_PIN          18\r
+#define X_ENABLE_PIN       19\r
+#define X_MIN_PIN          20\r
+#define X_MAX_PIN          21\r
+\r
+#define Y_STEP_PIN         23\r
+#define Y_DIR_PIN          22\r
+#define Y_ENABLE_PIN       19\r
+#define Y_MIN_PIN          25\r
+#define Y_MAX_PIN          26\r
+\r
+#define Z_STEP_PIN         29\r
+#define Z_DIR_PIN          30\r
+#define Z_ENABLE_PIN       31\r
+#define Z_MIN_PIN           2\r
+#define Z_MAX_PIN           1\r
+\r
+#define E_STEP_PIN         12\r
+#define E_DIR_PIN          16\r
+#define E_ENABLE_PIN        3\r
+\r
+#define SDPOWER          -1\r
+#define SDSS          -1\r
+#define LED_PIN             0\r
+#define FAN_PIN            -1\r
+#define PS_ON_PIN          -1\r
+#define KILL_PIN           -1\r
+\r
+#define HEATER_0_PIN       14\r
+#define TEMP_0_PIN          4 //D27   // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!\r
+#define HEATER_1_PIN        -1\r
+#define HEATER_2_PIN        -1\r
+/*  Unused (1) (2) (3) 4 5 6 7 8 9 10 11 12 13 (14) (15) (16) 17 (18) (19) (20) (21) (22) (23) 24 (25) (26) (27) 28 (29) (30) (31)  */\r
+\r
+\r
+\r
+#endif\r
+\r
+\r
+/****************************************************************************************\r
+* RepRap Motherboard  ****---NOOOOOO RS485/EXTRUDER CONTROLLER!!!!!!!!!!!!!!!!!---*******\r
+*\r
+****************************************************************************************/\r
+#if MOTHERBOARD == 2\r
+#define KNOWN_BOARD 1\r
+\r
+#ifndef __AVR_ATmega644P__\r
+#error Oops!  Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu.\r
+#endif\r
+\r
+#define X_STEP_PIN      15\r
+#define X_DIR_PIN       18\r
+#define X_ENABLE_PIN    19\r
+#define X_MIN_PIN       20\r
+#define X_MAX_PIN       21\r
+\r
+#define Y_STEP_PIN      23\r
+#define Y_DIR_PIN       22\r
+#define Y_ENABLE_PIN    24\r
+#define Y_MIN_PIN       25\r
+#define Y_MAX_PIN       26\r
+\r
+#define Z_STEP_PINN     27\r
+#define Z_DIR_PINN      28\r
+#define Z_ENABLE_PIN    29\r
+#define Z_MIN_PIN       30\r
+#define Z_MAX_PIN       31\r
+\r
+#define E_STEP_PIN      17\r
+#define E_DIR_PIN       16\r
+#define E_ENABLE_PIN    -1\r
+\r
+#define SDPOWER          -1\r
+#define SDSS          4\r
+#define LED_PIN          0\r
+\r
+#define SD_CARD_WRITE    2\r
+#define SD_CARD_DETECT   3\r
+#define SD_CARD_SELECT   4\r
+\r
+//our RS485 pins\r
+#define TX_ENABLE_PIN  12\r
+#define RX_ENABLE_PIN  13\r
+\r
+//pin for controlling the PSU.\r
+#define PS_ON_PIN       14\r
+\r
+#define FAN_PIN         -1\r
+#define KILL_PIN        -1\r
+\r
+#define HEATER_0_PIN    -1\r
+#define TEMP_0_PIN      -1    // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!\r
+#define HEATER_1_PIN        -1\r
+#define HEATER_2_PIN        -1\r
+\r
+\r
+\r
+#endif\r
+\r
+/****************************************************************************************\r
+* Arduino Mega pin assignment\r
+*\r
+****************************************************************************************/\r
+#if MOTHERBOARD == 33\r
+#define MOTHERBOARD 3\r
+#define RAMPS_V_1_3\r
+#endif\r
+#if MOTHERBOARD == 3\r
+#define KNOWN_BOARD 1\r
+\r
+//////////////////FIX THIS//////////////\r
+#ifndef __AVR_ATmega1280__\r
+ #ifndef __AVR_ATmega2560__\r
+ #error Oops!  Make sure you have 'Arduino Mega' selected from the 'Tools -> Boards' menu.\r
+ #endif\r
+#endif\r
+\r
+// uncomment one of the following lines for RAMPS v1.3 or v1.0, comment both for v1.2 or 1.1\r
+// #define RAMPS_V_1_3\r
+// #define RAMPS_V_1_0\r
+\r
+#ifdef RAMPS_V_1_3\r
+\r
+#define X_STEP_PIN         54\r
+#define X_DIR_PIN          55\r
+#define X_ENABLE_PIN       38\r
+#define X_MIN_PIN           3\r
+#define X_MAX_PIN          -1   //2 //Max endstops default to disabled "-1", set to commented value to enable.\r
+\r
+#define Y_STEP_PIN         60\r
+#define Y_DIR_PIN          61\r
+#define Y_ENABLE_PIN       56\r
+#define Y_MIN_PIN          14\r
+#define Y_MAX_PIN          -1   //15\r
+\r
+#define Z_STEP_PIN         46\r
+#define Z_DIR_PIN          48\r
+#define Z_ENABLE_PIN       62\r
+#define Z_MIN_PIN          18\r
+#define Z_MAX_PIN          -1   //19\r
+\r
+#define E_STEP_PIN         26\r
+#define E_DIR_PIN          28\r
+#define E_ENABLE_PIN       24\r
+\r
+#define SDPOWER            -1\r
+#define SDSS               53\r
+#define LED_PIN            13\r
+#define FAN_PIN            9\r
+#define PS_ON_PIN          12\r
+#define KILL_PIN           -1\r
+\r
+#define HEATER_0_PIN       10\r
+#define HEATER_1_PIN       8\r
+#define HEATER_2_PIN        -1\r
+#define TEMP_0_PIN         13   // ANALOG NUMBERING\r
+#define TEMP_1_PIN         14   // ANALOG NUMBERING\r
+#define TEMP_2_PIN         -1   // ANALOG NUMBERING\r
+\r
+\r
+#else // RAMPS_V_1_1 or RAMPS_V_1_2 as default\r
+\r
+#define X_STEP_PIN         26\r
+#define X_DIR_PIN          28\r
+#define X_ENABLE_PIN       24\r
+#define X_MIN_PIN           3\r
+#define X_MAX_PIN          -1    //2\r
+\r
+#define Y_STEP_PIN         38\r
+#define Y_DIR_PIN          40\r
+#define Y_ENABLE_PIN       36\r
+#define Y_MIN_PIN          16\r
+#define Y_MAX_PIN          -1    //17\r
+\r
+#define Z_STEP_PIN         44\r
+#define Z_DIR_PIN          46\r
+#define Z_ENABLE_PIN       42\r
+#define Z_MIN_PIN          18\r
+#define Z_MAX_PIN          -1    //19\r
+\r
+#define E_STEP_PIN         32\r
+#define E_DIR_PIN          34\r
+#define E_ENABLE_PIN       30\r
+\r
+#define SDPOWER            48\r
+#define SDSS               53\r
+#define LED_PIN            13\r
+#define PS_ON_PIN          -1\r
+#define KILL_PIN           -1\r
+\r
+\r
+\r
+#ifdef RAMPS_V_1_0 // RAMPS_V_1_0\r
+  #define HEATER_0_PIN     12    // RAMPS 1.0\r
+  #define HEATER_1_PIN     -1    // RAMPS 1.0\r
+  #define FAN_PIN          11    // RAMPS 1.0\r
+\r
+#else // RAMPS_V_1_1 or RAMPS_V_1_2\r
+  #define HEATER_0_PIN     10    // RAMPS 1.1\r
+  #define HEATER_1_PIN      8    // RAMPS 1.1\r
+  #define FAN_PIN           9    // RAMPS 1.1\r
+#endif\r
+#define HEATER_2_PIN        -1\r
+#define TEMP_0_PIN          2    // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!\r
+#define TEMP_1_PIN          1    // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!\r
+#define TEMP_2_PIN          -1    // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!\r
+#endif\r
+\r
+// SPI for Max6675 Thermocouple \r
+\r
+#ifndef SDSUPPORT\r
+// these pins are defined in the SD library if building with SD support  #define SCK_PIN          52\r
+  #define MISO_PIN         50\r
+  #define MOSI_PIN         51\r
+  #define MAX6675_SS       53\r
+#else\r
+  #define MAX6675_SS       49\r
+#endif\r
+\r
+\r
+#endif\r
+/****************************************************************************************\r
+* Duemilanove w/ ATMega328P pin assignment\r
+*\r
+****************************************************************************************/\r
+#if MOTHERBOARD == 4\r
+#define KNOWN_BOARD 1\r
+\r
+#ifndef __AVR_ATmega328P__\r
+#error Oops!  Make sure you have 'Arduino Duemilanove w/ ATMega328' selected from the 'Tools -> Boards' menu.\r
+#endif\r
+\r
+#define X_STEP_PIN         19\r
+#define X_DIR_PIN          18\r
+#define X_ENABLE_PIN       -1\r
+#define X_MIN_PIN          17\r
+#define X_MAX_PIN          -1\r
+\r
+#define Y_STEP_PIN         10\r
+#define Y_DIR_PIN           7\r
+#define Y_ENABLE_PIN       -1\r
+#define Y_MIN_PIN           8\r
+#define Y_MAX_PIN          -1\r
+\r
+#define Z_STEP_PIN         13\r
+#define Z_DIR_PIN           3\r
+#define Z_ENABLE_PIN        2\r
+#define Z_MIN_PIN           4\r
+#define Z_MAX_PIN          -1\r
+\r
+#define E_STEP_PIN         11\r
+#define E_DIR_PIN          12\r
+#define E_ENABLE_PIN       -1\r
+\r
+#define SDPOWER          -1\r
+#define SDSS          -1\r
+#define LED_PIN            -1\r
+#define FAN_PIN             5\r
+#define PS_ON_PIN          -1\r
+#define KILL_PIN           -1\r
+\r
+#define HEATER_0_PIN        6\r
+#define TEMP_0_PIN          0    // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!!\r
+#define HEATER_1_PIN        -1\r
+#define HEATER_2_PIN        -1\r
+\r
+#endif\r
+\r
+/****************************************************************************************\r
+* Gen6 pin assignment\r
+*\r
+****************************************************************************************/\r
+#if MOTHERBOARD == 5\r
+#define KNOWN_BOARD 1\r
+\r
+#ifndef __AVR_ATmega644P__\r
+    #error Oops!  Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu.\r
+#endif\r
+\r
+//x axis pins\r
+    #define X_STEP_PIN      15\r
+    #define X_DIR_PIN       18\r
+    #define X_ENABLE_PIN    19\r
+    #define X_MIN_PIN       20\r
+    #define X_MAX_PIN       -1\r
+    \r
+    //y axis pins\r
+    #define Y_STEP_PIN      23\r
+    #define Y_DIR_PIN       22\r
+    #define Y_ENABLE_PIN    24\r
+    #define Y_MIN_PIN       25\r
+    #define Y_MAX_PIN       -1\r
+    \r
+    //z axis pins\r
+    #define Z_STEP_PIN      27\r
+    #define Z_DIR_PIN       28\r
+    #define Z_ENABLE_PIN    29\r
+    #define Z_MIN_PIN       30\r
+    #define Z_MAX_PIN       -1\r
+    \r
+    //extruder pins\r
+    #define E_STEP_PIN      4     //Edited @ EJE Electronics 20100715\r
+    #define E_DIR_PIN       2     //Edited @ EJE Electronics 20100715\r
+    #define E_ENABLE_PIN    3     //Added @ EJE Electronics 20100715\r
+    #define TEMP_0_PIN      5     //changed @ rkoeppl 20110410\r
+    #define HEATER_0_PIN    14    //changed @ rkoeppl 20110410\r
+    #define HEATER_1_PIN    -1    //changed @ rkoeppl 20110410\r
+    #define HEATER_2_PIN        -1\r
+    \r
+    #define SDPOWER          -1\r
+    #define SDSS          17\r
+    #define LED_PIN         -1    //changed @ rkoeppl 20110410\r
+    #define TEMP_1_PIN      -1    //changed @ rkoeppl 20110410\r
+    #define TEMP_2_PIN      -1\r
+    #define FAN_PIN         -1    //changed @ rkoeppl 20110410\r
+    #define PS_ON_PIN       -1    //changed @ rkoeppl 20110410\r
+    //our pin for debugging.\r
+    \r
+    #define DEBUG_PIN        0\r
+    \r
+    //our RS485 pins\r
+    #define TX_ENABLE_PIN      12\r
+    #define RX_ENABLE_PIN      13\r
+\r
+#endif\r
+\r
+/****************************************************************************************\r
+* Sanguinololu pin assignment\r
+*\r
+****************************************************************************************/\r
+#if MOTHERBOARD == 62\r
+#define MOTHERBOARD 6\r
+#define SANGUINOLOLU_V_1_2 \r
+#endif\r
+#if MOTHERBOARD == 6\r
+#define KNOWN_BOARD 1\r
+#ifndef __AVR_ATmega644P__\r
+#error Oops!  Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu.\r
+#endif\r
+\r
+#define X_STEP_PIN         15\r
+#define X_DIR_PIN          21\r
+#define X_MIN_PIN          18\r
+#define X_MAX_PIN           -2\r
+\r
+#define Y_STEP_PIN         22\r
+#define Y_DIR_PIN          23\r
+#define Y_MIN_PIN          19\r
+#define Y_MAX_PIN          -1\r
+\r
+#define Z_STEP_PIN         3\r
+#define Z_DIR_PIN          2\r
+#define Z_MIN_PIN          20\r
+#define Z_MAX_PIN          -1\r
+\r
+#define E_STEP_PIN         1\r
+#define E_DIR_PIN          0\r
+\r
+#define LED_PIN            -1\r
+\r
+#define FAN_PIN            -1 \r
+\r
+#define PS_ON_PIN          -1\r
+#define KILL_PIN           -1\r
+\r
+#define HEATER_0_PIN       13 // (extruder)\r
+\r
+#ifdef SANGUINOLOLU_V_1_2\r
+\r
+#define HEATER_1_PIN       12 // (bed)\r
+#define X_ENABLE_PIN       14\r
+#define Y_ENABLE_PIN       14\r
+#define Z_ENABLE_PIN       26\r
+#define E_ENABLE_PIN       14\r
+\r
+#else\r
+\r
+#define HEATER_1_PIN       14  // (bed)\r
+#define X_ENABLE_PIN       -1\r
+#define Y_ENABLE_PIN       -1\r
+#define Z_ENABLE_PIN       -1\r
+#define E_ENABLE_PIN       -1\r
+\r
+#endif\r
+\r
+#define TEMP_0_PIN          7   // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! (pin 33 extruder)\r
+#define TEMP_1_PIN          6   // MUST USE ANALOG INPUT NUMBERING NOT DIGITAL OUTPUT NUMBERING!!!!!!!!! (pin 34 bed)\r
+#define TEMP_2_PIN         -1\r
+#define SDPOWER            -1\r
+#define SDSS               31\r
+#define HEATER_2_PIN       -1\r
+\r
+#endif\r
+\r
+\r
+#if MOTHERBOARD == 7\r
+#define KNOWN_BOARD\r
+/*****************************************************************\r
+* Ultimaker pin assignment\r
+******************************************************************/\r
+\r
+#ifndef __AVR_ATmega1280__\r
+ #ifndef __AVR_ATmega2560__\r
+ #error Oops!  Make sure you have 'Arduino Mega' selected from the 'Tools -> Boards' menu.\r
+ #endif\r
+#endif\r
+\r
+#define X_STEP_PIN 25\r
+#define X_DIR_PIN 23\r
+#define X_MIN_PIN 22\r
+#define X_MAX_PIN 24\r
+#define X_ENABLE_PIN 27\r
+\r
+#define Y_STEP_PIN 31\r
+#define Y_DIR_PIN 33\r
+#define Y_MIN_PIN 26\r
+#define Y_MAX_PIN 28\r
+#define Y_ENABLE_PIN 29\r
+\r
+#define Z_STEP_PIN 37 \r
+#define Z_DIR_PIN 39\r
+#define Z_MIN_PIN 30\r
+#define Z_MAX_PIN 32\r
+#define Z_ENABLE_PIN 35\r
+\r
+#define HEATER_1_PIN 4 \r
+#define TEMP_1_PIN 11  \r
+\r
+#define EXTRUDER_0_STEP_PIN 43 \r
+#define EXTRUDER_0_DIR_PIN 45\r
+#define EXTRUDER_0_ENABLE_PIN 41\r
+#define HEATER_0_PIN  2\r
+#define TEMP_0_PIN 8   \r
+\r
+#define EXTRUDER_1_STEP_PIN 49 \r
+#define EXTRUDER_1_DIR_PIN 47\r
+#define EXTRUDER_1_ENABLE_PIN 51\r
+#define EXTRUDER_1_HEATER_PIN 3\r
+#define EXTRUDER_1_TEMPERATURE_PIN 10 \r
+#define HEATER_2_PIN 51\r
+#define TEMP_2_PIN 3\r
+\r
+\r
+\r
+#define E_STEP_PIN         EXTRUDER_0_STEP_PIN\r
+#define E_DIR_PIN          EXTRUDER_0_DIR_PIN\r
+#define E_ENABLE_PIN       EXTRUDER_0_ENABLE_PIN\r
+\r
+#define SDPOWER            -1\r
+#define SDSS               53\r
+#define LED_PIN            13\r
+#define FAN_PIN            7\r
+#define PS_ON_PIN          12\r
+#define KILL_PIN           -1\r
+\r
+#ifdef ULTRA_LCD\r
+\r
+  #ifdef NEWPANEL\r
+  //arduino pin witch triggers an piezzo beeper\r
+    #define BEEPER 18\r
+\r
+    #define LCD_PINS_RS 20 \r
+    #define LCD_PINS_ENABLE 17\r
+    #define LCD_PINS_D4 16\r
+    #define LCD_PINS_D5 21 \r
+    #define LCD_PINS_D6 5\r
+    #define LCD_PINS_D7 6\r
+    \r
+    //buttons are directly attached\r
+    #define BTN_EN1 40\r
+    #define BTN_EN2 42\r
+    #define BTN_ENC 19  //the click\r
+    \r
+    #define BLEN_C 2\r
+    #define BLEN_B 1\r
+    #define BLEN_A 0\r
+    \r
+    #define SDCARDDETECT 38\r
+    \r
+      //encoder rotation values\r
+    #define encrot0 0\r
+    #define encrot1 2\r
+    #define encrot2 3\r
+    #define encrot3 1\r
+  #else //old style panel with shift register\r
+    //arduino pin witch triggers an piezzo beeper\r
+    #define BEEPER 18\r
+\r
+    //buttons are attached to a shift register\r
+    #define SHIFT_CLK 38\r
+    #define SHIFT_LD 42\r
+    #define SHIFT_OUT 40\r
+    #define SHIFT_EN 17\r
+    \r
+    #define LCD_PINS_RS 16 \r
+    #define LCD_PINS_ENABLE 5\r
+    #define LCD_PINS_D4 6\r
+    #define LCD_PINS_D5 21 \r
+    #define LCD_PINS_D6 20\r
+    #define LCD_PINS_D7 19\r
+    \r
+    //encoder rotation values\r
+    #define encrot0 0\r
+    #define encrot1 2\r
+    #define encrot2 3\r
+    #define encrot3 1\r
+\r
+    \r
+    //bits in the shift register that carry the buttons for:\r
+    // left up center down right red\r
+    #define BL_LE 7\r
+    #define BL_UP 6\r
+    #define BL_MI 5\r
+    #define BL_DW 4\r
+    #define BL_RI 3\r
+    #define BL_ST 2\r
+\r
+    #define BLEN_B 1\r
+    #define BLEN_A 0\r
+  #endif \r
+#endif //ULTRA_LCD\r
+\r
+#endif\r
+\r
+/****************************************************************************************\r
+* Teensylu 0.7 pin assingments (ATMEGA90USB)\r
+* Requires the Teensyduino software with Teensy2.0++ selected in arduino IDE!\r
+****************************************************************************************/\r
+#if MOTHERBOARD == 8\r
+#define MOTHERBOARD 8\r
+#define KNOWN_BOARD 1\r
+\r
+\r
+#define X_STEP_PIN          0  \r
+#define X_DIR_PIN           1  \r
+#define X_ENABLE_PIN       39 \r
+#define X_MIN_PIN          13 \r
+#define X_MAX_PIN          -1    \r
+\r
+#define Y_STEP_PIN          2  \r
+#define Y_DIR_PIN           3 \r
+#define Y_ENABLE_PIN       38 \r
+#define Y_MIN_PIN          14 \r
+#define Y_MAX_PIN          -1    \r
+\r
+#define Z_STEP_PIN          4\r
+#define Z_DIR_PIN           5 \r
+#define Z_ENABLE_PIN       23 \r
+#define Z_MIN_PIN          15 \r
+#define Z_MAX_PIN          -1    \r
+\r
+#define E_STEP_PIN          6  \r
+#define E_DIR_PIN           7 \r
+#define E_ENABLE_PIN       19 \r
+\r
+\r
+\r
+#define HEATER_0_PIN       21  // Extruder\r
+#define HEATER_1_PIN       20  // Bed\r
+#define HEATER_2_PIN       -1\r
+#define FAN_PIN            22  // Fan   \r
+\r
+#define TEMP_0_PIN          7  // Extruder\r
+#define TEMP_1_PIN          6  // Bed\r
+#define TEMP_2_PIN         -1\r
+\r
+#define SDPOWER            -1\r
+#define SDSS                8\r
+#define LED_PIN            -1\r
+#define PS_ON_PIN          -1\r
+#define KILL_PIN           -1 \r
+#define ALARM_PIN          -1\r
+\r
+#ifndef SDSUPPORT\r
+// these pins are defined in the SD library if building with SD support  \r
+  #define SCK_PIN           9 \r
+  #define MISO_PIN         11 \r
+  #define MOSI_PIN         10 \r
+#endif\r
+#endif\r
+\r
+#ifndef KNOWN_BOARD\r
+#error Unknown MOTHERBOARD value in configuration.h\r
+#endif\r
+\r
+//List of pins which to ignore when asked to change by gcode, 0 and 1 are RX and TX, do not mess with those!\r
+#define SENSITIVE_PINS {0, 1, X_STEP_PIN, X_DIR_PIN, X_ENABLE_PIN, X_MIN_PIN, X_MAX_PIN, Y_STEP_PIN, Y_DIR_PIN, Y_ENABLE_PIN, Y_MIN_PIN, Y_MAX_PIN, Z_STEP_PIN, Z_DIR_PIN, Z_ENABLE_PIN, Z_MIN_PIN, Z_MAX_PIN, E_STEP_PIN, E_DIR_PIN, E_ENABLE_PIN, LED_PIN, PS_ON_PIN, HEATER_0_PIN, HEATER_1_PIN, HEATER_2_PIN, FAN_PIN, TEMP_0_PIN, TEMP_1_PIN, TEMP_2_PIN}\r
+\r
 #endif\r
index 981aa8147034e5edf4776cbd3fe47dea12aa9461..91d1a54a8010cfe6a843c282ebd0838b283cb304 100644 (file)
@@ -42,6 +42,19 @@ static long previous_millis_buttons=0;
  \r
 static MainMenu menu;\r
 \r
+#include <avr/pgmspace.h>\r
+\r
+void lcdProgMemprint(const char *str)\r
+{\r
+  char ch=pgm_read_byte(str);\r
+  while(ch)\r
+  {\r
+    lcd.print(ch);\r
+    ch=pgm_read_byte(++str);\r
+  }\r
+}\r
+#define lcdprintPGM(x) lcdProgMemprint(PSTR(x))\r
+\r
 \r
 //===========================================================================\r
 //=============================functions         ============================\r
@@ -264,9 +277,9 @@ void MainMenu::showStatus()
     feedmultiplychanged=false;\r
     encoderpos=feedmultiply;\r
     clear();\r
-    lcd.setCursor(0,0);lcd.print("\002123/567\001 ");\r
+    lcd.setCursor(0,0);lcdprintPGM("\002123/567\001 ");\r
     #if defined BED_USES_THERMISTOR || defined BED_USES_AD595 \r
-      lcd.setCursor(10,0);lcd.print("B123/567\001 ");\r
+      lcd.setCursor(10,0);lcdprintPGM("B123/567\001 ");\r
     #endif\r
   }\r
     \r
@@ -311,7 +324,7 @@ void MainMenu::showStatus()
     \r
     if(starttime!=oldtime)\r
     {\r
-      lcd.print(itostr2(time/60));lcd.print("h ");lcd.print(itostr2(time%60));lcd.print("m");\r
+      lcd.print(itostr2(time/60));lcdprintPGM("h ");lcd.print(itostr2(time%60));lcdprintPGM("m");\r
       oldtime=time;\r
     }\r
   }\r
@@ -320,7 +333,7 @@ void MainMenu::showStatus()
   if((currentz!=oldzpos)||force_lcd_update)\r
   {\r
     lcd.setCursor(10,1);\r
-    lcd.print("Z:");lcd.print(itostr31(currentz));\r
+    lcdprintPGM("Z:");lcd.print(itostr31(currentz));\r
     oldzpos=currentz;\r
   }\r
   static int oldfeedmultiply=0;\r
@@ -339,7 +352,7 @@ void MainMenu::showStatus()
   {\r
    oldfeedmultiply=curfeedmultiply;\r
    lcd.setCursor(0,2);\r
-   lcd.print(itostr3(curfeedmultiply));lcd.print("% ");\r
+   lcd.print(itostr3(curfeedmultiply));lcdprintPGM("% ");\r
   }\r
   if(messagetext[0]!='\0')\r
   {\r
@@ -353,9 +366,9 @@ void MainMenu::showStatus()
   if(force_lcd_update)  //initial display of content\r
   {\r
     encoderpos=feedmultiply;\r
-    lcd.setCursor(0,0);lcd.print("\002123/567\001 ");\r
+    lcd.setCursor(0,0);lcdprintPGM("\002123/567\001 ");\r
     #if defined BED_USES_THERMISTOR || defined BED_USES_AD595 \r
-    lcd.setCursor(10,0);lcd.print("B123/567\001 ");\r
+    lcd.setCursor(10,0);lcdprintPGM("B123/567\001 ");\r
     #endif\r
   }\r
     \r
@@ -405,7 +418,7 @@ void MainMenu::showPrepare()
       {\r
         if(force_lcd_update)\r
         {\r
-          lcd.setCursor(0,line);lcd.print(" Prepare");\r
+          lcd.setCursor(0,line);lcdprintPGM(" Prepare");\r
         }\r
         if((activeline==line) && CLICKED)\r
         {\r
@@ -418,7 +431,7 @@ void MainMenu::showPrepare()
       {\r
         if(force_lcd_update)\r
         {\r
-          lcd.setCursor(0,line);lcd.print(" Auto Home");\r
+          lcd.setCursor(0,line);lcdprintPGM(" Auto Home");\r
         }\r
         if((activeline==line) && CLICKED)\r
         {\r
@@ -431,7 +444,7 @@ void MainMenu::showPrepare()
       {\r
         if(force_lcd_update)\r
         {\r
-          lcd.setCursor(0,line);lcd.print(" Set Origin");\r
+          lcd.setCursor(0,line);lcdprintPGM(" Set Origin");\r
           \r
         }\r
         if((activeline==line) && CLICKED)\r
@@ -445,7 +458,7 @@ void MainMenu::showPrepare()
       {\r
         if(force_lcd_update)\r
         {\r
-          lcd.setCursor(0,line);lcd.print(" Preheat"); \r
+          lcd.setCursor(0,line);lcdprintPGM(" Preheat"); \r
         }\r
         if((activeline==line) && CLICKED)\r
         {\r
@@ -458,7 +471,7 @@ void MainMenu::showPrepare()
       {\r
         if(force_lcd_update)\r
         {\r
-          lcd.setCursor(0,line);lcd.print(" Extrude");\r
+          lcd.setCursor(0,line);lcdprintPGM(" Extrude");\r
         }\r
         if((activeline==line) && CLICKED)\r
         {\r
@@ -472,7 +485,7 @@ void MainMenu::showPrepare()
       {\r
         if(force_lcd_update)\r
         {\r
-          lcd.setCursor(0,line);lcd.print(" Disable Steppers");\r
+          lcd.setCursor(0,line);lcdprintPGM(" Disable Steppers");\r
         }\r
         if((activeline==line) && CLICKED)\r
         {\r
@@ -541,7 +554,7 @@ void MainMenu::showControl()
       {\r
         if(force_lcd_update)\r
         {\r
-          lcd.setCursor(0,line);lcd.print(" Control");\r
+          lcd.setCursor(0,line);lcdprintPGM(" Control");\r
         }\r
         if((activeline==line) && CLICKED)\r
         {\r
@@ -554,7 +567,7 @@ void MainMenu::showControl()
       {\r
         if(force_lcd_update)\r
         {\r
-          lcd.setCursor(0,line);lcd.print(" \002Nozzle:");\r
+          lcd.setCursor(0,line);lcdprintPGM(" \002Nozzle:");\r
           lcd.setCursor(13,line);lcd.print(ftostr3(intround(degHotend0())));\r
         }\r
         \r
@@ -588,7 +601,7 @@ void MainMenu::showControl()
       {\r
         if(force_lcd_update)\r
         {\r
-          lcd.setCursor(0,line);lcd.print(" Fan speed:");\r
+          lcd.setCursor(0,line);lcdprintPGM(" Fan speed:");\r
           lcd.setCursor(13,line);lcd.print(ftostr3(fanpwm));\r
         }\r
         \r
@@ -625,8 +638,8 @@ void MainMenu::showControl()
     {\r
       if(force_lcd_update)\r
         {\r
-          lcd.setCursor(0,line);lcd.print(" Acc:");\r
-          lcd.setCursor(13,line);lcd.print(itostr3(acceleration/100));lcd.print("00");\r
+          lcd.setCursor(0,line);lcdprintPGM(" Acc:");\r
+          lcd.setCursor(13,line);lcd.print(itostr3(acceleration/100));lcdprintPGM("00");\r
         }\r
         \r
         if((activeline==line) )\r
@@ -650,7 +663,7 @@ void MainMenu::showControl()
           {\r
             if(encoderpos<5) encoderpos=5;\r
             if(encoderpos>990) encoderpos=990;\r
-            lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));lcd.print("00");\r
+            lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));lcdprintPGM("00");\r
           }\r
         }\r
       }break;\r
@@ -658,7 +671,7 @@ void MainMenu::showControl()
       {\r
       if(force_lcd_update)\r
         {\r
-          lcd.setCursor(0,line);lcd.print(" Vxy-jerk: ");\r
+          lcd.setCursor(0,line);lcdprintPGM(" Vxy-jerk: ");\r
           lcd.setCursor(13,line);lcd.print(itostr3(max_xy_jerk/60));\r
         }\r
         \r
@@ -692,7 +705,7 @@ void MainMenu::showControl()
       {\r
       if(force_lcd_update)\r
         {\r
-          lcd.setCursor(0,line);lcd.print(" PID-P: ");\r
+          lcd.setCursor(0,line);lcdprintPGM(" PID-P: ");\r
           lcd.setCursor(13,line);lcd.print(itostr4(Kp));\r
         }\r
         \r
@@ -726,7 +739,7 @@ void MainMenu::showControl()
       {\r
       if(force_lcd_update)\r
         {\r
-          lcd.setCursor(0,line);lcd.print(" PID-I: ");\r
+          lcd.setCursor(0,line);lcdprintPGM(" PID-I: ");\r
           lcd.setCursor(13,line);lcd.print(ftostr51(Ki));\r
         }\r
         \r
@@ -760,7 +773,7 @@ void MainMenu::showControl()
       {\r
       if(force_lcd_update)\r
         {\r
-          lcd.setCursor(0,line);lcd.print(" PID-D: ");\r
+          lcd.setCursor(0,line);lcdprintPGM(" PID-D: ");\r
           lcd.setCursor(13,line);lcd.print(itostr4(Kd));\r
         }\r
         \r
@@ -797,7 +810,7 @@ void MainMenu::showControl()
       {\r
       if(force_lcd_update)\r
         {\r
-          lcd.setCursor(0,line);lcd.print(" PID-C: ");\r
+          lcd.setCursor(0,line);lcdprintPGM(" PID-C: ");\r
           lcd.setCursor(13,line);lcd.print(itostr3(Kc));\r
         }\r
         \r
@@ -834,11 +847,11 @@ void MainMenu::showControl()
       {\r
       if(force_lcd_update)\r
         {\r
-          lcd.setCursor(0,line);lcd.print(" Vmax ");\r
-          if(i==ItemC_vmaxx)lcd.print("x:");\r
-          if(i==ItemC_vmaxy)lcd.print("y:");\r
-          if(i==ItemC_vmaxz)lcd.print("z:");\r
-          if(i==ItemC_vmaxe)lcd.print("e:");\r
+          lcd.setCursor(0,line);lcdprintPGM(" Vmax ");\r
+          if(i==ItemC_vmaxx)lcdprintPGM("x:");\r
+          if(i==ItemC_vmaxy)lcdprintPGM("y:");\r
+          if(i==ItemC_vmaxz)lcdprintPGM("z:");\r
+          if(i==ItemC_vmaxe)lcdprintPGM("e:");\r
           lcd.setCursor(13,line);lcd.print(itostr3(max_feedrate[i-ItemC_vmaxx]/60));\r
         }\r
         \r
@@ -873,7 +886,7 @@ void MainMenu::showControl()
     {\r
       if(force_lcd_update)\r
         {\r
-          lcd.setCursor(0,line);lcd.print(" Vmin:");\r
+          lcd.setCursor(0,line);lcdprintPGM(" Vmin:");\r
           lcd.setCursor(13,line);lcd.print(itostr3(minimumfeedrate/60));\r
         }\r
         \r
@@ -907,7 +920,7 @@ void MainMenu::showControl()
     {\r
       if(force_lcd_update)\r
         {\r
-          lcd.setCursor(0,line);lcd.print(" VTrav min:");\r
+          lcd.setCursor(0,line);lcdprintPGM(" VTrav min:");\r
           lcd.setCursor(13,line);lcd.print(itostr3(mintravelfeedrate/60));\r
         }\r
         \r
@@ -945,12 +958,12 @@ void MainMenu::showControl()
     {\r
       if(force_lcd_update)\r
         {\r
-          lcd.setCursor(0,line);lcd.print(" Amax ");\r
-          if(i==ItemC_amaxx)lcd.print("x:");\r
-          if(i==ItemC_amaxy)lcd.print("y:");\r
-          if(i==ItemC_amaxz)lcd.print("z:");\r
-          if(i==ItemC_amaxe)lcd.print("e:");\r
-          lcd.setCursor(13,line);lcd.print(itostr3(max_acceleration_units_per_sq_second[i-ItemC_amaxx]/100));lcd.print("00");\r
+          lcd.setCursor(0,line);lcdprintPGM(" Amax ");\r
+          if(i==ItemC_amaxx)lcdprintPGM("x:");\r
+          if(i==ItemC_amaxy)lcdprintPGM("y:");\r
+          if(i==ItemC_amaxz)lcdprintPGM("z:");\r
+          if(i==ItemC_amaxe)lcdprintPGM("e:");\r
+          lcd.setCursor(13,line);lcd.print(itostr3(max_acceleration_units_per_sq_second[i-ItemC_amaxx]/100));lcdprintPGM("00");\r
         }\r
         \r
         if((activeline==line) )\r
@@ -974,7 +987,7 @@ void MainMenu::showControl()
           {\r
             if(encoderpos<1) encoderpos=1;\r
             if(encoderpos>990) encoderpos=990;\r
-            lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));lcd.print("00");\r
+            lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));lcdprintPGM("00");\r
           }\r
         }\r
       }break;\r
@@ -982,8 +995,8 @@ void MainMenu::showControl()
     {\r
         if(force_lcd_update)\r
         {\r
-          lcd.setCursor(0,line);lcd.print(" A-retract:");\r
-          lcd.setCursor(13,line);lcd.print(ftostr3(retract_acceleration/100));lcd.print("00");\r
+          lcd.setCursor(0,line);lcdprintPGM(" A-retract:");\r
+          lcd.setCursor(13,line);lcd.print(ftostr3(retract_acceleration/100));lcdprintPGM("00");\r
         }\r
         \r
         if((activeline==line) )\r
@@ -1008,7 +1021,7 @@ void MainMenu::showControl()
           {\r
             if(encoderpos<10) encoderpos=10;\r
             if(encoderpos>990) encoderpos=990;\r
-            lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));lcd.print("00");\r
+            lcd.setCursor(13,line);lcd.print(itostr3(encoderpos));lcdprintPGM("00");\r
           }\r
         }\r
       }break;\r
@@ -1016,7 +1029,7 @@ void MainMenu::showControl()
          {\r
       if(force_lcd_update)\r
         {\r
-          lcd.setCursor(0,line);lcd.print(" Esteps/mm:");\r
+          lcd.setCursor(0,line);lcdprintPGM(" Esteps/mm:");\r
           lcd.setCursor(13,line);lcd.print(itostr4(axis_steps_per_unit[3]));\r
         }\r
         \r
@@ -1053,7 +1066,7 @@ void MainMenu::showControl()
     {\r
       if(force_lcd_update)\r
       {\r
-        lcd.setCursor(0,line);lcd.print(" Store EPROM");\r
+        lcd.setCursor(0,line);lcdprintPGM(" Store EPROM");\r
       }\r
       if((activeline==line) && CLICKED)\r
       {\r
@@ -1067,7 +1080,7 @@ void MainMenu::showControl()
     {\r
       if(force_lcd_update)\r
       {\r
-        lcd.setCursor(0,line);lcd.print(" Load EPROM");\r
+        lcd.setCursor(0,line);lcdprintPGM(" Load EPROM");\r
       }\r
       if((activeline==line) && CLICKED)\r
       {\r
@@ -1081,7 +1094,7 @@ void MainMenu::showControl()
     {\r
       if(force_lcd_update)\r
       {\r
-        lcd.setCursor(0,line);lcd.print(" Restore Failsafe");\r
+        lcd.setCursor(0,line);lcdprintPGM(" Restore Failsafe");\r
       }\r
       if((activeline==line) && CLICKED)\r
       {\r
@@ -1165,7 +1178,7 @@ void MainMenu::showSD()
       {\r
         if(force_lcd_update)\r
         {\r
-          lcd.setCursor(0,line);lcd.print(" File");\r
+          lcd.setCursor(0,line);lcdprintPGM(" File");\r
         }\r
         if((activeline==line) && CLICKED)\r
         {\r
@@ -1185,11 +1198,11 @@ void MainMenu::showSD()
           if(true)\r
           #endif\r
           {\r
-            lcd.print(" \004Refresh");\r
+            lcdprintPGM(" \004Refresh");\r
           }\r
           else\r
           {\r
-            lcd.print(" \004Insert Card");\r
+            lcdprintPGM(" \004Insert Card");\r
           }\r
           \r
         }\r
@@ -1210,7 +1223,7 @@ void MainMenu::showSD()
         {\r
           card.getfilename(i-2);\r
           //Serial.print("Filenr:");Serial.println(i-2);\r
-          lcd.setCursor(0,line);lcd.print(" ");lcd.print(card.filename);\r
+          lcd.setCursor(0,line);lcdprintPGM(" ");lcd.print(card.filename);\r
         }\r
         if((activeline==line) && CLICKED)\r
         {\r
@@ -1292,7 +1305,7 @@ void MainMenu::showMainMenu()
     { \r
       case ItemM_watch:\r
       {\r
-        if(force_lcd_update) {lcd.setCursor(0,line);lcd.print(" Watch   \x7E");}\r
+        if(force_lcd_update) {lcd.setCursor(0,line);lcdprintPGM(" Watch   \x7E");}\r
         if((activeline==line)&&CLICKED)\r
         {\r
           BLOCK;\r
@@ -1302,7 +1315,7 @@ void MainMenu::showMainMenu()
       } break;\r
       case ItemM_prepare:\r
       {\r
-        if(force_lcd_update) {lcd.setCursor(0,line);lcd.print(" Prepare \x7E");}\r
+        if(force_lcd_update) {lcd.setCursor(0,line);lcdprintPGM(" Prepare \x7E");}\r
         if((activeline==line)&&CLICKED)\r
         {\r
           BLOCK;\r
@@ -1313,7 +1326,7 @@ void MainMenu::showMainMenu()
        \r
       case ItemM_control:\r
       {\r
-        if(force_lcd_update) {lcd.setCursor(0,line);lcd.print(" Control \x7E");}\r
+        if(force_lcd_update) {lcd.setCursor(0,line);lcdprintPGM(" Control \x7E");}\r
         if((activeline==line)&&CLICKED)\r
         {\r
           BLOCK;\r
@@ -1334,13 +1347,13 @@ void MainMenu::showMainMenu()
           #endif\r
           {\r
             if(card.sdprinting)\r
-              lcd.print(" Stop Print   \x7E");\r
+              lcdprintPGM(" Stop Print   \x7E");\r
             else\r
-              lcd.print(" Card Menu    \x7E");\r
+              lcdprintPGM(" Card Menu    \x7E");\r
           }\r
           else\r
           {\r
-           lcd.print(" No Card"); \r
+           lcdprintPGM(" No Card"); \r
           }\r
         }\r
         #ifdef CARDINSERTED\r