Browse Source

Merge https://github.com/MarlinFirmware/Marlin into tm-utf-minus-kanji

Conflicts:
	Marlin/dogm_lcd_implementation.h
	Marlin/fonts/make_fonts.bat

Claerd conflicts with my own #1621. (His was easy. :-) )

corrected typo in fonts/README.fonts

Applied changes to the new delta-configurations
 and deletet there some extra whitespace at the line-endings.
AnHardt 9 years ago
parent
commit
e917477fec

+ 6
- 2
.travis.yml View File

140
   - rm -rf .build/
140
   - rm -rf .build/
141
   - ino build -m mega2560
141
   - ino build -m mega2560
142
   ######## Example Configurations ##############
142
   ######## Example Configurations ##############
143
-  # Delta Config
144
-  - cp Marlin/example_configurations/delta/Configuration* Marlin/
143
+  # Delta Config (generic)
144
+  - cp Marlin/example_configurations/delta/generic/Configuration* Marlin/
145
+  - rm -rf .build/
146
+  - ino build -m mega2560
147
+  # Delta Config (Mini Kossel)
148
+  - cp Marlin/example_configurations/delta/kossel_mini/Configuration* Marlin/
145
   - rm -rf .build/
149
   - rm -rf .build/
146
   - ino build -m mega2560
150
   - ino build -m mega2560
147
   # Makibox Config  need to check board type for Teensy++ 2.0
151
   # Makibox Config  need to check board type for Teensy++ 2.0

+ 1
- 1
Documentation/GCodes.md View File

66
 *  M201 - Set max acceleration in units/s^2 for print moves (M201 X1000 Y1000)
66
 *  M201 - Set max acceleration in units/s^2 for print moves (M201 X1000 Y1000)
67
 *  M202 - Set max acceleration in units/s^2 for travel moves (M202 X1000 Y1000) Unused in Marlin!!
67
 *  M202 - Set max acceleration in units/s^2 for travel moves (M202 X1000 Y1000) Unused in Marlin!!
68
 *  M203 - Set maximum feedrate that your machine can sustain (M203 X200 Y200 Z300 E10000) in mm/sec
68
 *  M203 - Set maximum feedrate that your machine can sustain (M203 X200 Y200 Z300 E10000) in mm/sec
69
-*  M204 - Set default acceleration: S normal moves T filament only moves (M204 S3000 T7000) im mm/sec^2  also sets minimum segment time in ms (B20000) to prevent buffer underruns and M20 minimum feedrate
69
+*  M204 - Set default acceleration: P for Printing moves, R for Retract only (no X, Y, Z) moves and T for Travel (non printing) moves (ex. M204 P800 T3000 R9000) in mm/sec^2
70
 *  M205 - advanced settings:  minimum travel speed S=while printing T=travel only,  B=minimum segment time X= maximum xy jerk, Z=maximum Z jerk, E=maximum E jerk
70
 *  M205 - advanced settings:  minimum travel speed S=while printing T=travel only,  B=minimum segment time X= maximum xy jerk, Z=maximum Z jerk, E=maximum E jerk
71
 *  M206 - set additional homing offset
71
 *  M206 - set additional homing offset
72
 *  M207 - set retract length S[positive mm] F[feedrate mm/min] Z[additional zlift/hop], stays in mm regardless of M200 setting
72
 *  M207 - set retract length S[positive mm] F[feedrate mm/min] Z[additional zlift/hop], stays in mm regardless of M200 setting

+ 1
- 0
Marlin/Configuration.h View File

443
 
443
 
444
   #define Z_RAISE_BEFORE_PROBING 15    //How much the extruder will be raised before traveling to the first probing point.
444
   #define Z_RAISE_BEFORE_PROBING 15    //How much the extruder will be raised before traveling to the first probing point.
445
   #define Z_RAISE_BETWEEN_PROBINGS 5  //How much the extruder will be raised when traveling from between next probing points
445
   #define Z_RAISE_BETWEEN_PROBINGS 5  //How much the extruder will be raised when traveling from between next probing points
446
+  #define Z_RAISE_AFTER_PROBING 15    //How much the extruder will be raised after the last probing point.
446
 
447
 
447
 //   #define Z_PROBE_END_SCRIPT "G1 Z10 F12000\nG1 X15 Y330\nG1 Z0.5\nG1 Z10" //These commands will be executed in the end of G29 routine.
448
 //   #define Z_PROBE_END_SCRIPT "G1 Z10 F12000\nG1 X15 Y330\nG1 Z0.5\nG1 Z10" //These commands will be executed in the end of G29 routine.
448
                                                                             //Useful to retract a deployable probe.
449
                                                                             //Useful to retract a deployable probe.

+ 6
- 0
Marlin/Marlin.h View File

192
 void get_coordinates();
192
 void get_coordinates();
193
 #ifdef DELTA
193
 #ifdef DELTA
194
 void calculate_delta(float cartesian[3]);
194
 void calculate_delta(float cartesian[3]);
195
+  #ifdef ENABLE_AUTO_BED_LEVELING
196
+  extern int delta_grid_spacing[2];
197
+  void adjust_delta(float cartesian[3]);
198
+  #endif
195
 extern float delta[3];
199
 extern float delta[3];
200
+void prepare_move_raw();
196
 #endif
201
 #endif
197
 #ifdef SCARA
202
 #ifdef SCARA
198
 void calculate_delta(float cartesian[3]);
203
 void calculate_delta(float cartesian[3]);
199
 void calculate_SCARA_forward_Transform(float f_scara[3]);
204
 void calculate_SCARA_forward_Transform(float f_scara[3]);
200
 #endif
205
 #endif
206
+void reset_bed_level();
201
 void prepare_move();
207
 void prepare_move();
202
 void kill();
208
 void kill();
203
 void Stop();
209
 void Stop();

+ 339
- 40
Marlin/Marlin_main.cpp View File

143
 // M201 - Set max acceleration in units/s^2 for print moves (M201 X1000 Y1000)
143
 // M201 - Set max acceleration in units/s^2 for print moves (M201 X1000 Y1000)
144
 // M202 - Set max acceleration in units/s^2 for travel moves (M202 X1000 Y1000) Unused in Marlin!!
144
 // M202 - Set max acceleration in units/s^2 for travel moves (M202 X1000 Y1000) Unused in Marlin!!
145
 // M203 - Set maximum feedrate that your machine can sustain (M203 X200 Y200 Z300 E10000) in mm/sec
145
 // M203 - Set maximum feedrate that your machine can sustain (M203 X200 Y200 Z300 E10000) in mm/sec
146
-// M204 - Set default acceleration: S normal moves T filament only moves (M204 S3000 T7000) in mm/sec^2  also sets minimum segment time in ms (B20000) to prevent buffer under-runs and M20 minimum feedrate
146
+// M204 - Set default acceleration: P for Printing moves, R for Retract only (no X, Y, Z) moves and T for Travel (non printing) moves (ex. M204 P800 T3000 R9000) in mm/sec^2
147
 // M205 -  advanced settings:  minimum travel speed S=while printing T=travel only,  B=minimum segment time X= maximum xy jerk, Z=maximum Z jerk, E=maximum E jerk
147
 // M205 -  advanced settings:  minimum travel speed S=while printing T=travel only,  B=minimum segment time X= maximum xy jerk, Z=maximum Z jerk, E=maximum E jerk
148
 // M206 - Set additional homing offset
148
 // M206 - Set additional homing offset
149
 // M207 - Set retract length S[positive mm] F[feedrate mm/min] Z[additional zlift/hop], stays in mm regardless of M200 setting
149
 // M207 - Set retract length S[positive mm] F[feedrate mm/min] Z[additional zlift/hop], stays in mm regardless of M200 setting
350
   float delta_diagonal_rod = DELTA_DIAGONAL_ROD;
350
   float delta_diagonal_rod = DELTA_DIAGONAL_ROD;
351
   float delta_diagonal_rod_2 = sq(delta_diagonal_rod);
351
   float delta_diagonal_rod_2 = sq(delta_diagonal_rod);
352
   float delta_segments_per_second = DELTA_SEGMENTS_PER_SECOND;
352
   float delta_segments_per_second = DELTA_SEGMENTS_PER_SECOND;
353
+  #ifdef ENABLE_AUTO_BED_LEVELING
354
+    float bed_level[AUTO_BED_LEVELING_GRID_POINTS][AUTO_BED_LEVELING_GRID_POINTS];
355
+  #endif
353
 #endif
356
 #endif
354
 
357
 
355
 #ifdef SCARA
358
 #ifdef SCARA
356
   float axis_scaling[3] = { 1, 1, 1 };    // Build size scaling, default to 1
359
   float axis_scaling[3] = { 1, 1, 1 };    // Build size scaling, default to 1
360
+  static float delta[3] = { 0, 0, 0 };		
357
 #endif        
361
 #endif        
358
 
362
 
359
 bool cancel_heatup = false;
363
 bool cancel_heatup = false;
380
 const char axis_codes[NUM_AXIS] = {'X', 'Y', 'Z', 'E'};
384
 const char axis_codes[NUM_AXIS] = {'X', 'Y', 'Z', 'E'};
381
 static float destination[NUM_AXIS] = { 0, 0, 0, 0 };
385
 static float destination[NUM_AXIS] = { 0, 0, 0, 0 };
382
 
386
 
383
-#ifndef DELTA
384
-  static float delta[3] = { 0, 0, 0 };
385
-#endif
386
-
387
 static float offset[3] = { 0, 0, 0 };
387
 static float offset[3] = { 0, 0, 0 };
388
 static bool home_all_axis = true;
388
 static bool home_all_axis = true;
389
 static float feedrate = 1500.0, next_feedrate, saved_feedrate;
389
 static float feedrate = 1500.0, next_feedrate, saved_feedrate;
1077
 
1077
 
1078
 #ifdef ENABLE_AUTO_BED_LEVELING
1078
 #ifdef ENABLE_AUTO_BED_LEVELING
1079
 #ifdef AUTO_BED_LEVELING_GRID
1079
 #ifdef AUTO_BED_LEVELING_GRID
1080
+
1081
+#ifndef DELTA
1080
 static void set_bed_level_equation_lsq(double *plane_equation_coefficients)
1082
 static void set_bed_level_equation_lsq(double *plane_equation_coefficients)
1081
 {
1083
 {
1082
     vector_3 planeNormal = vector_3(-plane_equation_coefficients[0], -plane_equation_coefficients[1], 1);
1084
     vector_3 planeNormal = vector_3(-plane_equation_coefficients[0], -plane_equation_coefficients[1], 1);
1099
 
1101
 
1100
     plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
1102
     plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
1101
 }
1103
 }
1104
+#endif
1102
 
1105
 
1103
 #else // not AUTO_BED_LEVELING_GRID
1106
 #else // not AUTO_BED_LEVELING_GRID
1104
 
1107
 
1132
 #endif // AUTO_BED_LEVELING_GRID
1135
 #endif // AUTO_BED_LEVELING_GRID
1133
 
1136
 
1134
 static void run_z_probe() {
1137
 static void run_z_probe() {
1138
+  #ifdef DELTA
1139
+    
1140
+    float start_z = current_position[Z_AXIS];
1141
+    long start_steps = st_get_position(Z_AXIS);
1142
+  
1143
+    // move down slowly until you find the bed
1144
+    feedrate = homing_feedrate[Z_AXIS] / 4;
1145
+    destination[Z_AXIS] = -10;
1146
+    prepare_move_raw();
1147
+    st_synchronize();
1148
+    endstops_hit_on_purpose();
1149
+    
1150
+    // we have to let the planner know where we are right now as it is not where we said to go.
1151
+    long stop_steps = st_get_position(Z_AXIS);
1152
+    float mm = start_z - float(start_steps - stop_steps) / axis_steps_per_unit[Z_AXIS];
1153
+    current_position[Z_AXIS] = mm;
1154
+    calculate_delta(current_position);
1155
+    plan_set_position(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], current_position[E_AXIS]);
1156
+    
1157
+  #else
1158
+
1135
     plan_bed_level_matrix.set_to_identity();
1159
     plan_bed_level_matrix.set_to_identity();
1136
     feedrate = homing_feedrate[Z_AXIS];
1160
     feedrate = homing_feedrate[Z_AXIS];
1137
 
1161
 
1169
     current_position[Z_AXIS] = st_get_position_mm(Z_AXIS);
1193
     current_position[Z_AXIS] = st_get_position_mm(Z_AXIS);
1170
     // make sure the planner knows where we are as it may be a bit different than we last said to move to
1194
     // make sure the planner knows where we are as it may be a bit different than we last said to move to
1171
     plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
1195
     plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
1196
+    
1197
+  #endif
1172
 }
1198
 }
1173
 
1199
 
1174
 static void do_blocking_move_to(float x, float y, float z) {
1200
 static void do_blocking_move_to(float x, float y, float z) {
1175
     float oldFeedRate = feedrate;
1201
     float oldFeedRate = feedrate;
1176
 
1202
 
1203
+#ifdef DELTA
1204
+
1205
+    feedrate = XY_TRAVEL_SPEED;
1206
+    
1207
+    destination[X_AXIS] = x;
1208
+    destination[Y_AXIS] = y;
1209
+    destination[Z_AXIS] = z;
1210
+    prepare_move_raw();
1211
+    st_synchronize();
1212
+
1213
+#else
1214
+
1177
     feedrate = homing_feedrate[Z_AXIS];
1215
     feedrate = homing_feedrate[Z_AXIS];
1178
 
1216
 
1179
     current_position[Z_AXIS] = z;
1217
     current_position[Z_AXIS] = z;
1187
     plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feedrate/60, active_extruder);
1225
     plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feedrate/60, active_extruder);
1188
     st_synchronize();
1226
     st_synchronize();
1189
 
1227
 
1228
+#endif
1229
+
1190
     feedrate = oldFeedRate;
1230
     feedrate = oldFeedRate;
1191
 }
1231
 }
1192
 
1232
 
1226
         servos[servo_endstops[Z_AXIS]].detach();
1266
         servos[servo_endstops[Z_AXIS]].detach();
1227
       #endif
1267
       #endif
1228
     }
1268
     }
1269
+  #elif defined(Z_PROBE_ALLEN_KEY)
1270
+    feedrate = homing_feedrate[X_AXIS];
1271
+    
1272
+    // Move to the start position to initiate deployment
1273
+    destination[X_AXIS] = Z_PROBE_ALLEN_KEY_DEPLOY_X;
1274
+    destination[Y_AXIS] = Z_PROBE_ALLEN_KEY_DEPLOY_Y;
1275
+    destination[Z_AXIS] = Z_PROBE_ALLEN_KEY_DEPLOY_Z;
1276
+    prepare_move_raw();
1277
+
1278
+    // Home X to touch the belt
1279
+    feedrate = homing_feedrate[X_AXIS]/10;
1280
+    destination[X_AXIS] = 0;
1281
+    prepare_move_raw();
1282
+    
1283
+    // Home Y for safety
1284
+    feedrate = homing_feedrate[X_AXIS]/2;
1285
+    destination[Y_AXIS] = 0;
1286
+    prepare_move_raw();
1287
+    
1288
+    st_synchronize();
1289
+    
1290
+    bool z_min_endstop = (READ(Z_MIN_PIN) != Z_MIN_ENDSTOP_INVERTING);
1291
+    if (z_min_endstop)
1292
+    {
1293
+        if (!Stopped)
1294
+        {
1295
+            SERIAL_ERROR_START;
1296
+            SERIAL_ERRORLNPGM("Z-Probe failed to engage!");
1297
+            LCD_ALERTMESSAGEPGM("Err: ZPROBE");
1298
+        }
1299
+        Stop();
1300
+    }
1229
   #endif
1301
   #endif
1302
+
1230
 }
1303
 }
1231
 
1304
 
1232
 static void retract_z_probe() {
1305
 static void retract_z_probe() {
1242
         servos[servo_endstops[Z_AXIS]].detach();
1315
         servos[servo_endstops[Z_AXIS]].detach();
1243
       #endif
1316
       #endif
1244
     }
1317
     }
1318
+  #elif defined(Z_PROBE_ALLEN_KEY)
1319
+    // Move up for safety
1320
+    feedrate = homing_feedrate[X_AXIS];
1321
+    destination[Z_AXIS] = current_position[Z_AXIS] + 20;
1322
+    prepare_move_raw();
1323
+
1324
+    // Move to the start position to initiate retraction
1325
+    destination[X_AXIS] = Z_PROBE_ALLEN_KEY_RETRACT_X;
1326
+    destination[Y_AXIS] = Z_PROBE_ALLEN_KEY_RETRACT_Y;
1327
+    destination[Z_AXIS] = Z_PROBE_ALLEN_KEY_RETRACT_Z;
1328
+    prepare_move_raw();
1329
+
1330
+    // Move the nozzle down to push the probe into retracted position
1331
+    feedrate = homing_feedrate[Z_AXIS]/10;
1332
+    destination[Z_AXIS] = current_position[Z_AXIS] - Z_PROBE_ALLEN_KEY_RETRACT_DEPTH;
1333
+    prepare_move_raw();
1334
+    
1335
+    // Move up for safety
1336
+    feedrate = homing_feedrate[Z_AXIS]/2;
1337
+    destination[Z_AXIS] = current_position[Z_AXIS] + Z_PROBE_ALLEN_KEY_RETRACT_DEPTH * 2;
1338
+    prepare_move_raw();
1339
+    
1340
+    // Home XY for safety
1341
+    feedrate = homing_feedrate[X_AXIS]/2;
1342
+    destination[X_AXIS] = 0;
1343
+    destination[Y_AXIS] = 0;
1344
+    prepare_move_raw();
1345
+    
1346
+    st_synchronize();
1347
+    
1348
+    bool z_min_endstop = (READ(Z_MIN_PIN) != Z_MIN_ENDSTOP_INVERTING);
1349
+    if (!z_min_endstop)
1350
+    {
1351
+        if (!Stopped)
1352
+        {
1353
+            SERIAL_ERROR_START;
1354
+            SERIAL_ERRORLNPGM("Z-Probe failed to retract!");
1355
+            LCD_ALERTMESSAGEPGM("Err: ZPROBE");
1356
+        }
1357
+        Stop();
1358
+    }
1245
   #endif
1359
   #endif
1360
+
1246
 }
1361
 }
1247
 
1362
 
1248
 enum ProbeAction { ProbeStay, ProbeEngage, ProbeRetract, ProbeEngageRetract };
1363
 enum ProbeAction { ProbeStay, ProbeEngage, ProbeRetract, ProbeEngageRetract };
1253
   do_blocking_move_to(current_position[X_AXIS], current_position[Y_AXIS], z_before);
1368
   do_blocking_move_to(current_position[X_AXIS], current_position[Y_AXIS], z_before);
1254
   do_blocking_move_to(x - X_PROBE_OFFSET_FROM_EXTRUDER, y - Y_PROBE_OFFSET_FROM_EXTRUDER, current_position[Z_AXIS]);
1369
   do_blocking_move_to(x - X_PROBE_OFFSET_FROM_EXTRUDER, y - Y_PROBE_OFFSET_FROM_EXTRUDER, current_position[Z_AXIS]);
1255
 
1370
 
1256
-  #ifndef Z_PROBE_SLED
1371
+  #if !defined(Z_PROBE_SLED) && !defined(Z_PROBE_ALLEN_KEY)
1257
     if (retract_action & ProbeEngage) engage_z_probe();
1372
     if (retract_action & ProbeEngage) engage_z_probe();
1258
   #endif
1373
   #endif
1259
 
1374
 
1260
   run_z_probe();
1375
   run_z_probe();
1261
   float measured_z = current_position[Z_AXIS];
1376
   float measured_z = current_position[Z_AXIS];
1262
 
1377
 
1263
-  #ifndef Z_PROBE_SLED
1378
+  #if !defined(Z_PROBE_SLED) && !defined(Z_PROBE_ALLEN_KEY)
1264
     if (retract_action & ProbeRetract) retract_z_probe();
1379
     if (retract_action & ProbeRetract) retract_z_probe();
1265
   #endif
1380
   #endif
1266
 
1381
 
1277
   return measured_z;
1392
   return measured_z;
1278
 }
1393
 }
1279
 
1394
 
1395
+#ifdef DELTA
1396
+static void extrapolate_one_point(int x, int y, int xdir, int ydir) {
1397
+  if (bed_level[x][y] != 0.0) {
1398
+    return;  // Don't overwrite good values.
1399
+  }
1400
+  float a = 2*bed_level[x+xdir][y] - bed_level[x+xdir*2][y];  // Left to right.
1401
+  float b = 2*bed_level[x][y+ydir] - bed_level[x][y+ydir*2];  // Front to back.
1402
+  float c = 2*bed_level[x+xdir][y+ydir] - bed_level[x+xdir*2][y+ydir*2];  // Diagonal.
1403
+  float median = c;  // Median is robust (ignores outliers).
1404
+  if (a < b) {
1405
+    if (b < c) median = b;
1406
+    if (c < a) median = a;
1407
+  } else {  // b <= a
1408
+    if (c < b) median = b;
1409
+    if (a < c) median = a;
1410
+  }
1411
+  bed_level[x][y] = median;
1412
+}
1413
+
1414
+// Fill in the unprobed points (corners of circular print surface)
1415
+// using linear extrapolation, away from the center.
1416
+static void extrapolate_unprobed_bed_level() {
1417
+  int half = (AUTO_BED_LEVELING_GRID_POINTS-1)/2;
1418
+  for (int y = 0; y <= half; y++) {
1419
+    for (int x = 0; x <= half; x++) {
1420
+      if (x + y < 3) continue;
1421
+      extrapolate_one_point(half-x, half-y, x>1?+1:0, y>1?+1:0);
1422
+      extrapolate_one_point(half+x, half-y, x>1?-1:0, y>1?+1:0);
1423
+      extrapolate_one_point(half-x, half+y, x>1?+1:0, y>1?-1:0);
1424
+      extrapolate_one_point(half+x, half+y, x>1?-1:0, y>1?-1:0);
1425
+    }
1426
+  }
1427
+}
1428
+
1429
+// Print calibration results for plotting or manual frame adjustment.
1430
+static void print_bed_level() {
1431
+  for (int y = 0; y < AUTO_BED_LEVELING_GRID_POINTS; y++) {
1432
+    for (int x = 0; x < AUTO_BED_LEVELING_GRID_POINTS; x++) {
1433
+      SERIAL_PROTOCOL_F(bed_level[x][y], 2);
1434
+      SERIAL_PROTOCOLPGM(" ");
1435
+    }
1436
+    SERIAL_ECHOLN("");
1437
+  }
1438
+}
1439
+
1440
+// Reset calibration results to zero.
1441
+void reset_bed_level() {
1442
+  for (int y = 0; y < AUTO_BED_LEVELING_GRID_POINTS; y++) {
1443
+    for (int x = 0; x < AUTO_BED_LEVELING_GRID_POINTS; x++) {
1444
+      bed_level[x][y] = 0.0;
1445
+    }
1446
+  }
1447
+}
1448
+
1449
+#endif // DELTA
1450
+
1280
 #endif // ENABLE_AUTO_BED_LEVELING
1451
 #endif // ENABLE_AUTO_BED_LEVELING
1281
 
1452
 
1282
 static void homeaxis(int axis) {
1453
 static void homeaxis(int axis) {
1516
  * G4: Dwell S<seconds> or P<milliseconds>
1687
  * G4: Dwell S<seconds> or P<milliseconds>
1517
  */
1688
  */
1518
 inline void gcode_G4() {
1689
 inline void gcode_G4() {
1519
-  unsigned long codenum;
1690
+  unsigned long codenum=0;
1520
 
1691
 
1521
   LCD_MESSAGEPGM(MSG_DWELL);
1692
   LCD_MESSAGEPGM(MSG_DWELL);
1522
 
1693
 
1559
  */
1730
  */
1560
 inline void gcode_G28() {
1731
 inline void gcode_G28() {
1561
   #ifdef ENABLE_AUTO_BED_LEVELING
1732
   #ifdef ENABLE_AUTO_BED_LEVELING
1562
-    plan_bed_level_matrix.set_to_identity();  //Reset the plane ("erase" all leveling data)
1733
+    #ifdef DELTA
1734
+      reset_bed_level();
1735
+    #else
1736
+      plan_bed_level_matrix.set_to_identity();  //Reset the plane ("erase" all leveling data)
1737
+    #endif
1563
   #endif
1738
   #endif
1564
 
1739
 
1565
   saved_feedrate = feedrate;
1740
   saved_feedrate = feedrate;
1831
    * Parameters With AUTO_BED_LEVELING_GRID:
2006
    * Parameters With AUTO_BED_LEVELING_GRID:
1832
    *
2007
    *
1833
    *  P  Set the size of the grid that will be probed (P x P points).
2008
    *  P  Set the size of the grid that will be probed (P x P points).
2009
+   *     Not supported by non-linear delta printer bed leveling.
1834
    *     Example: "G29 P4"
2010
    *     Example: "G29 P4"
1835
    *
2011
    *
1836
    *  S  Set the XY travel speed between probe points (in mm/min)
2012
    *  S  Set the XY travel speed between probe points (in mm/min)
1840
    *  T  Generate a Bed Topology Report. Example: "G29 P5 T" for a detailed report.
2016
    *  T  Generate a Bed Topology Report. Example: "G29 P5 T" for a detailed report.
1841
    *     This is useful for manual bed leveling and finding flaws in the bed (to
2017
    *     This is useful for manual bed leveling and finding flaws in the bed (to
1842
    *     assist with part placement).
2018
    *     assist with part placement).
2019
+   *     Not supported by non-linear delta printer bed leveling.
1843
    *
2020
    *
1844
    *  F  Set the Front limit of the probing grid
2021
    *  F  Set the Front limit of the probing grid
1845
    *  B  Set the Back limit of the probing grid
2022
    *  B  Set the Back limit of the probing grid
1879
 
2056
 
1880
     #ifdef AUTO_BED_LEVELING_GRID
2057
     #ifdef AUTO_BED_LEVELING_GRID
1881
 
2058
 
2059
+    #ifndef DELTA
1882
       bool topo_flag = verbose_level > 2 || code_seen('T') || code_seen('t');
2060
       bool topo_flag = verbose_level > 2 || code_seen('T') || code_seen('t');
2061
+    #endif
1883
 
2062
 
1884
       if (verbose_level > 0)
2063
       if (verbose_level > 0)
1885
         SERIAL_PROTOCOLPGM("G29 Auto Bed Leveling\n");
2064
         SERIAL_PROTOCOLPGM("G29 Auto Bed Leveling\n");
1886
 
2065
 
1887
-      int auto_bed_leveling_grid_points = code_seen('P') ? code_value_long() : AUTO_BED_LEVELING_GRID_POINTS;
1888
-      if (auto_bed_leveling_grid_points < 2) {
1889
-        SERIAL_PROTOCOLPGM("?Number of probed (P)oints is implausible (2 minimum).\n");
1890
-        return;
1891
-      }
2066
+      int auto_bed_leveling_grid_points = AUTO_BED_LEVELING_GRID_POINTS;
2067
+      #ifndef DELTA
2068
+        if (code_seen('P')) auto_bed_leveling_grid_points = code_value_long();
2069
+        if (auto_bed_leveling_grid_points < 2) {
2070
+          SERIAL_PROTOCOLPGM("?Number of probed (P)oints is implausible (2 minimum).\n");
2071
+          return;
2072
+        }
2073
+      #endif
1892
 
2074
 
1893
       xy_travel_speed = code_seen('S') ? code_value_long() : XY_TRAVEL_SPEED;
2075
       xy_travel_speed = code_seen('S') ? code_value_long() : XY_TRAVEL_SPEED;
1894
 
2076
 
1930
 
2112
 
1931
     #ifdef Z_PROBE_SLED
2113
     #ifdef Z_PROBE_SLED
1932
       dock_sled(false); // engage (un-dock) the probe
2114
       dock_sled(false); // engage (un-dock) the probe
2115
+    #elif not defined(SERVO_ENDSTOPS)
2116
+      engage_z_probe();
1933
     #endif
2117
     #endif
1934
 
2118
 
1935
     st_synchronize();
2119
     st_synchronize();
1936
 
2120
 
2121
+  #ifdef DELTA
2122
+    reset_bed_level();
2123
+  #else
1937
     // make sure the bed_level_rotation_matrix is identity or the planner will get it incorectly
2124
     // make sure the bed_level_rotation_matrix is identity or the planner will get it incorectly
1938
     //vector_3 corrected_position = plan_get_position_mm();
2125
     //vector_3 corrected_position = plan_get_position_mm();
1939
     //corrected_position.debug("position before G29");
2126
     //corrected_position.debug("position before G29");
1940
     plan_bed_level_matrix.set_to_identity();
2127
     plan_bed_level_matrix.set_to_identity();
1941
     vector_3 uncorrected_position = plan_get_position();
2128
     vector_3 uncorrected_position = plan_get_position();
1942
-    //uncorrected_position.debug("position durring G29");
2129
+    //uncorrected_position.debug("position during G29");
1943
     current_position[X_AXIS] = uncorrected_position.x;
2130
     current_position[X_AXIS] = uncorrected_position.x;
1944
     current_position[Y_AXIS] = uncorrected_position.y;
2131
     current_position[Y_AXIS] = uncorrected_position.y;
1945
     current_position[Z_AXIS] = uncorrected_position.z;
2132
     current_position[Z_AXIS] = uncorrected_position.z;
1946
     plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
2133
     plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
2134
+  #endif
2135
+
1947
     setup_for_endstop_move();
2136
     setup_for_endstop_move();
1948
 
2137
 
1949
     feedrate = homing_feedrate[Z_AXIS];
2138
     feedrate = homing_feedrate[Z_AXIS];
1951
     #ifdef AUTO_BED_LEVELING_GRID
2140
     #ifdef AUTO_BED_LEVELING_GRID
1952
 
2141
 
1953
       // probe at the points of a lattice grid
2142
       // probe at the points of a lattice grid
1954
-      int xGridSpacing = (right_probe_bed_position - left_probe_bed_position) / (auto_bed_leveling_grid_points - 1);
1955
-      int yGridSpacing = (back_probe_bed_position - front_probe_bed_position) / (auto_bed_leveling_grid_points - 1);
2143
+      const int xGridSpacing = (right_probe_bed_position - left_probe_bed_position) / (auto_bed_leveling_grid_points-1);
2144
+      const int yGridSpacing = (back_probe_bed_position - front_probe_bed_position) / (auto_bed_leveling_grid_points-1);
1956
 
2145
 
2146
+    #ifndef DELTA
1957
       // solve the plane equation ax + by + d = z
2147
       // solve the plane equation ax + by + d = z
1958
       // A is the matrix with rows [x y 1] for all the probed points
2148
       // A is the matrix with rows [x y 1] for all the probed points
1959
       // B is the vector of the Z positions
2149
       // B is the vector of the Z positions
1966
              eqnBVector[abl2],     // "B" vector of Z points
2156
              eqnBVector[abl2],     // "B" vector of Z points
1967
              mean = 0.0;
2157
              mean = 0.0;
1968
 
2158
 
2159
+    #else
2160
+      delta_grid_spacing[0] = xGridSpacing;
2161
+      delta_grid_spacing[1] = yGridSpacing;
2162
+
2163
+      float z_offset = Z_PROBE_OFFSET_FROM_EXTRUDER;
2164
+      if (code_seen(axis_codes[Z_AXIS])) {
2165
+        z_offset += code_value();
2166
+      }
2167
+    #endif
2168
+
1969
       int probePointCounter = 0;
2169
       int probePointCounter = 0;
1970
       bool zig = true;
2170
       bool zig = true;
1971
 
2171
 
1972
-      for (int yProbe = front_probe_bed_position; yProbe <= back_probe_bed_position; yProbe += yGridSpacing) {
1973
-        int xProbe, xInc;
2172
+      for (int yCount=0; yCount < auto_bed_leveling_grid_points; yCount++)
2173
+      {
2174
+        double yProbe = front_probe_bed_position + yGridSpacing * yCount;
2175
+        int xStart, xStop, xInc;
1974
 
2176
 
1975
         if (zig)
2177
         if (zig)
1976
-          xProbe = left_probe_bed_position, xInc = xGridSpacing;
2178
+        {
2179
+          xStart = 0;
2180
+          xStop = auto_bed_leveling_grid_points;
2181
+          xInc = 1;
2182
+          zig = false;
2183
+        }
1977
         else
2184
         else
1978
-          xProbe = right_probe_bed_position, xInc = -xGridSpacing;
2185
+        {
2186
+          xStart = auto_bed_leveling_grid_points - 1;
2187
+          xStop = -1;
2188
+          xInc = -1;
2189
+          zig = true;
2190
+        }
1979
 
2191
 
2192
+      #ifndef DELTA
1980
         // If topo_flag is set then don't zig-zag. Just scan in one direction.
2193
         // If topo_flag is set then don't zig-zag. Just scan in one direction.
1981
         // This gets the probe points in more readable order.
2194
         // This gets the probe points in more readable order.
1982
         if (!topo_flag) zig = !zig;
2195
         if (!topo_flag) zig = !zig;
2196
+      #endif
2197
+
2198
+        for (int xCount=xStart; xCount != xStop; xCount += xInc)
2199
+        {
2200
+          double xProbe = left_probe_bed_position + xGridSpacing * xCount;
1983
 
2201
 
1984
-        for (int xCount = 0; xCount < auto_bed_leveling_grid_points; xCount++) {
1985
           // raise extruder
2202
           // raise extruder
1986
           float measured_z,
2203
           float measured_z,
1987
                 z_before = probePointCounter == 0 ? Z_RAISE_BEFORE_PROBING : current_position[Z_AXIS] + Z_RAISE_BETWEEN_PROBINGS;
2204
                 z_before = probePointCounter == 0 ? Z_RAISE_BEFORE_PROBING : current_position[Z_AXIS] + Z_RAISE_BETWEEN_PROBINGS;
1988
 
2205
 
2206
+        #ifdef DELTA
2207
+          // Avoid probing the corners (outside the round or hexagon print surface) on a delta printer.
2208
+          float distance_from_center = sqrt(xProbe*xProbe + yProbe*yProbe);
2209
+          if (distance_from_center > DELTA_PROBABLE_RADIUS)
2210
+            continue;
2211
+        #endif //DELTA
2212
+
1989
           // Enhanced G29 - Do not retract servo between probes
2213
           // Enhanced G29 - Do not retract servo between probes
1990
           ProbeAction act;
2214
           ProbeAction act;
1991
           if (enhanced_g29) {
2215
           if (enhanced_g29) {
2001
 
2225
 
2002
           measured_z = probe_pt(xProbe, yProbe, z_before, act, verbose_level);
2226
           measured_z = probe_pt(xProbe, yProbe, z_before, act, verbose_level);
2003
 
2227
 
2228
+        #ifndef DELTA
2004
           mean += measured_z;
2229
           mean += measured_z;
2005
 
2230
 
2006
           eqnBVector[probePointCounter] = measured_z;
2231
           eqnBVector[probePointCounter] = measured_z;
2007
           eqnAMatrix[probePointCounter + 0 * abl2] = xProbe;
2232
           eqnAMatrix[probePointCounter + 0 * abl2] = xProbe;
2008
           eqnAMatrix[probePointCounter + 1 * abl2] = yProbe;
2233
           eqnAMatrix[probePointCounter + 1 * abl2] = yProbe;
2009
           eqnAMatrix[probePointCounter + 2 * abl2] = 1;
2234
           eqnAMatrix[probePointCounter + 2 * abl2] = 1;
2235
+        #else
2236
+          bed_level[xCount][yCount] = measured_z + z_offset;
2237
+        #endif
2010
 
2238
 
2011
           probePointCounter++;
2239
           probePointCounter++;
2012
-          xProbe += xInc;
2013
-
2014
         } //xProbe
2240
         } //xProbe
2015
-
2016
       } //yProbe
2241
       } //yProbe
2017
 
2242
 
2018
       clean_up_after_endstop_move();
2243
       clean_up_after_endstop_move();
2019
 
2244
 
2245
+    #ifndef DELTA
2020
       // solve lsq problem
2246
       // solve lsq problem
2021
       double *plane_equation_coefficients = qr_solve(abl2, 3, eqnAMatrix, eqnBVector);
2247
       double *plane_equation_coefficients = qr_solve(abl2, 3, eqnAMatrix, eqnBVector);
2022
 
2248
 
2084
 
2310
 
2085
       set_bed_level_equation_lsq(plane_equation_coefficients);
2311
       set_bed_level_equation_lsq(plane_equation_coefficients);
2086
       free(plane_equation_coefficients);
2312
       free(plane_equation_coefficients);
2313
+    #else
2314
+      extrapolate_unprobed_bed_level();
2315
+      print_bed_level();
2316
+    #endif
2087
 
2317
 
2088
     #else // !AUTO_BED_LEVELING_GRID
2318
     #else // !AUTO_BED_LEVELING_GRID
2089
 
2319
 
2097
         z_at_pt_3 = probe_pt(ABL_PROBE_PT_3_X, ABL_PROBE_PT_3_Y, current_position[Z_AXIS] + Z_RAISE_BETWEEN_PROBINGS, ProbeRetract, verbose_level);
2327
         z_at_pt_3 = probe_pt(ABL_PROBE_PT_3_X, ABL_PROBE_PT_3_Y, current_position[Z_AXIS] + Z_RAISE_BETWEEN_PROBINGS, ProbeRetract, verbose_level);
2098
       }
2328
       }
2099
       else {
2329
       else {
2100
-        z_at_pt_1 = probe_pt(ABL_PROBE_PT_1_X, ABL_PROBE_PT_1_Y, Z_RAISE_BEFORE_PROBING, verbose_level);
2101
-        z_at_pt_2 = probe_pt(ABL_PROBE_PT_2_X, ABL_PROBE_PT_2_Y, current_position[Z_AXIS] + Z_RAISE_BETWEEN_PROBINGS, verbose_level);
2102
-        z_at_pt_3 = probe_pt(ABL_PROBE_PT_3_X, ABL_PROBE_PT_3_Y, current_position[Z_AXIS] + Z_RAISE_BETWEEN_PROBINGS, verbose_level);
2330
+        z_at_pt_1 = probe_pt(ABL_PROBE_PT_1_X, ABL_PROBE_PT_1_Y, Z_RAISE_BEFORE_PROBING, verbose_level=verbose_level);
2331
+        z_at_pt_2 = probe_pt(ABL_PROBE_PT_2_X, ABL_PROBE_PT_2_Y, current_position[Z_AXIS] + Z_RAISE_BETWEEN_PROBINGS, verbose_level=verbose_level);
2332
+        z_at_pt_3 = probe_pt(ABL_PROBE_PT_3_X, ABL_PROBE_PT_3_Y, current_position[Z_AXIS] + Z_RAISE_BETWEEN_PROBINGS, verbose_level=verbose_level);
2103
       }
2333
       }
2104
       clean_up_after_endstop_move();
2334
       clean_up_after_endstop_move();
2105
       set_bed_level_equation_3pts(z_at_pt_1, z_at_pt_2, z_at_pt_3);
2335
       set_bed_level_equation_3pts(z_at_pt_1, z_at_pt_2, z_at_pt_3);
2106
 
2336
 
2107
     #endif // !AUTO_BED_LEVELING_GRID
2337
     #endif // !AUTO_BED_LEVELING_GRID
2108
 
2338
 
2339
+    do_blocking_move_to(current_position[X_AXIS], current_position[Y_AXIS], Z_RAISE_AFTER_PROBING);
2109
     st_synchronize();
2340
     st_synchronize();
2110
 
2341
 
2342
+  #ifndef DELTA
2111
     if (verbose_level > 0)
2343
     if (verbose_level > 0)
2112
       plan_bed_level_matrix.debug(" \n\nBed Level Correction Matrix:");
2344
       plan_bed_level_matrix.debug(" \n\nBed Level Correction Matrix:");
2113
 
2345
 
2122
     apply_rotation_xyz(plan_bed_level_matrix, x_tmp, y_tmp, z_tmp);         //Apply the correction sending the probe offset
2354
     apply_rotation_xyz(plan_bed_level_matrix, x_tmp, y_tmp, z_tmp);         //Apply the correction sending the probe offset
2123
     current_position[Z_AXIS] = z_tmp - real_z + current_position[Z_AXIS];   //The difference is added to current position and sent to planner.
2355
     current_position[Z_AXIS] = z_tmp - real_z + current_position[Z_AXIS];   //The difference is added to current position and sent to planner.
2124
     plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
2356
     plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
2357
+  #endif
2125
 
2358
 
2126
-    #ifdef Z_PROBE_SLED
2127
-      dock_sled(true, -SLED_DOCKING_OFFSET); // dock the probe, correcting for over-travel
2128
-    #endif
2359
+  #ifdef Z_PROBE_SLED
2360
+    dock_sled(true, -SLED_DOCKING_OFFSET); // dock the probe, correcting for over-travel
2361
+  #elif not defined(SERVO_ENDSTOPS)
2362
+    retract_z_probe();
2363
+  #endif
2129
     
2364
     
2130
-    #ifdef Z_PROBE_END_SCRIPT
2131
-      enquecommands_P(PSTR(Z_PROBE_END_SCRIPT));
2132
-      st_synchronize();
2133
-    #endif
2365
+  #ifdef Z_PROBE_END_SCRIPT
2366
+    enquecommands_P(PSTR(Z_PROBE_END_SCRIPT));
2367
+    st_synchronize();
2368
+  #endif
2134
   }
2369
   }
2135
 
2370
 
2136
   #ifndef Z_PROBE_SLED
2371
   #ifndef Z_PROBE_SLED
3287
  *  Also sets minimum segment time in ms (B20000) to prevent buffer under-runs and M20 minimum feedrate
3522
  *  Also sets minimum segment time in ms (B20000) to prevent buffer under-runs and M20 minimum feedrate
3288
  */
3523
  */
3289
 inline void gcode_M204() {
3524
 inline void gcode_M204() {
3525
+  if (code_seen('S'))   // Kept for legacy compatibility. Should NOT BE USED for new developments.
3526
+  {
3527
+    acceleration = code_value();
3528
+    travel_acceleration = acceleration;
3529
+    SERIAL_ECHOPAIR("Setting Printing and Travelling Acceleration: ", acceleration );
3530
+    SERIAL_EOL;
3531
+  }
3290
   if (code_seen('P'))
3532
   if (code_seen('P'))
3291
   {
3533
   {
3292
     acceleration = code_value();
3534
     acceleration = code_value();
3899
  */
4141
  */
3900
 inline void gcode_M400() { st_synchronize(); }
4142
 inline void gcode_M400() { st_synchronize(); }
3901
 
4143
 
3902
-#if defined(ENABLE_AUTO_BED_LEVELING) && defined(SERVO_ENDSTOPS) && not defined(Z_PROBE_SLED)
4144
+#if defined(ENABLE_AUTO_BED_LEVELING) && (defined(SERVO_ENDSTOPS) || defined(Z_PROBE_ALLEN_KEY)) && not defined(Z_PROBE_SLED)
3903
 
4145
 
3904
   /**
4146
   /**
3905
    * M401: Engage Z Servo endstop if available
4147
    * M401: Engage Z Servo endstop if available
4761
         gcode_M400();
5003
         gcode_M400();
4762
         break;
5004
         break;
4763
 
5005
 
4764
-      #if defined(ENABLE_AUTO_BED_LEVELING) && defined(SERVO_ENDSTOPS) && not defined(Z_PROBE_SLED)
5006
+      #if defined(ENABLE_AUTO_BED_LEVELING) && (defined(SERVO_ENDSTOPS) || defined(Z_PROBE_ALLEN_KEY)) && not defined(Z_PROBE_SLED)
4765
         case 401:
5007
         case 401:
4766
           gcode_M401();
5008
           gcode_M401();
4767
           break;
5009
           break;
4979
   SERIAL_ECHOPGM(" z="); SERIAL_ECHOLN(delta[Z_AXIS]);
5221
   SERIAL_ECHOPGM(" z="); SERIAL_ECHOLN(delta[Z_AXIS]);
4980
   */
5222
   */
4981
 }
5223
 }
4982
-#endif
5224
+
5225
+#ifdef ENABLE_AUTO_BED_LEVELING
5226
+// Adjust print surface height by linear interpolation over the bed_level array.
5227
+int delta_grid_spacing[2] = { 0, 0 };
5228
+void adjust_delta(float cartesian[3])
5229
+{
5230
+  if (delta_grid_spacing[0] == 0 || delta_grid_spacing[1] == 0)
5231
+    return; // G29 not done
5232
+
5233
+  int half = (AUTO_BED_LEVELING_GRID_POINTS - 1) / 2;
5234
+  float grid_x = max(0.001-half, min(half-0.001, cartesian[X_AXIS] / delta_grid_spacing[0]));
5235
+  float grid_y = max(0.001-half, min(half-0.001, cartesian[Y_AXIS] / delta_grid_spacing[1]));
5236
+  int floor_x = floor(grid_x);
5237
+  int floor_y = floor(grid_y);
5238
+  float ratio_x = grid_x - floor_x;
5239
+  float ratio_y = grid_y - floor_y;
5240
+  float z1 = bed_level[floor_x+half][floor_y+half];
5241
+  float z2 = bed_level[floor_x+half][floor_y+half+1];
5242
+  float z3 = bed_level[floor_x+half+1][floor_y+half];
5243
+  float z4 = bed_level[floor_x+half+1][floor_y+half+1];
5244
+  float left = (1-ratio_y)*z1 + ratio_y*z2;
5245
+  float right = (1-ratio_y)*z3 + ratio_y*z4;
5246
+  float offset = (1-ratio_x)*left + ratio_x*right;
5247
+
5248
+  delta[X_AXIS] += offset;
5249
+  delta[Y_AXIS] += offset;
5250
+  delta[Z_AXIS] += offset;
5251
+
5252
+  /*
5253
+  SERIAL_ECHOPGM("grid_x="); SERIAL_ECHO(grid_x);
5254
+  SERIAL_ECHOPGM(" grid_y="); SERIAL_ECHO(grid_y);
5255
+  SERIAL_ECHOPGM(" floor_x="); SERIAL_ECHO(floor_x);
5256
+  SERIAL_ECHOPGM(" floor_y="); SERIAL_ECHO(floor_y);
5257
+  SERIAL_ECHOPGM(" ratio_x="); SERIAL_ECHO(ratio_x);
5258
+  SERIAL_ECHOPGM(" ratio_y="); SERIAL_ECHO(ratio_y);
5259
+  SERIAL_ECHOPGM(" z1="); SERIAL_ECHO(z1);
5260
+  SERIAL_ECHOPGM(" z2="); SERIAL_ECHO(z2);
5261
+  SERIAL_ECHOPGM(" z3="); SERIAL_ECHO(z3);
5262
+  SERIAL_ECHOPGM(" z4="); SERIAL_ECHO(z4);
5263
+  SERIAL_ECHOPGM(" left="); SERIAL_ECHO(left);
5264
+  SERIAL_ECHOPGM(" right="); SERIAL_ECHO(right);
5265
+  SERIAL_ECHOPGM(" offset="); SERIAL_ECHOLN(offset);
5266
+  */
5267
+}
5268
+#endif //ENABLE_AUTO_BED_LEVELING
5269
+
5270
+void prepare_move_raw()
5271
+{
5272
+  previous_millis_cmd = millis();
5273
+  calculate_delta(destination);
5274
+  plan_buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS],
5275
+                   destination[E_AXIS], feedrate*feedmultiply/60/100.0,
5276
+                   active_extruder);
5277
+  for(int8_t i=0; i < NUM_AXIS; i++) {
5278
+    current_position[i] = destination[i];
5279
+  }
5280
+}
5281
+#endif //DELTA
4983
 
5282
 
4984
 void prepare_move()
5283
 void prepare_move()
4985
 {
5284
 {
5279
   
5578
   
5280
 #if defined(KILL_PIN) && KILL_PIN > -1
5579
 #if defined(KILL_PIN) && KILL_PIN > -1
5281
   static int killCount = 0;   // make the inactivity button a bit less responsive
5580
   static int killCount = 0;   // make the inactivity button a bit less responsive
5282
-   const int KILL_DELAY = 10000;
5581
+   const int KILL_DELAY = 750;
5283
 #endif
5582
 #endif
5284
 
5583
 
5285
 #if defined(FILRUNOUT_PIN) && FILRUNOUT_PIN > -1
5584
 #if defined(FILRUNOUT_PIN) && FILRUNOUT_PIN > -1
5290
 
5589
 
5291
 #if defined(HOME_PIN) && HOME_PIN > -1
5590
 #if defined(HOME_PIN) && HOME_PIN > -1
5292
    static int homeDebounceCount = 0;   // poor man's debouncing count
5591
    static int homeDebounceCount = 0;   // poor man's debouncing count
5293
-   const int HOME_DEBOUNCE_DELAY = 10000;
5592
+   const int HOME_DEBOUNCE_DELAY = 750;
5294
 #endif
5593
 #endif
5295
    
5594
    
5296
   
5595
   

+ 176
- 0
Marlin/dogm_font_data_ISO10646_1.h View File

1
+/*
2
+  Fontname: ISO10646-1
3
+  Copyright: A.Hardtung, public domain
4
+  Capital A Height: 7, '1' Height: 7
5
+  Calculated Max Values w= 5 h= 9 x= 2 y= 7 dx= 6 dy= 0 ascent= 8 len= 9
6
+  Font Bounding box     w= 6 h= 9 x= 0 y=-2
7
+  Calculated Min Values           x= 0 y=-1 dx= 0 dy= 0
8
+  Pure Font   ascent = 7 descent=-1
9
+  X Font      ascent = 7 descent=-1
10
+  Max Font    ascent = 8 descent=-1
11
+*/
12
+#include <utility/u8g.h>
13
+const u8g_fntpgm_uint8_t ISO10646_1_5x7[2592] U8G_SECTION(".progmem.ISO10646_1_5x7") = {
14
+  0,6,9,0,254,7,1,146,3,33,32,255,255,8,255,7,
15
+  255,0,0,0,6,0,0,1,7,7,6,2,0,128,128,128,
16
+  128,128,0,128,3,2,2,6,1,5,160,160,5,7,7,6,
17
+  0,0,80,80,248,80,248,80,80,5,7,7,6,0,0,32,
18
+  120,160,112,40,240,32,5,7,7,6,0,0,192,200,16,32,
19
+  64,152,24,5,7,7,6,0,0,96,144,160,64,168,144,104,
20
+  2,3,3,6,1,4,192,64,128,3,7,7,6,1,0,32,
21
+  64,128,128,128,64,32,3,7,7,6,1,0,128,64,32,32,
22
+  32,64,128,5,5,5,6,0,1,32,168,112,168,32,5,5,
23
+  5,6,0,1,32,32,248,32,32,2,3,3,6,2,255,192,
24
+  64,128,5,1,1,6,0,3,248,2,2,2,6,2,0,192,
25
+  192,5,5,5,6,0,1,8,16,32,64,128,5,7,7,6,
26
+  0,0,112,136,136,136,136,136,112,3,7,7,6,1,0,64,
27
+  192,64,64,64,64,224,5,7,7,6,0,0,112,136,8,112,
28
+  128,128,248,5,7,7,6,0,0,248,16,32,16,8,8,240,
29
+  5,7,7,6,0,0,16,48,80,144,248,16,16,5,7,7,
30
+  6,0,0,248,128,240,8,8,136,112,5,7,7,6,0,0,
31
+  112,128,128,240,136,136,112,5,7,7,6,0,0,248,8,16,
32
+  32,32,32,32,5,7,7,6,0,0,112,136,136,112,136,136,
33
+  112,5,7,7,6,0,0,112,136,136,120,8,8,112,2,5,
34
+  5,6,2,0,192,192,0,192,192,2,6,6,6,2,255,192,
35
+  192,0,192,64,128,4,7,7,6,0,0,16,32,64,128,64,
36
+  32,16,5,3,3,6,0,2,248,0,248,4,7,7,6,1,
37
+  0,128,64,32,16,32,64,128,5,7,7,6,0,0,112,136,
38
+  8,16,32,0,32,5,7,7,6,0,0,112,136,8,104,168,
39
+  168,112,5,7,7,6,0,0,112,136,136,248,136,136,136,5,
40
+  7,7,6,0,0,240,136,136,240,136,136,240,5,7,7,6,
41
+  0,0,112,136,128,128,128,136,112,5,7,7,6,0,0,240,
42
+  136,136,136,136,136,240,5,7,7,6,0,0,248,128,128,240,
43
+  128,128,248,5,7,7,6,0,0,248,128,128,240,128,128,128,
44
+  5,7,7,6,0,0,112,136,128,184,136,136,112,5,7,7,
45
+  6,0,0,136,136,136,248,136,136,136,1,7,7,6,2,0,
46
+  128,128,128,128,128,128,128,5,7,7,6,0,0,56,16,16,
47
+  16,16,144,96,5,7,7,6,0,0,136,144,160,192,160,144,
48
+  136,5,7,7,6,0,0,128,128,128,128,128,128,248,5,7,
49
+  7,6,0,0,136,216,168,136,136,136,136,5,7,7,6,0,
50
+  0,136,136,200,168,152,136,136,5,7,7,6,0,0,112,136,
51
+  136,136,136,136,112,5,7,7,6,0,0,240,136,136,240,128,
52
+  128,128,5,7,7,6,0,0,112,136,136,136,168,144,104,5,
53
+  7,7,6,0,0,240,136,136,240,160,144,136,5,7,7,6,
54
+  0,0,120,128,128,112,8,8,240,5,7,7,6,0,0,248,
55
+  32,32,32,32,32,32,5,7,7,6,0,0,136,136,136,136,
56
+  136,136,112,5,7,7,6,0,0,136,136,136,136,136,80,32,
57
+  5,7,7,6,0,0,136,136,136,136,136,168,80,5,7,7,
58
+  6,0,0,136,136,80,32,80,136,136,5,7,7,6,0,0,
59
+  136,136,136,80,32,32,32,5,7,7,6,0,0,248,8,16,
60
+  32,64,128,248,3,7,7,6,1,0,224,128,128,128,128,128,
61
+  224,5,5,5,6,0,1,128,64,32,16,8,3,7,7,6,
62
+  1,0,224,32,32,32,32,32,224,5,3,3,6,0,4,32,
63
+  80,136,5,1,1,6,0,0,248,2,2,2,6,2,5,128,
64
+  64,5,5,5,6,0,0,112,8,120,136,120,5,7,7,6,
65
+  0,0,128,128,176,200,136,136,240,5,5,5,6,0,0,112,
66
+  128,128,136,112,5,7,7,6,0,0,8,8,104,152,136,136,
67
+  120,5,5,5,6,0,0,112,136,248,128,112,5,7,7,6,
68
+  0,0,48,72,224,64,64,64,64,5,6,6,6,0,255,112,
69
+  136,136,120,8,112,5,7,7,6,0,0,128,128,176,200,136,
70
+  136,136,1,7,7,6,2,0,128,0,128,128,128,128,128,3,
71
+  8,8,6,1,255,32,0,32,32,32,32,160,64,4,7,7,
72
+  6,0,0,128,128,144,160,192,160,144,3,7,7,6,1,0,
73
+  192,64,64,64,64,64,224,5,5,5,6,0,0,208,168,168,
74
+  168,168,5,5,5,6,0,0,176,200,136,136,136,5,5,5,
75
+  6,0,0,112,136,136,136,112,5,6,6,6,0,255,240,136,
76
+  136,240,128,128,5,6,6,6,0,255,120,136,136,120,8,8,
77
+  5,5,5,6,0,0,176,200,128,128,128,5,5,5,6,0,
78
+  0,112,128,112,8,240,4,7,7,6,0,0,64,64,224,64,
79
+  64,64,48,5,5,5,6,0,0,136,136,136,152,104,5,5,
80
+  5,6,0,0,136,136,136,80,32,5,5,5,6,0,0,136,
81
+  136,168,168,80,5,5,5,6,0,0,136,80,32,80,136,5,
82
+  6,6,6,0,255,136,136,136,120,8,112,5,5,5,6,0,
83
+  0,248,16,32,64,248,3,7,7,6,1,0,32,64,64,128,
84
+  64,64,32,1,7,7,6,2,0,128,128,128,128,128,128,128,
85
+  3,7,7,6,1,0,128,64,64,32,64,64,128,5,2,2,
86
+  6,0,2,104,144,0,0,0,6,0,0,0,0,0,6,0,
87
+  0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,
88
+  6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,
89
+  0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,
90
+  0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,
91
+  6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,
92
+  0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,
93
+  0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,
94
+  6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,
95
+  0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,
96
+  0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,
97
+  6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,
98
+  0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,
99
+  0,1,7,7,6,2,0,128,0,128,128,128,128,128,5,7,
100
+  7,6,0,0,32,112,168,160,168,112,32,5,7,7,6,0,
101
+  0,48,64,64,224,64,80,168,5,5,5,6,0,0,136,112,
102
+  80,112,136,5,7,7,6,0,0,136,80,32,248,32,248,32,
103
+  1,7,7,6,2,0,128,128,128,0,128,128,128,5,8,8,
104
+  6,0,0,48,72,32,80,80,32,144,96,3,1,1,6,1,
105
+  7,160,5,7,7,6,0,0,248,136,184,184,184,136,248,5,
106
+  7,7,6,0,1,112,8,120,136,120,0,248,5,5,5,6,
107
+  0,1,40,80,160,80,40,5,3,3,6,0,1,248,8,8,
108
+  2,2,2,6,2,6,64,128,5,7,7,6,0,0,248,136,
109
+  168,136,152,168,248,5,1,1,6,0,6,248,4,4,4,6,
110
+  0,3,96,144,144,96,5,7,7,6,0,0,32,32,248,32,
111
+  32,0,248,4,5,5,6,0,3,96,144,32,64,240,3,5,
112
+  5,6,0,3,224,32,224,32,224,2,2,2,6,2,6,64,
113
+  128,5,8,8,6,0,255,136,136,136,136,152,232,128,128,5,
114
+  7,7,6,0,0,120,152,152,120,24,24,24,2,2,2,6,
115
+  2,2,192,192,2,2,2,6,2,255,64,128,3,5,5,6,
116
+  0,3,64,192,64,64,224,5,7,7,6,0,1,112,136,136,
117
+  136,112,0,248,5,5,5,6,0,1,160,80,40,80,160,5,
118
+  7,7,6,0,0,136,144,168,88,184,8,8,5,7,7,6,
119
+  0,0,136,144,184,72,152,32,56,5,8,8,6,0,0,192,
120
+  64,192,72,216,56,8,8,5,7,7,6,0,0,32,0,32,
121
+  64,128,136,112,5,8,8,6,0,0,64,32,0,112,136,248,
122
+  136,136,5,8,8,6,0,0,16,32,0,112,136,248,136,136,
123
+  5,8,8,6,0,0,32,80,0,112,136,248,136,136,5,8,
124
+  8,6,0,0,104,144,0,112,136,248,136,136,5,8,8,6,
125
+  0,0,80,0,112,136,136,248,136,136,5,8,8,6,0,0,
126
+  32,80,32,112,136,248,136,136,5,7,7,6,0,0,56,96,
127
+  160,184,224,160,184,5,8,8,6,0,255,112,136,128,128,136,
128
+  112,32,96,5,8,8,6,0,0,64,32,0,248,128,240,128,
129
+  248,5,8,8,6,0,0,8,16,0,248,128,240,128,248,5,
130
+  8,8,6,0,0,32,80,0,248,128,240,128,248,5,7,7,
131
+  6,0,0,80,0,248,128,240,128,248,3,8,8,6,1,0,
132
+  128,64,0,224,64,64,64,224,3,8,8,6,1,0,32,64,
133
+  0,224,64,64,64,224,3,8,8,6,1,0,64,160,0,224,
134
+  64,64,64,224,3,7,7,6,1,0,160,0,224,64,64,64,
135
+  224,5,7,7,6,0,0,112,72,72,232,72,72,112,5,8,
136
+  8,6,0,0,104,144,0,136,200,168,152,136,5,8,8,6,
137
+  0,0,64,32,112,136,136,136,136,112,5,8,8,6,0,0,
138
+  16,32,112,136,136,136,136,112,5,8,8,6,0,0,32,80,
139
+  0,112,136,136,136,112,5,8,8,6,0,0,104,144,0,112,
140
+  136,136,136,112,5,8,8,6,0,0,80,0,112,136,136,136,
141
+  136,112,5,5,5,6,0,1,136,80,32,80,136,5,8,8,
142
+  6,0,255,16,112,168,168,168,168,112,64,5,8,8,6,0,
143
+  0,64,32,136,136,136,136,136,112,5,8,8,6,0,0,16,
144
+  32,136,136,136,136,136,112,5,8,8,6,0,0,32,80,0,
145
+  136,136,136,136,112,5,8,8,6,0,0,80,0,136,136,136,
146
+  136,136,112,5,8,8,6,0,0,16,32,136,80,32,32,32,
147
+  32,5,9,9,6,0,255,192,64,112,72,72,112,64,64,224,
148
+  4,8,8,6,1,255,96,144,144,160,144,144,224,128,5,8,
149
+  8,6,0,0,64,32,0,112,8,120,136,120,5,8,8,6,
150
+  0,0,16,32,0,112,8,120,136,120,5,8,8,6,0,0,
151
+  32,80,0,112,8,120,136,120,5,8,8,6,0,0,104,144,
152
+  0,112,8,120,136,120,5,7,7,6,0,0,80,0,112,8,
153
+  120,136,120,5,8,8,6,0,0,32,80,32,112,8,120,136,
154
+  120,5,6,6,6,0,0,208,40,120,160,168,80,5,6,6,
155
+  6,0,255,112,128,136,112,32,96,5,8,8,6,0,0,64,
156
+  32,0,112,136,248,128,112,5,8,8,6,0,0,16,32,0,
157
+  112,136,248,128,112,5,8,8,6,0,0,32,80,0,112,136,
158
+  248,128,112,5,7,7,6,0,0,80,0,112,136,248,128,112,
159
+  3,8,8,6,1,0,128,64,0,64,192,64,64,224,3,8,
160
+  8,6,1,0,32,64,0,64,192,64,64,224,3,8,8,6,
161
+  1,0,64,160,0,64,192,64,64,224,3,7,7,6,1,0,
162
+  160,0,64,192,64,64,224,5,7,7,6,0,0,160,64,160,
163
+  16,120,136,112,5,8,8,6,0,0,104,144,0,176,200,136,
164
+  136,136,5,8,8,6,0,0,64,32,0,112,136,136,136,112,
165
+  5,8,8,6,0,0,16,32,0,112,136,136,136,112,5,8,
166
+  8,6,0,0,32,80,0,112,136,136,136,112,5,8,8,6,
167
+  0,0,104,144,0,112,136,136,136,112,5,7,7,6,0,0,
168
+  80,0,112,136,136,136,112,5,5,5,6,0,1,32,0,248,
169
+  0,32,5,7,7,6,0,255,16,112,168,168,168,112,64,5,
170
+  8,8,6,0,0,64,32,0,136,136,136,152,104,5,8,8,
171
+  6,0,0,16,32,0,136,136,136,152,104,5,8,8,6,0,
172
+  0,32,80,0,136,136,136,152,104,5,7,7,6,0,0,80,
173
+  0,136,136,136,152,104,5,9,9,6,0,255,16,32,0,136,
174
+  136,136,248,8,112,4,7,7,6,1,255,192,64,96,80,96,
175
+  64,224,5,8,8,6,0,255,80,0,136,136,136,120,8,112
176
+  };

+ 15
- 16
Marlin/dogm_lcd_implementation.h View File

30
 
30
 
31
 #include <U8glib.h>
31
 #include <U8glib.h>
32
 #include "DOGMbitmaps.h"
32
 #include "DOGMbitmaps.h"
33
+
33
 #include "ultralcd.h"
34
 #include "ultralcd.h"
34
 #include "ultralcd_st7920_u8glib_rrd.h"
35
 #include "ultralcd_st7920_u8glib_rrd.h"
35
 #include "Configuration.h"
36
 #include "Configuration.h"
36
 
37
 
37
-
38
-#include <utility/u8g.h>
39
-#include "dogm_font_data_6x9_marlin.h"       // Height of 'A' is only 6 pixel.
40
 #include "dogm_font_data_Marlin_symbols.h"   // The Marlin special symbols
38
 #include "dogm_font_data_Marlin_symbols.h"   // The Marlin special symbols
41
-
42
-#define FONT_STATUSMENU_NAME u8g_font_6x9    // we don't have a small font for Cyrillic, Kana
43
 #define FONT_SPECIAL_NAME Marlin_symbols
39
 #define FONT_SPECIAL_NAME Marlin_symbols
44
 
40
 
45
-// save 3120 bytes of PROGMEM by commenting out the next #define
41
+// save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT
46
 // we don't have a big font for Cyrillic, Kana
42
 // we don't have a big font for Cyrillic, Kana
47
 #if defined( MAPPER_C2C3 ) || defined( MAPPER_NON )
43
 #if defined( MAPPER_C2C3 ) || defined( MAPPER_NON )
48
   #define USE_BIG_EDIT_FONT
44
   #define USE_BIG_EDIT_FONT
50
 
46
 
51
 #ifndef SIMULATE_ROMFONT
47
 #ifndef SIMULATE_ROMFONT
52
   #if defined( DISPLAY_CHARSET_ISO10646_1 )
48
   #if defined( DISPLAY_CHARSET_ISO10646_1 )
53
-    #include <utility/u8g.h> // System font.
54
-    #define FONT_MENU_NAME u8g_font_6x10
49
+    #include "dogm_font_data_ISO10646_1.h"
50
+    #define FONT_MENU_NAME ISO10646_1_5x7
55
   #elif defined( DISPLAY_CHARSET_ISO10646_5 )
51
   #elif defined( DISPLAY_CHARSET_ISO10646_5 )
56
     #include "dogm_font_data_ISO10646_5_Cyrillic.h"
52
     #include "dogm_font_data_ISO10646_5_Cyrillic.h"
57
     #define FONT_MENU_NAME ISO10646_5_Cyrillic_5x7
53
     #define FONT_MENU_NAME ISO10646_5_Cyrillic_5x7
59
     #include "dogm_font_data_ISO10646_Kana.h"
55
     #include "dogm_font_data_ISO10646_Kana.h"
60
     #define FONT_MENU_NAME ISO10646_Kana_5x7
56
     #define FONT_MENU_NAME ISO10646_Kana_5x7
61
   #else // fall-back
57
   #else // fall-back
62
-    #include <utility/u8g.h> // system font
63
-    #define FONT_MENU_NAME u8g_font_6x10
58
+    #include "dogm_font_data_ISO10646_1.h"
59
+    #define FONT_MENU_NAME ISO10646_1_5x7
64
   #endif
60
   #endif
65
 #else // SIMULATE_ROMFONT
61
 #else // SIMULATE_ROMFONT
66
   #if defined( DISPLAY_CHARSET_HD44780_JAPAN )
62
   #if defined( DISPLAY_CHARSET_HD44780_JAPAN )
73
     #include "dogm_font_data_HD44780_C.h"
69
     #include "dogm_font_data_HD44780_C.h"
74
     #define FONT_MENU_NAME HD44780_C_5x7
70
     #define FONT_MENU_NAME HD44780_C_5x7
75
   #else // fall-back
71
   #else // fall-back
76
-    #include <utility/u8g.h> // system font
77
-    #define FONT_MENU_NAME u8g_font_6x10
72
+    #include "dogm_font_data_ISO10646_1.h"
73
+    #define FONT_MENU_NAME ISO10646_1_5x7
78
   #endif
74
   #endif
79
 #endif // SIMULATE_ROMFONT
75
 #endif // SIMULATE_ROMFONT
80
 
76
 
77
+#define FONT_STATUSMENU_NAME FONT_MENU_NAME
78
+
81
 #define FONT_STATUSMENU 1
79
 #define FONT_STATUSMENU 1
82
 #define FONT_SPECIAL 2
80
 #define FONT_SPECIAL 2
83
 #define FONT_MENU_EDIT 3
81
 #define FONT_MENU_EDIT 3
112
 #define LCD_STR_THERMOMETER "\x08"
110
 #define LCD_STR_THERMOMETER "\x08"
113
 #define LCD_STR_DEGREE      "\x09"
111
 #define LCD_STR_DEGREE      "\x09"
114
 
112
 
115
-#define LCD_STR_SPECIAL_MAX LCD_STR_DEGREE
113
+#define LCD_STR_SPECIAL_MAX '\x09'
116
 // Maximum here is 0x1f because 0x20 is ' ' (space) and the normal charsets begin.
114
 // Maximum here is 0x1f because 0x20 is ' ' (space) and the normal charsets begin.
117
 // Better stay below 0x10 because DISPLAY_CHARSET_HD44780_WESTERN begins here.
115
 // Better stay below 0x10 because DISPLAY_CHARSET_HD44780_WESTERN begins here.
118
 
116
 
148
 }
146
 }
149
 
147
 
150
 char lcd_print(char c) {
148
 char lcd_print(char c) {
151
-  if ((c > 0) && (c < ' ')) {
149
+  if ((c > 0) && (c <= LCD_STR_SPECIAL_MAX)) {
152
     u8g.setFont(FONT_SPECIAL_NAME);
150
     u8g.setFont(FONT_SPECIAL_NAME);
153
     u8g.print(c);
151
     u8g.print(c);
154
     lcd_setFont(currentfont);
152
     lcd_setFont(currentfont);
228
 static void _draw_heater_status(int x, int heater) {
226
 static void _draw_heater_status(int x, int heater) {
229
   bool isBed = heater < 0;
227
   bool isBed = heater < 0;
230
   int y = 17 + (isBed ? 1 : 0);
228
   int y = 17 + (isBed ? 1 : 0);
229
+
231
   lcd_setFont(FONT_STATUSMENU);
230
   lcd_setFont(FONT_STATUSMENU);
232
-  u8g.setPrintPos(x,6);
231
+  u8g.setPrintPos(x,7);
233
   lcd_print(itostr3(int((heater >= 0 ? degTargetHotend(heater) : degTargetBed()) + 0.5)));
232
   lcd_print(itostr3(int((heater >= 0 ? degTargetHotend(heater) : degTargetBed()) + 0.5)));
234
   lcd_printPGM(PSTR(LCD_STR_DEGREE " "));
233
   lcd_printPGM(PSTR(LCD_STR_DEGREE " "));
235
-  u8g.setPrintPos(x,27);
234
+  u8g.setPrintPos(x,28);
236
   lcd_print(itostr3(int(heater >= 0 ? degHotend(heater) : degBed()) + 0.5));
235
   lcd_print(itostr3(int(heater >= 0 ? degHotend(heater) : degBed()) + 0.5));
237
   lcd_printPGM(PSTR(LCD_STR_DEGREE " "));
236
   lcd_printPGM(PSTR(LCD_STR_DEGREE " "));
238
   if (!isHeatingHotend(0)) {
237
   if (!isHeatingHotend(0)) {

+ 1
- 0
Marlin/example_configurations/Hephestos/Configuration.h View File

453
 
453
 
454
   #define Z_RAISE_BEFORE_PROBING 15    //How much the extruder will be raised before traveling to the first probing point.
454
   #define Z_RAISE_BEFORE_PROBING 15    //How much the extruder will be raised before traveling to the first probing point.
455
   #define Z_RAISE_BETWEEN_PROBINGS 5  //How much the extruder will be raised when traveling from between next probing points
455
   #define Z_RAISE_BETWEEN_PROBINGS 5  //How much the extruder will be raised when traveling from between next probing points
456
+  #define Z_RAISE_AFTER_PROBING 15    //How much the extruder will be raised after the last probing point.
456
 
457
 
457
   //#define Z_PROBE_SLED // turn on if you have a z-probe mounted on a sled like those designed by Charles Bell
458
   //#define Z_PROBE_SLED // turn on if you have a z-probe mounted on a sled like those designed by Charles Bell
458
   //#define SLED_DOCKING_OFFSET 5 // the extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.
459
   //#define SLED_DOCKING_OFFSET 5 // the extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.

+ 1
- 0
Marlin/example_configurations/K8200/Configuration.h View File

458
 
458
 
459
   #define Z_RAISE_BEFORE_PROBING 15    //How much the extruder will be raised before traveling to the first probing point.
459
   #define Z_RAISE_BEFORE_PROBING 15    //How much the extruder will be raised before traveling to the first probing point.
460
   #define Z_RAISE_BETWEEN_PROBINGS 5  //How much the extruder will be raised when traveling from between next probing points
460
   #define Z_RAISE_BETWEEN_PROBINGS 5  //How much the extruder will be raised when traveling from between next probing points
461
+  #define Z_RAISE_AFTER_PROBING 15    //How much the extruder will be raised after the last probing point.
461
 
462
 
462
   //#define Z_PROBE_SLED // turn on if you have a z-probe mounted on a sled like those designed by Charles Bell
463
   //#define Z_PROBE_SLED // turn on if you have a z-probe mounted on a sled like those designed by Charles Bell
463
   //#define SLED_DOCKING_OFFSET 5 // the extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.
464
   //#define SLED_DOCKING_OFFSET 5 // the extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.

+ 1
- 0
Marlin/example_configurations/SCARA/Configuration.h View File

482
 
482
 
483
   #define Z_RAISE_BEFORE_PROBING 15    //How much the extruder will be raised before traveling to the first probing point.
483
   #define Z_RAISE_BEFORE_PROBING 15    //How much the extruder will be raised before traveling to the first probing point.
484
   #define Z_RAISE_BETWEEN_PROBINGS 5  //How much the extruder will be raised when traveling from between next probing points
484
   #define Z_RAISE_BETWEEN_PROBINGS 5  //How much the extruder will be raised when traveling from between next probing points
485
+  #define Z_RAISE_AFTER_PROBING 15    //How much the extruder will be raised after the last probing point.
485
 
486
 
486
   //#define Z_PROBE_SLED // turn on if you have a z-probe mounted on a sled like those designed by Charles Bell
487
   //#define Z_PROBE_SLED // turn on if you have a z-probe mounted on a sled like those designed by Charles Bell
487
   //#define SLED_DOCKING_OFFSET 5 // the extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.
488
   //#define SLED_DOCKING_OFFSET 5 // the extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.

+ 1
- 0
Marlin/example_configurations/WITBOX/Configuration.h View File

452
 
452
 
453
   #define Z_RAISE_BEFORE_PROBING 15    //How much the extruder will be raised before traveling to the first probing point.
453
   #define Z_RAISE_BEFORE_PROBING 15    //How much the extruder will be raised before traveling to the first probing point.
454
   #define Z_RAISE_BETWEEN_PROBINGS 5  //How much the extruder will be raised when traveling from between next probing points
454
   #define Z_RAISE_BETWEEN_PROBINGS 5  //How much the extruder will be raised when traveling from between next probing points
455
+  #define Z_RAISE_AFTER_PROBING 15    //How much the extruder will be raised after the last probing point.
455
 
456
 
456
   //#define Z_PROBE_SLED // turn on if you have a z-probe mounted on a sled like those designed by Charles Bell
457
   //#define Z_PROBE_SLED // turn on if you have a z-probe mounted on a sled like those designed by Charles Bell
457
   //#define SLED_DOCKING_OFFSET 5 // the extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.
458
   //#define SLED_DOCKING_OFFSET 5 // the extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.

Marlin/example_configurations/delta/Configuration.h → Marlin/example_configurations/delta/generic/Configuration.h View File

110
 // Effective horizontal distance bridged by diagonal push rods.
110
 // Effective horizontal distance bridged by diagonal push rods.
111
 #define DELTA_RADIUS (DELTA_SMOOTH_ROD_OFFSET-DELTA_EFFECTOR_OFFSET-DELTA_CARRIAGE_OFFSET)
111
 #define DELTA_RADIUS (DELTA_SMOOTH_ROD_OFFSET-DELTA_EFFECTOR_OFFSET-DELTA_CARRIAGE_OFFSET)
112
 
112
 
113
+// Print surface diameter/2 minus unreachable space (avoid collisions with vertical towers).
114
+#define DELTA_PRINTABLE_RADIUS 90
115
+
113
 
116
 
114
 //===========================================================================
117
 //===========================================================================
115
 //============================= Thermal Settings ============================
118
 //============================= Thermal Settings ============================
134
 // 10 is 100k RS thermistor 198-961 (4.7k pullup)
137
 // 10 is 100k RS thermistor 198-961 (4.7k pullup)
135
 // 11 is 100k beta 3950 1% thermistor (4.7k pullup)
138
 // 11 is 100k beta 3950 1% thermistor (4.7k pullup)
136
 // 12 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed)
139
 // 12 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed)
137
-// 13 is 100k Hisens 3950  1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE" 
140
+// 13 is 100k Hisens 3950  1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE"
138
 // 20 is the PT100 circuit found in the Ultimainboard V2.x
141
 // 20 is the PT100 circuit found in the Ultimainboard V2.x
139
 // 60 is 100k Maker's Tool Works Kapton Bed Thermistor beta=3950
142
 // 60 is 100k Maker's Tool Works Kapton Bed Thermistor beta=3950
140
 //
143
 //
148
 // 1010 is Pt1000 with 1k pullup (non standard)
151
 // 1010 is Pt1000 with 1k pullup (non standard)
149
 // 147 is Pt100 with 4k7 pullup
152
 // 147 is Pt100 with 4k7 pullup
150
 // 110 is Pt100 with 1k pullup (non standard)
153
 // 110 is Pt100 with 1k pullup (non standard)
151
-// 998 and 999 are Dummy Tables. They will ALWAYS read 25°C or the temperature defined below. 
154
+// 998 and 999 are Dummy Tables. They will ALWAYS read 25°C or the temperature defined below.
152
 //     Use it for Testing or Development purposes. NEVER for production machine.
155
 //     Use it for Testing or Development purposes. NEVER for production machine.
153
 //     #define DUMMY_THERMISTOR_998_VALUE 25
156
 //     #define DUMMY_THERMISTOR_998_VALUE 25
154
 //     #define DUMMY_THERMISTOR_999_VALUE 100
157
 //     #define DUMMY_THERMISTOR_999_VALUE 100
293
 The system will turn the heater on forever, burning up the filament and anything
296
 The system will turn the heater on forever, burning up the filament and anything
294
 else around.
297
 else around.
295
 
298
 
296
-After the temperature reaches the target for the first time, this feature will 
297
-start measuring for how long the current temperature stays below the target 
299
+After the temperature reaches the target for the first time, this feature will
300
+start measuring for how long the current temperature stays below the target
298
 minus _HYSTERESIS (set_temperature - THERMAL_RUNAWAY_PROTECTION_HYSTERESIS).
301
 minus _HYSTERESIS (set_temperature - THERMAL_RUNAWAY_PROTECTION_HYSTERESIS).
299
 
302
 
300
 If it stays longer than _PERIOD, it means the thermistor temperature
303
 If it stays longer than _PERIOD, it means the thermistor temperature
301
 cannot catch up with the target, so something *may be* wrong. Then, to be on the
304
 cannot catch up with the target, so something *may be* wrong. Then, to be on the
302
 safe side, the system will he halt.
305
 safe side, the system will he halt.
303
 
306
 
304
-Bear in mind the count down will just start AFTER the first time the 
307
+Bear in mind the count down will just start AFTER the first time the
305
 thermistor temperature is over the target, so you will have no problem if
308
 thermistor temperature is over the target, so you will have no problem if
306
 your extruder heater takes 2 minutes to hit the target on heating.
309
 your extruder heater takes 2 minutes to hit the target on heating.
307
 
310
 
361
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
364
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
362
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
365
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
363
 //#define DISABLE_MAX_ENDSTOPS
366
 //#define DISABLE_MAX_ENDSTOPS
364
-// Deltas never have min endstops
365
-#define DISABLE_MIN_ENDSTOPS
367
+#define DISABLE_MIN_ENDSTOPS // Deltas only use min endstops for probing
366
 
368
 
367
 // For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
369
 // For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
368
 #define X_ENABLE_ON 0
370
 #define X_ENABLE_ON 0
413
 //============================= Bed Auto Leveling ===========================
415
 //============================= Bed Auto Leveling ===========================
414
 //===========================================================================
416
 //===========================================================================
415
 
417
 
416
-//Bed Auto Leveling is still not compatible with Delta Kinematics
418
+//#define ENABLE_AUTO_BED_LEVELING // Delete the comment to enable (remove // at the start of the line)
419
+// Z-Probe Repeatability test is not supported in Deltas yet.
420
+
421
+#ifdef ENABLE_AUTO_BED_LEVELING
422
+
423
+  // Deltas only support grid mode
424
+  #define AUTO_BED_LEVELING_GRID
425
+
426
+  #define DELTA_PROBABLE_RADIUS (DELTA_PRINTABLE_RADIUS - 10)
427
+  #define LEFT_PROBE_BED_POSITION -DELTA_PROBABLE_RADIUS
428
+  #define RIGHT_PROBE_BED_POSITION DELTA_PROBABLE_RADIUS
429
+  #define BACK_PROBE_BED_POSITION DELTA_PROBABLE_RADIUS
430
+  #define FRONT_PROBE_BED_POSITION -DELTA_PROBABLE_RADIUS
431
+
432
+  // Non-linear bed leveling will be used.
433
+  // Compensate by interpolating between the nearest four Z probe values for each point.
434
+  // Useful for deltas where the print surface may appear like a bowl or dome shape.
435
+  // Works best with ACCURATE_BED_LEVELING_POINTS 5 or higher.
436
+  #define AUTO_BED_LEVELING_GRID_POINTS 9
437
+
438
+  // Offsets to the probe relative to the extruder tip (Hotend - Probe)
439
+  // X and Y offsets must be integers
440
+  #define X_PROBE_OFFSET_FROM_EXTRUDER 0     // -left  +right
441
+  #define Y_PROBE_OFFSET_FROM_EXTRUDER -10   // -front +behind
442
+  #define Z_PROBE_OFFSET_FROM_EXTRUDER -3.5  // -below (always!)
443
+
444
+  #define Z_RAISE_BEFORE_HOMING 4       // (in mm) Raise Z before homing (G28) for Probe Clearance.
445
+                                        // Be sure you have this distance over your Z_MAX_POS in case
446
+
447
+  #define XY_TRAVEL_SPEED 4000         // X and Y axis travel speed between probes, in mm/min
448
+
449
+  #define Z_RAISE_BEFORE_PROBING 15   //How much the extruder will be raised before traveling to the first probing point.
450
+  #define Z_RAISE_BETWEEN_PROBINGS 5  //How much the extruder will be raised when traveling from between next probing points
451
+  #define Z_RAISE_AFTER_PROBING 50    //How much the extruder will be raised after the last probing point.
452
+  
453
+  // Allen key retractable z-probe as seen on many Kossel delta printers - http://reprap.org/wiki/Kossel#Automatic_bed_leveling_probe
454
+  // Deploys by touching z-axis belt. Retracts by pushing the probe down. Uses Z_MIN_PIN.
455
+  //#define Z_PROBE_ALLEN_KEY
456
+  #ifdef Z_PROBE_ALLEN_KEY
457
+    #define Z_PROBE_ALLEN_KEY_DEPLOY_X 30
458
+    #define Z_PROBE_ALLEN_KEY_DEPLOY_Y DELTA_PRINTABLE_RADIUS
459
+    #define Z_PROBE_ALLEN_KEY_DEPLOY_Z 100
460
+
461
+    #define Z_PROBE_ALLEN_KEY_RETRACT_X     -64
462
+    #define Z_PROBE_ALLEN_KEY_RETRACT_Y     56
463
+    #define Z_PROBE_ALLEN_KEY_RETRACT_Z     23
464
+    #define Z_PROBE_ALLEN_KEY_RETRACT_DEPTH 20
465
+  #endif
466
+
467
+  //If defined, the Probe servo will be turned on only during movement and then turned off to avoid jerk
468
+  //The value is the delay to turn the servo off after powered on - depends on the servo speed; 300ms is good value, but you can try lower it.
469
+  // You MUST HAVE the SERVO_ENDSTOPS defined to use here a value higher than zero otherwise your code will not compile.
417
 
470
 
471
+//  #define PROBE_SERVO_DEACTIVATION_DELAY 300
472
+
473
+
474
+//If you have enabled the Bed Auto Leveling and are using the same Z Probe for Z Homing,
475
+//it is highly recommended you let this Z_SAFE_HOMING enabled!!!
476
+
477
+  #define Z_SAFE_HOMING   // This feature is meant to avoid Z homing with probe outside the bed area.
478
+                          // When defined, it will:
479
+                          // - Allow Z homing only after X and Y homing AND stepper drivers still enabled
480
+                          // - If stepper drivers timeout, it will need X and Y homing again before Z homing
481
+                          // - Position the probe in a defined XY point before Z Homing when homing all axis (G28)
482
+                          // - Block Z homing only when the probe is outside bed area.
483
+
484
+  #ifdef Z_SAFE_HOMING
485
+
486
+    #define Z_SAFE_HOMING_X_POINT (X_MAX_LENGTH/2)    // X point for Z homing when homing all axis (G28)
487
+    #define Z_SAFE_HOMING_Y_POINT (Y_MAX_LENGTH/2)    // Y point for Z homing when homing all axis (G28)
488
+
489
+  #endif
490
+
491
+#endif // ENABLE_AUTO_BED_LEVELING
418
 
492
 
419
 
493
 
420
 
494
 
493
 //==============================LCD and SD support=============================
567
 //==============================LCD and SD support=============================
494
 
568
 
495
 // Define your display language below. Replace (en) with your language code and uncomment.
569
 // Define your display language below. Replace (en) with your language code and uncomment.
496
-// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu
570
+// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, test
497
 // See also language.h
571
 // See also language.h
498
-//#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en)
572
+#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en)
499
 
573
 
500
-// Character based displays can have different extended charsets.
501
-#define DISPLAY_CHARSET_HD44780_JAPAN     // "ääööüüß23°"
502
-//#define DISPLAY_CHARSET_HD44780_WESTERN // "ÄäÖöÜüß²³°" if you see a '~' instead of a 'arrow_right' at the right of submenuitems - this is the right one.
574
+// Chose ONE of the next three charsets. This has to match your hardware. In case of a full graphic display this information is not important.
575
+// To find out what type you have - compile with (test) - upload - click to get the menu. You'll see two typical lines from the upper half of the charset.
576
+// See also documentation/LCDLanguageFont.md
577
+  #define DISPLAY_CHARSET_HD44780_JAPAN        // this is the most common hardware
578
+  //#define DISPLAY_CHARSET_HD44780_WESTERN
579
+  //#define DISPLAY_CHARSET_HD44780_CYRILLIC
503
 
580
 
504
 //#define ULTRA_LCD  //general LCD support, also 16x2
581
 //#define ULTRA_LCD  //general LCD support, also 16x2
505
 //#define DOGLCD  // Support for SPI LCD 128x64 (Controller ST7565R graphic Display Family)
582
 //#define DOGLCD  // Support for SPI LCD 128x64 (Controller ST7565R graphic Display Family)
571
  #define ULTRA_LCD  //general LCD support, also 16x2
648
  #define ULTRA_LCD  //general LCD support, also 16x2
572
  #define DOGLCD  // Support for SPI LCD 128x64 (Controller ST7565R graphic Display Family)
649
  #define DOGLCD  // Support for SPI LCD 128x64 (Controller ST7565R graphic Display Family)
573
  #define ULTIMAKERCONTROLLER //as available from the Ultimaker online store.
650
  #define ULTIMAKERCONTROLLER //as available from the Ultimaker online store.
574
- 
651
+
575
   #ifdef miniVIKI
652
   #ifdef miniVIKI
576
    #define DEFAULT_LCD_CONTRAST 95
653
    #define DEFAULT_LCD_CONTRAST 95
577
   #else
654
   #else
578
    #define DEFAULT_LCD_CONTRAST 40
655
    #define DEFAULT_LCD_CONTRAST 40
579
   #endif
656
   #endif
580
-  
657
+
581
  #define ENCODER_PULSES_PER_STEP 4
658
  #define ENCODER_PULSES_PER_STEP 4
582
  #define ENCODER_STEPS_PER_MENU_ITEM 1
659
  #define ENCODER_STEPS_PER_MENU_ITEM 1
583
 #endif
660
 #endif
668
 // Shift register panels
745
 // Shift register panels
669
 // ---------------------
746
 // ---------------------
670
 // 2 wire Non-latching LCD SR from:
747
 // 2 wire Non-latching LCD SR from:
671
-// https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/schematics#!shiftregister-connection 
748
+// https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/schematics#!shiftregister-connection
672
 
749
 
673
 //#define SAV_3DLCD
750
 //#define SAV_3DLCD
674
 #ifdef SAV_3DLCD
751
 #ifdef SAV_3DLCD
766
  * Support for a filament diameter sensor
843
  * Support for a filament diameter sensor
767
  * Also allows adjustment of diameter at print time (vs  at slicing)
844
  * Also allows adjustment of diameter at print time (vs  at slicing)
768
  * Single extruder only at this point (extruder 0)
845
  * Single extruder only at this point (extruder 0)
769
- * 
846
+ *
770
  * Motherboards
847
  * Motherboards
771
- * 34 - RAMPS1.4 - uses Analog input 5 on the AUX2 connector 
848
+ * 34 - RAMPS1.4 - uses Analog input 5 on the AUX2 connector
772
  * 81 - Printrboard - Uses Analog input 2 on the Exp1 connector (version B,C,D,E)
849
  * 81 - Printrboard - Uses Analog input 2 on the Exp1 connector (version B,C,D,E)
773
  * 301 - Rambo  - uses Analog input 3
850
  * 301 - Rambo  - uses Analog input 3
774
  * Note may require analog pins to be defined for different motherboards
851
  * Note may require analog pins to be defined for different motherboards

Marlin/example_configurations/delta/Configuration_adv.h → Marlin/example_configurations/delta/generic/Configuration_adv.h View File

456
 //===========================================================================
456
 //===========================================================================
457
 
457
 
458
 #if defined (ENABLE_AUTO_BED_LEVELING) && defined (DELTA)
458
 #if defined (ENABLE_AUTO_BED_LEVELING) && defined (DELTA)
459
-  #error "Bed Auto Leveling is still not compatible with Delta Kinematics."
459
+
460
+  #if not defined(AUTO_BED_LEVELING_GRID)
461
+    #error "Only Grid Bed Auto Leveling is supported on Deltas."
462
+  #endif
463
+  
464
+  #if defined(Z_PROBE_SLED)
465
+    #error "You cannot use Z_PROBE_SLED together with DELTA."
466
+  #endif
467
+
468
+  #if defined(Z_PROBE_REPEATABILITY_TEST)
469
+    #error "Z-probe repeatability test is not supported on Deltas yet."
470
+  #endif
471
+
460
 #endif  
472
 #endif  
461
 
473
 
474
+#if defined(Z_PROBE_ALLEN_KEY)
475
+  #if !defined(AUTO_BED_LEVELING_GRID) || !defined(DELTA)
476
+    #error "Invalid use of Z_PROBE_ALLEN_KEY."
477
+  #endif
478
+#endif
479
+
462
 #if EXTRUDERS > 1 && defined TEMP_SENSOR_1_AS_REDUNDANT
480
 #if EXTRUDERS > 1 && defined TEMP_SENSOR_1_AS_REDUNDANT
463
   #error "You cannot use TEMP_SENSOR_1_AS_REDUNDANT if EXTRUDERS > 1"
481
   #error "You cannot use TEMP_SENSOR_1_AS_REDUNDANT if EXTRUDERS > 1"
464
 #endif
482
 #endif

+ 880
- 0
Marlin/example_configurations/delta/kossel_mini/Configuration.h View File

1
+#ifndef CONFIGURATION_H
2
+#define CONFIGURATION_H
3
+
4
+#include "boards.h"
5
+
6
+//===========================================================================
7
+//============================= Getting Started =============================
8
+//===========================================================================
9
+/*
10
+Here are some standard links for getting your machine calibrated:
11
+ * http://reprap.org/wiki/Calibration
12
+ * http://youtu.be/wAL9d7FgInk
13
+ * http://calculator.josefprusa.cz
14
+ * http://reprap.org/wiki/Triffid_Hunter%27s_Calibration_Guide
15
+ * http://www.thingiverse.com/thing:5573
16
+ * https://sites.google.com/site/repraplogphase/calibration-of-your-reprap
17
+ * http://www.thingiverse.com/thing:298812
18
+*/
19
+
20
+// This configuration file contains the basic settings.
21
+// Advanced settings can be found in Configuration_adv.h
22
+// BASIC SETTINGS: select your board type, temperature sensor type, axis scaling, and endstop configuration
23
+
24
+//===========================================================================
25
+//============================= DELTA Printer ===============================
26
+//===========================================================================
27
+// For a Delta printer replace the configuration files with the files in the
28
+// example_configurations/delta directory.
29
+//
30
+
31
+//===========================================================================
32
+//============================= SCARA Printer ===============================
33
+//===========================================================================
34
+// For a Delta printer replace the configuration files with the files in the
35
+// example_configurations/SCARA directory.
36
+//
37
+
38
+// User-specified version info of this build to display in [Pronterface, etc] terminal window during
39
+// startup. Implementation of an idea by Prof Braino to inform user that any changes made to this
40
+// build by the user have been successfully uploaded into firmware.
41
+#define STRING_VERSION "1.0.2"
42
+#define STRING_URL "reprap.org"
43
+#define STRING_VERSION_CONFIG_H __DATE__ " " __TIME__ // build date and time
44
+#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
45
+#define STRING_SPLASH_LINE1 "v" STRING_VERSION // will be shown during bootup in line 1
46
+//#define STRING_SPLASH_LINE2 STRING_VERSION_CONFIG_H // will be shown during bootup in line2
47
+
48
+// SERIAL_PORT selects which serial port should be used for communication with the host.
49
+// This allows the connection of wireless adapters (for instance) to non-default port pins.
50
+// Serial port 0 is still used by the Arduino bootloader regardless of this setting.
51
+#define SERIAL_PORT 0
52
+
53
+// This determines the communication speed of the printer
54
+#define BAUDRATE 250000
55
+
56
+// This enables the serial port associated to the Bluetooth interface
57
+//#define BTENABLED              // Enable BT interface on AT90USB devices
58
+
59
+// The following define selects which electronics board you have.
60
+// Please choose the name from boards.h that matches your setup
61
+#ifndef MOTHERBOARD
62
+  #define MOTHERBOARD BOARD_RAMPS_13_EFB
63
+#endif
64
+
65
+// Define this to set a custom name for your generic Mendel,
66
+#define CUSTOM_MENDEL_NAME "Mini Kossel"
67
+
68
+// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
69
+// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
70
+// #define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
71
+
72
+// This defines the number of extruders
73
+#define EXTRUDERS 1
74
+
75
+//// The following define selects which power supply you have. Please choose the one that matches your setup
76
+// 1 = ATX
77
+// 2 = X-Box 360 203Watts (the blue wire connected to PS_ON and the red wire to VCC)
78
+
79
+#define POWER_SUPPLY 1
80
+
81
+// Define this to have the electronics keep the power supply off on startup. If you don't know what this is leave it.
82
+// #define PS_DEFAULT_OFF
83
+
84
+
85
+//===========================================================================
86
+//============================== Delta Settings =============================
87
+//===========================================================================
88
+// Enable DELTA kinematics and most of the default configuration for Deltas
89
+#define DELTA
90
+
91
+// Make delta curves from many straight lines (linear interpolation).
92
+// This is a trade-off between visible corners (not enough segments)
93
+// and processor overload (too many expensive sqrt calls).
94
+#define DELTA_SEGMENTS_PER_SECOND 200
95
+
96
+// NOTE NB all values for DELTA_* values MUST be floating point, so always have a decimal point in them
97
+
98
+// Center-to-center distance of the holes in the diagonal push rods.
99
+#define DELTA_DIAGONAL_ROD 215.0 // mm
100
+
101
+// Horizontal offset from middle of printer to smooth rod center.
102
+#define DELTA_SMOOTH_ROD_OFFSET 145.0 // mm
103
+
104
+// Horizontal offset of the universal joints on the end effector.
105
+#define DELTA_EFFECTOR_OFFSET 19.9 // mm
106
+
107
+// Horizontal offset of the universal joints on the carriages.
108
+#define DELTA_CARRIAGE_OFFSET 19.5 // mm
109
+
110
+
111
+// Horizontal distance bridged by diagonal push rods when effector is centered.
112
+#define DELTA_RADIUS (DELTA_SMOOTH_ROD_OFFSET-DELTA_EFFECTOR_OFFSET-DELTA_CARRIAGE_OFFSET)
113
+
114
+// Print surface diameter/2 minus unreachable space (avoid collisions with vertical towers).
115
+#define DELTA_PRINTABLE_RADIUS 90
116
+
117
+
118
+//===========================================================================
119
+//============================= Thermal Settings ============================
120
+//===========================================================================
121
+//
122
+//--NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table
123
+//
124
+//// Temperature sensor settings:
125
+// -2 is thermocouple with MAX6675 (only for sensor 0)
126
+// -1 is thermocouple with AD595
127
+// 0 is not used
128
+// 1 is 100k thermistor - best choice for EPCOS 100k (4.7k pullup)
129
+// 2 is 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)
130
+// 3 is Mendel-parts thermistor (4.7k pullup)
131
+// 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !!
132
+// 5 is 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup)
133
+// 6 is 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup)
134
+// 7 is 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup)
135
+// 71 is 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup)
136
+// 8 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup)
137
+// 9 is 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup)
138
+// 10 is 100k RS thermistor 198-961 (4.7k pullup)
139
+// 11 is 100k beta 3950 1% thermistor (4.7k pullup)
140
+// 12 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed)
141
+// 13 is 100k Hisens 3950  1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE"
142
+// 20 is the PT100 circuit found in the Ultimainboard V2.x
143
+// 60 is 100k Maker's Tool Works Kapton Bed Thermistor beta=3950
144
+//
145
+//    1k ohm pullup tables - This is not normal, you would have to have changed out your 4.7k for 1k
146
+//                          (but gives greater accuracy and more stable PID)
147
+// 51 is 100k thermistor - EPCOS (1k pullup)
148
+// 52 is 200k thermistor - ATC Semitec 204GT-2 (1k pullup)
149
+// 55 is 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup)
150
+//
151
+// 1047 is Pt1000 with 4k7 pullup
152
+// 1010 is Pt1000 with 1k pullup (non standard)
153
+// 147 is Pt100 with 4k7 pullup
154
+// 110 is Pt100 with 1k pullup (non standard)
155
+// 998 and 999 are Dummy Tables. They will ALWAYS read 25°C or the temperature defined below.
156
+//     Use it for Testing or Development purposes. NEVER for production machine.
157
+//     #define DUMMY_THERMISTOR_998_VALUE 25
158
+//     #define DUMMY_THERMISTOR_999_VALUE 100
159
+
160
+#define TEMP_SENSOR_0 7
161
+#define TEMP_SENSOR_1 0
162
+#define TEMP_SENSOR_2 0
163
+#define TEMP_SENSOR_3 0
164
+#define TEMP_SENSOR_BED 11
165
+
166
+// This makes temp sensor 1 a redundant sensor for sensor 0. If the temperatures difference between these sensors is to high the print will be aborted.
167
+//#define TEMP_SENSOR_1_AS_REDUNDANT
168
+#define MAX_REDUNDANT_TEMP_SENSOR_DIFF 5
169
+
170
+// Actual temperature must be close to target for this long before M109 returns success
171
+#define TEMP_RESIDENCY_TIME 10  // (seconds)
172
+#define TEMP_HYSTERESIS 3       // (degC) range of +/- temperatures considered "close" to the target one
173
+#define TEMP_WINDOW     1       // (degC) Window around target to start the residency timer x degC early.
174
+
175
+// The minimal temperature defines the temperature below which the heater will not be enabled It is used
176
+// to check that the wiring to the thermistor is not broken.
177
+// Otherwise this would lead to the heater being powered on all the time.
178
+#define HEATER_0_MINTEMP 5
179
+#define HEATER_1_MINTEMP 5
180
+#define HEATER_2_MINTEMP 5
181
+#define HEATER_3_MINTEMP 5
182
+#define BED_MINTEMP 5
183
+
184
+// When temperature exceeds max temp, your heater will be switched off.
185
+// This feature exists to protect your hotend from overheating accidentally, but *NOT* from thermistor short/failure!
186
+// You should use MINTEMP for thermistor short/failure protection.
187
+#define HEATER_0_MAXTEMP 275
188
+#define HEATER_1_MAXTEMP 275
189
+#define HEATER_2_MAXTEMP 275
190
+#define HEATER_3_MAXTEMP 275
191
+#define BED_MAXTEMP 150
192
+
193
+// If your bed has low resistance e.g. .6 ohm and throws the fuse you can duty cycle it to reduce the
194
+// average current. The value should be an integer and the heat bed will be turned on for 1 interval of
195
+// HEATER_BED_DUTY_CYCLE_DIVIDER intervals.
196
+//#define HEATER_BED_DUTY_CYCLE_DIVIDER 4
197
+
198
+// If you want the M105 heater power reported in watts, define the BED_WATTS, and (shared for all extruders) EXTRUDER_WATTS
199
+//#define EXTRUDER_WATTS (12.0*12.0/6.7) //  P=I^2/R
200
+//#define BED_WATTS (12.0*12.0/1.1)      // P=I^2/R
201
+
202
+//===========================================================================
203
+//============================= PID Settings ================================
204
+//===========================================================================
205
+// PID Tuning Guide here: http://reprap.org/wiki/PID_Tuning
206
+
207
+// Comment the following line to disable PID and enable bang-bang.
208
+#define PIDTEMP
209
+#define BANG_MAX 255 // limits current to nozzle while in bang-bang mode; 255=full current
210
+#define PID_MAX BANG_MAX // limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
211
+#ifdef PIDTEMP
212
+  //#define PID_DEBUG // Sends debug data to the serial port.
213
+  //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
214
+  //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
215
+  //#define PID_PARAMS_PER_EXTRUDER // Uses separate PID parameters for each extruder (useful for mismatched extruders)
216
+                                    // Set/get with gcode: M301 E[extruder number, 0-2]
217
+  #define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
218
+                                  // is more then PID_FUNCTIONAL_RANGE then the PID will be shut off and the heater will be set to min/max.
219
+  #define PID_INTEGRAL_DRIVE_MAX PID_MAX  //limit for the integral term
220
+  #define K1 0.95 //smoothing factor within the PID
221
+  #define PID_dT ((OVERSAMPLENR * 10.0)/(F_CPU / 64.0 / 256.0)) //sampling period of the temperature routine
222
+
223
+// If you are using a pre-configured hotend then you can use one of the value sets by uncommenting it
224
+// Ultimaker
225
+    #define  DEFAULT_Kp 22.2
226
+    #define  DEFAULT_Ki 1.08
227
+    #define  DEFAULT_Kd 114
228
+
229
+// MakerGear
230
+//    #define  DEFAULT_Kp 7.0
231
+//    #define  DEFAULT_Ki 0.1
232
+//    #define  DEFAULT_Kd 12
233
+
234
+// Mendel Parts V9 on 12V
235
+//    #define  DEFAULT_Kp 63.0
236
+//    #define  DEFAULT_Ki 2.25
237
+//    #define  DEFAULT_Kd 440
238
+#endif // PIDTEMP
239
+
240
+//===========================================================================
241
+//============================= PID > Bed Temperature Control ===============
242
+//===========================================================================
243
+// Select PID or bang-bang with PIDTEMPBED. If bang-bang, BED_LIMIT_SWITCHING will enable hysteresis
244
+//
245
+// Uncomment this to enable PID on the bed. It uses the same frequency PWM as the extruder.
246
+// If your PID_dT above is the default, and correct for your hardware/configuration, that means 7.689Hz,
247
+// which is fine for driving a square wave into a resistive load and does not significantly impact you FET heating.
248
+// This also works fine on a Fotek SSR-10DA Solid State Relay into a 250W heater.
249
+// If your configuration is significantly different than this and you don't understand the issues involved, you probably
250
+// shouldn't use bed PID until someone else verifies your hardware works.
251
+// If this is enabled, find your own PID constants below.
252
+//#define PIDTEMPBED
253
+//
254
+//#define BED_LIMIT_SWITCHING
255
+
256
+// This sets the max power delivered to the bed, and replaces the HEATER_BED_DUTY_CYCLE_DIVIDER option.
257
+// all forms of bed control obey this (PID, bang-bang, bang-bang with hysteresis)
258
+// setting this to anything other than 255 enables a form of PWM to the bed just like HEATER_BED_DUTY_CYCLE_DIVIDER did,
259
+// so you shouldn't use it unless you are OK with PWM on your bed.  (see the comment on enabling PIDTEMPBED)
260
+#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current
261
+
262
+#ifdef PIDTEMPBED
263
+//120v 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
264
+//from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10)
265
+    #define  DEFAULT_bedKp 10.00
266
+    #define  DEFAULT_bedKi .023
267
+    #define  DEFAULT_bedKd 305.4
268
+
269
+//120v 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
270
+//from pidautotune
271
+//    #define  DEFAULT_bedKp 97.1
272
+//    #define  DEFAULT_bedKi 1.41
273
+//    #define  DEFAULT_bedKd 1675.16
274
+
275
+// FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles.
276
+#endif // PIDTEMPBED
277
+
278
+
279
+//this prevents dangerous Extruder moves, i.e. if the temperature is under the limit
280
+//can be software-disabled for whatever purposes by
281
+#define PREVENT_DANGEROUS_EXTRUDE
282
+//if PREVENT_DANGEROUS_EXTRUDE is on, you can still disable (uncomment) very long bits of extrusion separately.
283
+#define PREVENT_LENGTHY_EXTRUDE
284
+
285
+#define EXTRUDE_MINTEMP 170
286
+#define EXTRUDE_MAXLENGTH (X_MAX_LENGTH+Y_MAX_LENGTH) //prevent extrusion of very large distances.
287
+
288
+//===========================================================================
289
+//============================= Thermal Runaway Protection ==================
290
+//===========================================================================
291
+/*
292
+This is a feature to protect your printer from burn up in flames if it has
293
+a thermistor coming off place (this happened to a friend of mine recently and
294
+motivated me writing this feature).
295
+
296
+The issue: If a thermistor come off, it will read a lower temperature than actual.
297
+The system will turn the heater on forever, burning up the filament and anything
298
+else around.
299
+
300
+After the temperature reaches the target for the first time, this feature will
301
+start measuring for how long the current temperature stays below the target
302
+minus _HYSTERESIS (set_temperature - THERMAL_RUNAWAY_PROTECTION_HYSTERESIS).
303
+
304
+If it stays longer than _PERIOD, it means the thermistor temperature
305
+cannot catch up with the target, so something *may be* wrong. Then, to be on the
306
+safe side, the system will he halt.
307
+
308
+Bear in mind the count down will just start AFTER the first time the
309
+thermistor temperature is over the target, so you will have no problem if
310
+your extruder heater takes 2 minutes to hit the target on heating.
311
+
312
+*/
313
+// If you want to enable this feature for all your extruder heaters,
314
+// uncomment the 2 defines below:
315
+
316
+// Parameters for all extruder heaters
317
+//#define THERMAL_RUNAWAY_PROTECTION_PERIOD 40 //in seconds
318
+//#define THERMAL_RUNAWAY_PROTECTION_HYSTERESIS 4 // in degree Celsius
319
+
320
+// If you want to enable this feature for your bed heater,
321
+// uncomment the 2 defines below:
322
+
323
+// Parameters for the bed heater
324
+//#define THERMAL_RUNAWAY_PROTECTION_BED_PERIOD 20 //in seconds
325
+//#define THERMAL_RUNAWAY_PROTECTION_BED_HYSTERESIS 2 // in degree Celsius
326
+
327
+
328
+//===========================================================================
329
+//============================= Mechanical Settings =========================
330
+//===========================================================================
331
+
332
+// Uncomment this option to enable CoreXY kinematics
333
+// #define COREXY
334
+
335
+// Enable this option for Toshiba steppers
336
+// #define CONFIG_STEPPERS_TOSHIBA
337
+
338
+// coarse Endstop Settings
339
+#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
340
+
341
+#ifndef ENDSTOPPULLUPS
342
+  // fine endstop settings: Individual pullups. will be ignored if ENDSTOPPULLUPS is defined
343
+  // #define ENDSTOPPULLUP_XMAX
344
+  // #define ENDSTOPPULLUP_YMAX
345
+  // #define ENDSTOPPULLUP_ZMAX
346
+  // #define ENDSTOPPULLUP_XMIN
347
+  // #define ENDSTOPPULLUP_YMIN
348
+  // #define ENDSTOPPULLUP_ZMIN
349
+#endif
350
+
351
+#ifdef ENDSTOPPULLUPS
352
+  #define ENDSTOPPULLUP_XMAX
353
+  #define ENDSTOPPULLUP_YMAX
354
+  #define ENDSTOPPULLUP_ZMAX
355
+  #define ENDSTOPPULLUP_XMIN
356
+  #define ENDSTOPPULLUP_YMIN
357
+  #define ENDSTOPPULLUP_ZMIN
358
+#endif
359
+
360
+// The pullups are needed if you directly connect a mechanical endswitch between the signal and ground pins.
361
+const bool X_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
362
+const bool Y_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
363
+const bool Z_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
364
+const bool X_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
365
+const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
366
+const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
367
+//#define DISABLE_MAX_ENDSTOPS
368
+//#define DISABLE_MIN_ENDSTOPS // Deltas only use min endstops for probing
369
+
370
+// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
371
+#define X_ENABLE_ON 0
372
+#define Y_ENABLE_ON 0
373
+#define Z_ENABLE_ON 0
374
+#define E_ENABLE_ON 0 // For all extruders
375
+
376
+// Disables axis when it's not being used.
377
+#define DISABLE_X false
378
+#define DISABLE_Y false
379
+#define DISABLE_Z false
380
+#define DISABLE_E false // For all extruders
381
+#define DISABLE_INACTIVE_EXTRUDER true //disable only inactive extruders and keep active extruder enabled
382
+
383
+#define INVERT_X_DIR false // DELTA does not invert
384
+#define INVERT_Y_DIR false
385
+#define INVERT_Z_DIR false
386
+
387
+#define INVERT_E0_DIR false   // for direct drive extruder v9 set to true, for geared extruder set to false
388
+#define INVERT_E1_DIR false   // for direct drive extruder v9 set to true, for geared extruder set to false
389
+#define INVERT_E2_DIR false   // for direct drive extruder v9 set to true, for geared extruder set to false
390
+#define INVERT_E3_DIR false   // for direct drive extruder v9 set to true, for geared extruder set to false
391
+
392
+// ENDSTOP SETTINGS:
393
+// Sets direction of endstops when homing; 1=MAX, -1=MIN
394
+// deltas always home to max
395
+#define X_HOME_DIR 1
396
+#define Y_HOME_DIR 1
397
+#define Z_HOME_DIR 1
398
+
399
+#define min_software_endstops true // If true, axis won't move to coordinates less than HOME_POS.
400
+#define max_software_endstops true  // If true, axis won't move to coordinates greater than the defined lengths below.
401
+
402
+// Travel limits after homing (units are in mm)
403
+#define X_MAX_POS DELTA_PRINTABLE_RADIUS
404
+#define X_MIN_POS -DELTA_PRINTABLE_RADIUS
405
+#define Y_MAX_POS DELTA_PRINTABLE_RADIUS
406
+#define Y_MIN_POS -DELTA_PRINTABLE_RADIUS
407
+#define Z_MAX_POS MANUAL_Z_HOME_POS
408
+#define Z_MIN_POS 0
409
+
410
+#define X_MAX_LENGTH (X_MAX_POS - X_MIN_POS)
411
+#define Y_MAX_LENGTH (Y_MAX_POS - Y_MIN_POS)
412
+#define Z_MAX_LENGTH (Z_MAX_POS - Z_MIN_POS)
413
+
414
+
415
+//===========================================================================
416
+//============================= Bed Auto Leveling ===========================
417
+//===========================================================================
418
+
419
+#define ENABLE_AUTO_BED_LEVELING // Delete the comment to enable (remove // at the start of the line)
420
+// Z-Probe Repeatability test is not supported in Deltas yet.
421
+
422
+#ifdef ENABLE_AUTO_BED_LEVELING
423
+
424
+  // Deltas only support grid mode
425
+  #define AUTO_BED_LEVELING_GRID
426
+
427
+  #define DELTA_PROBABLE_RADIUS (DELTA_PRINTABLE_RADIUS - 10)
428
+  #define LEFT_PROBE_BED_POSITION -DELTA_PROBABLE_RADIUS
429
+  #define RIGHT_PROBE_BED_POSITION DELTA_PROBABLE_RADIUS
430
+  #define BACK_PROBE_BED_POSITION DELTA_PROBABLE_RADIUS
431
+  #define FRONT_PROBE_BED_POSITION -DELTA_PROBABLE_RADIUS
432
+
433
+  #define MIN_PROBE_EDGE 10 // The probe square sides can be no smaller than this
434
+
435
+  // Non-linear bed leveling will be used.
436
+  // Compensate by interpolating between the nearest four Z probe values for each point.
437
+  // Useful for deltas where the print surface may appear like a bowl or dome shape.
438
+  // Works best with ACCURATE_BED_LEVELING_POINTS 5 or higher.
439
+  #define AUTO_BED_LEVELING_GRID_POINTS 9
440
+
441
+  // Offsets to the probe relative to the extruder tip (Hotend - Probe)
442
+  // X and Y offsets must be integers
443
+  #define X_PROBE_OFFSET_FROM_EXTRUDER 0     // -left  +right
444
+  #define Y_PROBE_OFFSET_FROM_EXTRUDER -10   // -front +behind
445
+  #define Z_PROBE_OFFSET_FROM_EXTRUDER -3.5  // -below (always!)
446
+
447
+  #define Z_RAISE_BEFORE_HOMING 15      // (in mm) Raise Z before homing (G28) for Probe Clearance.
448
+                                        // Be sure you have this distance over your Z_MAX_POS in case
449
+
450
+  #define XY_TRAVEL_SPEED 4000         // X and Y axis travel speed between probes, in mm/min
451
+
452
+  #define Z_RAISE_BEFORE_PROBING 15   //How much the extruder will be raised before traveling to the first probing point.
453
+  #define Z_RAISE_BETWEEN_PROBINGS 5  //How much the extruder will be raised when traveling from between next probing points
454
+  #define Z_RAISE_AFTER_PROBING 50    //How much the extruder will be raised after the last probing point.
455
+
456
+  // Allen key retractable z-probe as seen on many Kossel delta printers - http://reprap.org/wiki/Kossel#Automatic_bed_leveling_probe
457
+  // Deploys by touching z-axis belt. Retracts by pushing the probe down. Uses Z_MIN_PIN.
458
+  #define Z_PROBE_ALLEN_KEY
459
+  #ifdef Z_PROBE_ALLEN_KEY
460
+    #define Z_PROBE_ALLEN_KEY_DEPLOY_X 30
461
+    #define Z_PROBE_ALLEN_KEY_DEPLOY_Y DELTA_PRINTABLE_RADIUS
462
+    #define Z_PROBE_ALLEN_KEY_DEPLOY_Z 100
463
+
464
+    #define Z_PROBE_ALLEN_KEY_RETRACT_X     -64
465
+    #define Z_PROBE_ALLEN_KEY_RETRACT_Y     56
466
+    #define Z_PROBE_ALLEN_KEY_RETRACT_Z     23
467
+    #define Z_PROBE_ALLEN_KEY_RETRACT_DEPTH 20
468
+  #endif
469
+
470
+  //If defined, the Probe servo will be turned on only during movement and then turned off to avoid jerk
471
+  //The value is the delay to turn the servo off after powered on - depends on the servo speed; 300ms is good value, but you can try lower it.
472
+  // You MUST HAVE the SERVO_ENDSTOPS defined to use here a value higher than zero otherwise your code will not compile.
473
+
474
+//  #define PROBE_SERVO_DEACTIVATION_DELAY 300
475
+
476
+
477
+//If you have enabled the Bed Auto Leveling and are using the same Z Probe for Z Homing,
478
+//it is highly recommended you let this Z_SAFE_HOMING enabled!!!
479
+
480
+  #define Z_SAFE_HOMING   // This feature is meant to avoid Z homing with probe outside the bed area.
481
+                          // When defined, it will:
482
+                          // - Allow Z homing only after X and Y homing AND stepper drivers still enabled
483
+                          // - If stepper drivers timeout, it will need X and Y homing again before Z homing
484
+                          // - Position the probe in a defined XY point before Z Homing when homing all axis (G28)
485
+                          // - Block Z homing only when the probe is outside bed area.
486
+
487
+  #ifdef Z_SAFE_HOMING
488
+
489
+    #define Z_SAFE_HOMING_X_POINT (X_MAX_LENGTH/2)    // X point for Z homing when homing all axis (G28)
490
+    #define Z_SAFE_HOMING_Y_POINT (Y_MAX_LENGTH/2)    // Y point for Z homing when homing all axis (G28)
491
+
492
+  #endif
493
+
494
+#endif // ENABLE_AUTO_BED_LEVELING
495
+
496
+
497
+
498
+// The position of the homing switches
499
+#define MANUAL_HOME_POSITIONS  // If defined, MANUAL_*_HOME_POS below will be used
500
+#define BED_CENTER_AT_0_0  // If defined, the center of the bed is at (X=0, Y=0)
501
+
502
+//Manual homing switch locations:
503
+// For deltabots this means top and center of the Cartesian print volume.
504
+#define MANUAL_X_HOME_POS 0
505
+#define MANUAL_Y_HOME_POS 0
506
+#define MANUAL_Z_HOME_POS 250 // For delta: Distance between nozzle and print surface after homing.
507
+
508
+//// MOVEMENT SETTINGS
509
+#define NUM_AXIS 4 // The axis order in all axis related arrays is X, Y, Z, E
510
+
511
+// delta homing speeds must be the same on xyz
512
+#define HOMING_FEEDRATE {200*60, 200*60, 200*60, 0}  // set the homing speeds (mm/min)
513
+
514
+// default settings
515
+// delta speeds must be the same on xyz
516
+#define DEFAULT_AXIS_STEPS_PER_UNIT   {80, 80, 80, 760*1.1}  // default steps per unit for Kossel (GT2, 20 tooth)
517
+#define DEFAULT_MAX_FEEDRATE          {500, 500, 500, 25}    // (mm/sec)
518
+#define DEFAULT_MAX_ACCELERATION      {9000,9000,9000,10000}    // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for skeinforge 40+, for older versions raise them a lot.
519
+
520
+#define DEFAULT_ACCELERATION          3000    // X, Y, Z and E max acceleration in mm/s^2 for printing moves
521
+#define DEFAULT_RETRACT_ACCELERATION  3000   // X, Y, Z and E max acceleration in mm/s^2 for retracts
522
+#define DEFAULT_TRAVEL_ACCELERATION   3000    // X, Y, Z acceleration in mm/s^2 for travel (non printing) moves
523
+
524
+// Offset of the extruders (uncomment if using more than one and relying on firmware to position when changing).
525
+// The offset has to be X=0, Y=0 for the extruder 0 hotend (default extruder).
526
+// For the other hotends it is their distance from the extruder 0 hotend.
527
+// #define EXTRUDER_OFFSET_X {0.0, 20.00} // (in mm) for each extruder, offset of the hotend on the X axis
528
+// #define EXTRUDER_OFFSET_Y {0.0, 5.00}  // (in mm) for each extruder, offset of the hotend on the Y axis
529
+
530
+// The speed change that does not require acceleration (i.e. the software might assume it can be done instantaneously)
531
+#define DEFAULT_XYJERK                20.0    // (mm/sec)
532
+#define DEFAULT_ZJERK                 20.0    // (mm/sec) Must be same as XY for delta
533
+#define DEFAULT_EJERK                 5.0    // (mm/sec)
534
+
535
+
536
+//=============================================================================
537
+//============================= Additional Features ===========================
538
+//=============================================================================
539
+
540
+// Custom M code points
541
+#define CUSTOM_M_CODES
542
+#ifdef CUSTOM_M_CODES
543
+  #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851
544
+  #define Z_PROBE_OFFSET_RANGE_MIN -15
545
+  #define Z_PROBE_OFFSET_RANGE_MAX -5
546
+#endif
547
+
548
+
549
+// EEPROM
550
+// The microcontroller can store settings in the EEPROM, e.g. max velocity...
551
+// M500 - stores parameters in EEPROM
552
+// M501 - reads parameters from EEPROM (if you need reset them after you changed them temporarily).
553
+// M502 - reverts to the default "factory settings".  You still need to store them in EEPROM afterwards if you want to.
554
+//define this to enable EEPROM support
555
+//#define EEPROM_SETTINGS
556
+//to disable EEPROM Serial responses and decrease program space by ~1700 byte: comment this out:
557
+// please keep turned on if you can.
558
+//#define EEPROM_CHITCHAT
559
+
560
+// Preheat Constants
561
+#define PLA_PREHEAT_HOTEND_TEMP 180
562
+#define PLA_PREHEAT_HPB_TEMP 70
563
+#define PLA_PREHEAT_FAN_SPEED 255   // Insert Value between 0 and 255
564
+
565
+#define ABS_PREHEAT_HOTEND_TEMP 240
566
+#define ABS_PREHEAT_HPB_TEMP 100
567
+#define ABS_PREHEAT_FAN_SPEED 255   // Insert Value between 0 and 255
568
+
569
+//==============================LCD and SD support=============================
570
+
571
+// Define your display language below. Replace (en) with your language code and uncomment.
572
+// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, test
573
+// See also language.h
574
+#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en)
575
+
576
+// Chose ONE of the next three charsets. This has to match your hardware. In case of a full graphic display this information is not important.
577
+// To find out what type you have - compile with (test) - upload - click to get the menu. You'll see two typical lines from the upper half of the charset.
578
+// See also documentation/LCDLanguageFont.md
579
+  #define DISPLAY_CHARSET_HD44780_JAPAN        // this is the most common hardware
580
+  //#define DISPLAY_CHARSET_HD44780_WESTERN
581
+  //#define DISPLAY_CHARSET_HD44780_CYRILLIC
582
+
583
+//#define ULTRA_LCD  //general LCD support, also 16x2
584
+//#define DOGLCD  // Support for SPI LCD 128x64 (Controller ST7565R graphic Display Family)
585
+//#define SDSUPPORT // Enable SD Card Support in Hardware Console
586
+//#define SDSLOW // Use slower SD transfer mode (not normally needed - uncomment if you're getting volume init error)
587
+//#define SD_CHECK_AND_RETRY // Use CRC checks and retries on the SD communication
588
+//#define ENCODER_PULSES_PER_STEP 1 // Increase if you have a high resolution encoder
589
+//#define ENCODER_STEPS_PER_MENU_ITEM 5 // Set according to ENCODER_PULSES_PER_STEP or your liking
590
+//#define ULTIMAKERCONTROLLER //as available from the Ultimaker online store.
591
+//#define ULTIPANEL  //the UltiPanel as on Thingiverse
592
+//#define LCD_FEEDBACK_FREQUENCY_HZ 1000	// this is the tone frequency the buzzer plays when on UI feedback. ie Screen Click
593
+//#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 100 // the duration the buzzer plays the UI feedback sound. ie Screen Click
594
+
595
+// PanelOne from T3P3 (via RAMPS 1.4 AUX2/AUX3)
596
+// http://reprap.org/wiki/PanelOne
597
+#define PANEL_ONE
598
+
599
+// The MaKr3d Makr-Panel with graphic controller and SD support
600
+// http://reprap.org/wiki/MaKr3d_MaKrPanel
601
+//#define MAKRPANEL
602
+
603
+// The Panucatt Devices Viki 2.0 and mini Viki with Graphic LCD
604
+// http://panucatt.com
605
+// ==> REMEMBER TO INSTALL U8glib to your ARDUINO library folder: http://code.google.com/p/u8glib/wiki/u8glib
606
+//#define VIKI2
607
+//#define miniVIKI
608
+
609
+// The RepRapDiscount Smart Controller (white PCB)
610
+// http://reprap.org/wiki/RepRapDiscount_Smart_Controller
611
+//#define REPRAP_DISCOUNT_SMART_CONTROLLER
612
+
613
+// The GADGETS3D G3D LCD/SD Controller (blue PCB)
614
+// http://reprap.org/wiki/RAMPS_1.3/1.4_GADGETS3D_Shield_with_Panel
615
+//#define G3D_PANEL
616
+
617
+// The RepRapDiscount FULL GRAPHIC Smart Controller (quadratic white PCB)
618
+// http://reprap.org/wiki/RepRapDiscount_Full_Graphic_Smart_Controller
619
+//
620
+// ==> REMEMBER TO INSTALL U8glib to your ARDUINO library folder: http://code.google.com/p/u8glib/wiki/u8glib
621
+//#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
622
+
623
+// The RepRapWorld REPRAPWORLD_KEYPAD v1.1
624
+// http://reprapworld.com/?products_details&products_id=202&cPath=1591_1626
625
+//#define REPRAPWORLD_KEYPAD
626
+//#define REPRAPWORLD_KEYPAD_MOVE_STEP 10.0 // how much should be moved when a key is pressed, eg 10.0 means 10mm per click
627
+
628
+// The Elefu RA Board Control Panel
629
+// http://www.elefu.com/index.php?route=product/product&product_id=53
630
+// REMEMBER TO INSTALL LiquidCrystal_I2C.h in your ARDUINO library folder: https://github.com/kiyoshigawa/LiquidCrystal_I2C
631
+//#define RA_CONTROL_PANEL
632
+
633
+// Delta calibration menu
634
+// uncomment to add three points calibration menu option.
635
+// See http://minow.blogspot.com/index.html#4918805519571907051
636
+// If needed, adjust the X, Y, Z calibration coordinates
637
+// in ultralcd.cpp@lcd_delta_calibrate_menu()
638
+// #define DELTA_CALIBRATION_MENU
639
+
640
+//automatic expansion
641
+#if defined (MAKRPANEL)
642
+ #define DOGLCD
643
+ #define SDSUPPORT
644
+ #define ULTIPANEL
645
+ #define NEWPANEL
646
+ #define DEFAULT_LCD_CONTRAST 17
647
+#endif
648
+
649
+#if defined(miniVIKI) || defined(VIKI2)
650
+ #define ULTRA_LCD  //general LCD support, also 16x2
651
+ #define DOGLCD  // Support for SPI LCD 128x64 (Controller ST7565R graphic Display Family)
652
+ #define ULTIMAKERCONTROLLER //as available from the Ultimaker online store.
653
+
654
+  #ifdef miniVIKI
655
+   #define DEFAULT_LCD_CONTRAST 95
656
+  #else
657
+   #define DEFAULT_LCD_CONTRAST 40
658
+  #endif
659
+
660
+ #define ENCODER_PULSES_PER_STEP 4
661
+ #define ENCODER_STEPS_PER_MENU_ITEM 1
662
+#endif
663
+
664
+#if defined (PANEL_ONE)
665
+ #define SDSUPPORT
666
+ #define ULTIMAKERCONTROLLER
667
+#endif
668
+
669
+#if defined (REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER)
670
+ #define DOGLCD
671
+ #define U8GLIB_ST7920
672
+ #define REPRAP_DISCOUNT_SMART_CONTROLLER
673
+#endif
674
+
675
+#if defined(ULTIMAKERCONTROLLER) || defined(REPRAP_DISCOUNT_SMART_CONTROLLER) || defined(G3D_PANEL)
676
+ #define ULTIPANEL
677
+ #define NEWPANEL
678
+#endif
679
+
680
+#if defined(REPRAPWORLD_KEYPAD)
681
+  #define NEWPANEL
682
+  #define ULTIPANEL
683
+#endif
684
+#if defined(RA_CONTROL_PANEL)
685
+ #define ULTIPANEL
686
+ #define NEWPANEL
687
+ #define LCD_I2C_TYPE_PCA8574
688
+ #define LCD_I2C_ADDRESS 0x27   // I2C Address of the port expander
689
+#endif
690
+
691
+//I2C PANELS
692
+
693
+//#define LCD_I2C_SAINSMART_YWROBOT
694
+#ifdef LCD_I2C_SAINSMART_YWROBOT
695
+  // This uses the LiquidCrystal_I2C library ( https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/Home )
696
+  // Make sure it is placed in the Arduino libraries directory.
697
+  #define LCD_I2C_TYPE_PCF8575
698
+  #define LCD_I2C_ADDRESS 0x27   // I2C Address of the port expander
699
+  #define NEWPANEL
700
+  #define ULTIPANEL
701
+#endif
702
+
703
+// PANELOLU2 LCD with status LEDs, separate encoder and click inputs
704
+//#define LCD_I2C_PANELOLU2
705
+#ifdef LCD_I2C_PANELOLU2
706
+  // This uses the LiquidTWI2 library v1.2.3 or later ( https://github.com/lincomatic/LiquidTWI2 )
707
+  // Make sure the LiquidTWI2 directory is placed in the Arduino or Sketchbook libraries subdirectory.
708
+  // (v1.2.3 no longer requires you to define PANELOLU in the LiquidTWI2.h library header file)
709
+  // Note: The PANELOLU2 encoder click input can either be directly connected to a pin
710
+  //       (if BTN_ENC defined to != -1) or read through I2C (when BTN_ENC == -1).
711
+  #define LCD_I2C_TYPE_MCP23017
712
+  #define LCD_I2C_ADDRESS 0x20 // I2C Address of the port expander
713
+  #define LCD_USE_I2C_BUZZER //comment out to disable buzzer on LCD
714
+  #define NEWPANEL
715
+  #define ULTIPANEL
716
+
717
+  #ifndef ENCODER_PULSES_PER_STEP
718
+	#define ENCODER_PULSES_PER_STEP 4
719
+  #endif
720
+
721
+  #ifndef ENCODER_STEPS_PER_MENU_ITEM
722
+	#define ENCODER_STEPS_PER_MENU_ITEM 1
723
+  #endif
724
+
725
+
726
+  #ifdef LCD_USE_I2C_BUZZER
727
+	#define LCD_FEEDBACK_FREQUENCY_HZ 1000
728
+	#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 100
729
+  #endif
730
+
731
+#endif
732
+
733
+// Panucatt VIKI LCD with status LEDs, integrated click & L/R/U/P buttons, separate encoder inputs
734
+//#define LCD_I2C_VIKI
735
+#ifdef LCD_I2C_VIKI
736
+  // This uses the LiquidTWI2 library v1.2.3 or later ( https://github.com/lincomatic/LiquidTWI2 )
737
+  // Make sure the LiquidTWI2 directory is placed in the Arduino or Sketchbook libraries subdirectory.
738
+  // Note: The pause/stop/resume LCD button pin should be connected to the Arduino
739
+  //       BTN_ENC pin (or set BTN_ENC to -1 if not used)
740
+  #define LCD_I2C_TYPE_MCP23017
741
+  #define LCD_I2C_ADDRESS 0x20 // I2C Address of the port expander
742
+  #define LCD_USE_I2C_BUZZER //comment out to disable buzzer on LCD (requires LiquidTWI2 v1.2.3 or later)
743
+  #define NEWPANEL
744
+  #define ULTIPANEL
745
+#endif
746
+
747
+// Shift register panels
748
+// ---------------------
749
+// 2 wire Non-latching LCD SR from:
750
+// https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/schematics#!shiftregister-connection
751
+
752
+//#define SAV_3DLCD
753
+#ifdef SAV_3DLCD
754
+   #define SR_LCD_2W_NL    // Non latching 2 wire shiftregister
755
+   #define NEWPANEL
756
+   #define ULTIPANEL
757
+#endif
758
+
759
+
760
+#ifdef ULTIPANEL
761
+//  #define NEWPANEL  //enable this if you have a click-encoder panel
762
+  #define SDSUPPORT
763
+  #define ULTRA_LCD
764
+  #ifdef DOGLCD // Change number of lines to match the DOG graphic display
765
+    #define LCD_WIDTH 22
766
+    #define LCD_HEIGHT 5
767
+  #else
768
+    #define LCD_WIDTH 20
769
+    #define LCD_HEIGHT 4
770
+  #endif
771
+#else //no panel but just LCD
772
+  #ifdef ULTRA_LCD
773
+  #ifdef DOGLCD // Change number of lines to match the 128x64 graphics display
774
+    #define LCD_WIDTH 22
775
+    #define LCD_HEIGHT 5
776
+  #else
777
+    #define LCD_WIDTH 16
778
+    #define LCD_HEIGHT 2
779
+  #endif
780
+  #endif
781
+#endif
782
+
783
+// default LCD contrast for dogm-like LCD displays
784
+#ifdef DOGLCD
785
+# ifndef DEFAULT_LCD_CONTRAST
786
+#  define DEFAULT_LCD_CONTRAST 32
787
+# endif
788
+#endif
789
+
790
+// Increase the FAN pwm frequency. Removes the PWM noise but increases heating in the FET/Arduino
791
+//#define FAST_PWM_FAN
792
+
793
+// Temperature status LEDs that display the hotend and bet temperature.
794
+// If all hotends and bed temperature and temperature setpoint are < 54C then the BLUE led is on.
795
+// Otherwise the RED led is on. There is 1C hysteresis.
796
+//#define TEMP_STAT_LEDS
797
+
798
+// Use software PWM to drive the fan, as for the heaters. This uses a very low frequency
799
+// which is not ass annoying as with the hardware PWM. On the other hand, if this frequency
800
+// is too low, you should also increment SOFT_PWM_SCALE.
801
+//#define FAN_SOFT_PWM
802
+
803
+// Incrementing this by 1 will double the software PWM frequency,
804
+// affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
805
+// However, control resolution will be halved for each increment;
806
+// at zero value, there are 128 effective control positions.
807
+#define SOFT_PWM_SCALE 0
808
+
809
+// M240  Triggers a camera by emulating a Canon RC-1 Remote
810
+// Data from: http://www.doc-diy.net/photo/rc-1_hacked/
811
+// #define PHOTOGRAPH_PIN     23
812
+
813
+// SF send wrong arc g-codes when using Arc Point as fillet procedure
814
+//#define SF_ARC_FIX
815
+
816
+// Support for the BariCUDA Paste Extruder.
817
+//#define BARICUDA
818
+
819
+//define BlinkM/CyzRgb Support
820
+//#define BLINKM
821
+
822
+/*********************************************************************\
823
+* R/C SERVO support
824
+* Sponsored by TrinityLabs, Reworked by codexmas
825
+**********************************************************************/
826
+
827
+// Number of servos
828
+//
829
+// If you select a configuration below, this will receive a default value and does not need to be set manually
830
+// set it manually if you have more servos than extruders and wish to manually control some
831
+// leaving it undefined or defining as 0 will disable the servo subsystem
832
+// If unsure, leave commented / disabled
833
+//
834
+//#define NUM_SERVOS 3 // Servo index starts with 0 for M280 command
835
+
836
+// Servo Endstops
837
+//
838
+// This allows for servo actuated endstops, primary usage is for the Z Axis to eliminate calibration or bed height changes.
839
+// Use M206 command to correct for switch height offset to actual nozzle height. Store that setting with M500.
840
+//
841
+//#define SERVO_ENDSTOPS {-1, -1, 0} // Servo index for X, Y, Z. Disable with -1
842
+//#define SERVO_ENDSTOP_ANGLES {0,0, 0,0, 70,0} // X,Y,Z Axis Extend and Retract angles
843
+
844
+/**********************************************************************\
845
+ * Support for a filament diameter sensor
846
+ * Also allows adjustment of diameter at print time (vs  at slicing)
847
+ * Single extruder only at this point (extruder 0)
848
+ *
849
+ * Motherboards
850
+ * 34 - RAMPS1.4 - uses Analog input 5 on the AUX2 connector
851
+ * 81 - Printrboard - Uses Analog input 2 on the Exp1 connector (version B,C,D,E)
852
+ * 301 - Rambo  - uses Analog input 3
853
+ * Note may require analog pins to be defined for different motherboards
854
+ **********************************************************************/
855
+// Uncomment below to enable
856
+//#define FILAMENT_SENSOR
857
+
858
+#define FILAMENT_SENSOR_EXTRUDER_NUM	0  //The number of the extruder that has the filament sensor (0,1,2)
859
+#define MEASUREMENT_DELAY_CM			14  //measurement delay in cm.  This is the distance from filament sensor to middle of barrel
860
+
861
+#define DEFAULT_NOMINAL_FILAMENT_DIA  3.0  //Enter the diameter (in mm) of the filament generally used (3.0 mm or 1.75 mm) - this is then used in the slicer software.  Used for sensor reading validation
862
+#define MEASURED_UPPER_LIMIT          3.30  //upper limit factor used for sensor reading validation in mm
863
+#define MEASURED_LOWER_LIMIT          1.90  //lower limit factor for sensor reading validation in mm
864
+#define MAX_MEASUREMENT_DELAY			20  //delay buffer size in bytes (1 byte = 1cm)- limits maximum measurement delay allowable (must be larger than MEASUREMENT_DELAY_CM  and lower number saves RAM)
865
+
866
+//defines used in the code
867
+#define DEFAULT_MEASURED_FILAMENT_DIA  DEFAULT_NOMINAL_FILAMENT_DIA  //set measured to nominal initially 
868
+
869
+//When using an LCD, uncomment the line below to display the Filament sensor data on the last line instead of status.  Status will appear for 5 sec.
870
+//#define FILAMENT_LCD_DISPLAY
871
+
872
+
873
+
874
+
875
+
876
+
877
+#include "Configuration_adv.h"
878
+#include "thermistortables.h"
879
+
880
+#endif //__CONFIGURATION_H

+ 547
- 0
Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h View File

1
+#ifndef CONFIGURATION_ADV_H
2
+#define CONFIGURATION_ADV_H
3
+
4
+//===========================================================================
5
+//=============================Thermal Settings  ============================
6
+//===========================================================================
7
+
8
+#ifdef BED_LIMIT_SWITCHING
9
+  #define BED_HYSTERESIS 2 //only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS
10
+#endif
11
+#define BED_CHECK_INTERVAL 5000 //ms between checks in bang-bang control
12
+
13
+//// Heating sanity check:
14
+// This waits for the watchperiod in milliseconds whenever an M104 or M109 increases the target temperature
15
+// If the temperature has not increased at the end of that period, the target temperature is set to zero. 
16
+// It can be reset with another M104/M109. This check is also only triggered if the target temperature and the current temperature
17
+//  differ by at least 2x WATCH_TEMP_INCREASE
18
+//#define WATCH_TEMP_PERIOD 40000 //40 seconds
19
+//#define WATCH_TEMP_INCREASE 10  //Heat up at least 10 degree in 20 seconds
20
+
21
+#ifdef PIDTEMP
22
+  // this adds an experimental additional term to the heatingpower, proportional to the extrusion speed.
23
+  // if Kc is choosen well, the additional required power due to increased melting should be compensated.
24
+  #define PID_ADD_EXTRUSION_RATE  
25
+  #ifdef PID_ADD_EXTRUSION_RATE
26
+    #define  DEFAULT_Kc (1) //heatingpower=Kc*(e_speed)
27
+  #endif
28
+#endif
29
+
30
+
31
+//automatic temperature: The hot end target temperature is calculated by all the buffered lines of gcode.
32
+//The maximum buffered steps/sec of the extruder motor are called "se".
33
+//You enter the autotemp mode by a M109 S<mintemp> T<maxtemp> F<factor>
34
+// the target temperature is set to mintemp+factor*se[steps/sec] and limited by mintemp and maxtemp
35
+// you exit the value by any M109 without F*
36
+// Also, if the temperature is set to a value <mintemp, it is not changed by autotemp.
37
+// on an ultimaker, some initial testing worked with M109 S215 B260 F1 in the start.gcode
38
+#define AUTOTEMP
39
+#ifdef AUTOTEMP
40
+  #define AUTOTEMP_OLDWEIGHT 0.98
41
+#endif
42
+
43
+//Show Temperature ADC value
44
+//The M105 command return, besides traditional information, the ADC value read from temperature sensors.
45
+//#define SHOW_TEMP_ADC_VALUES
46
+
47
+//  extruder run-out prevention. 
48
+//if the machine is idle, and the temperature over MINTEMP, every couple of SECONDS some filament is extruded
49
+//#define EXTRUDER_RUNOUT_PREVENT  
50
+#define EXTRUDER_RUNOUT_MINTEMP 190  
51
+#define EXTRUDER_RUNOUT_SECONDS 30.
52
+#define EXTRUDER_RUNOUT_ESTEPS 14. //mm filament
53
+#define EXTRUDER_RUNOUT_SPEED 1500.  //extrusion speed
54
+#define EXTRUDER_RUNOUT_EXTRUDE 100
55
+
56
+//These defines help to calibrate the AD595 sensor in case you get wrong temperature measurements.
57
+//The measured temperature is defined as "actualTemp = (measuredTemp * TEMP_SENSOR_AD595_GAIN) + TEMP_SENSOR_AD595_OFFSET"
58
+#define TEMP_SENSOR_AD595_OFFSET 0.0
59
+#define TEMP_SENSOR_AD595_GAIN   1.0
60
+
61
+//This is for controlling a fan to cool down the stepper drivers
62
+//it will turn on when any driver is enabled
63
+//and turn off after the set amount of seconds from last driver being disabled again
64
+#define CONTROLLERFAN_PIN -1 //Pin used for the fan to cool controller (-1 to disable)
65
+#define CONTROLLERFAN_SECS 60 //How many seconds, after all motors were disabled, the fan should run
66
+#define CONTROLLERFAN_SPEED 255  // == full speed
67
+
68
+// When first starting the main fan, run it at full speed for the
69
+// given number of milliseconds.  This gets the fan spinning reliably
70
+// before setting a PWM value. (Does not work with software PWM for fan on Sanguinololu)
71
+//#define FAN_KICKSTART_TIME 100
72
+
73
+// Extruder cooling fans
74
+// Configure fan pin outputs to automatically turn on/off when the associated
75
+// extruder temperature is above/below EXTRUDER_AUTO_FAN_TEMPERATURE.
76
+// Multiple extruders can be assigned to the same pin in which case 
77
+// the fan will turn on when any selected extruder is above the threshold.
78
+#define EXTRUDER_0_AUTO_FAN_PIN   -1
79
+#define EXTRUDER_1_AUTO_FAN_PIN   -1
80
+#define EXTRUDER_2_AUTO_FAN_PIN   -1
81
+#define EXTRUDER_3_AUTO_FAN_PIN   -1
82
+#define EXTRUDER_AUTO_FAN_TEMPERATURE 50
83
+#define EXTRUDER_AUTO_FAN_SPEED   255  // == full speed
84
+
85
+
86
+//===========================================================================
87
+//=============================Mechanical Settings===========================
88
+//===========================================================================
89
+
90
+#define ENDSTOPS_ONLY_FOR_HOMING // If defined the endstops will only be used for homing
91
+
92
+
93
+//// AUTOSET LOCATIONS OF LIMIT SWITCHES
94
+//// Added by ZetaPhoenix 09-15-2012
95
+#ifdef MANUAL_HOME_POSITIONS  // Use manual limit switch locations
96
+  #define X_HOME_POS MANUAL_X_HOME_POS
97
+  #define Y_HOME_POS MANUAL_Y_HOME_POS
98
+  #define Z_HOME_POS MANUAL_Z_HOME_POS
99
+#else //Set min/max homing switch positions based upon homing direction and min/max travel limits
100
+  //X axis
101
+  #if X_HOME_DIR == -1
102
+    #ifdef BED_CENTER_AT_0_0
103
+      #define X_HOME_POS X_MAX_LENGTH * -0.5
104
+    #else
105
+      #define X_HOME_POS X_MIN_POS
106
+    #endif //BED_CENTER_AT_0_0
107
+  #else    
108
+    #ifdef BED_CENTER_AT_0_0
109
+      #define X_HOME_POS X_MAX_LENGTH * 0.5
110
+    #else
111
+      #define X_HOME_POS X_MAX_POS
112
+    #endif //BED_CENTER_AT_0_0
113
+  #endif //X_HOME_DIR == -1
114
+  
115
+  //Y axis
116
+  #if Y_HOME_DIR == -1
117
+    #ifdef BED_CENTER_AT_0_0
118
+      #define Y_HOME_POS Y_MAX_LENGTH * -0.5
119
+    #else
120
+      #define Y_HOME_POS Y_MIN_POS
121
+    #endif //BED_CENTER_AT_0_0
122
+  #else    
123
+    #ifdef BED_CENTER_AT_0_0
124
+      #define Y_HOME_POS Y_MAX_LENGTH * 0.5
125
+    #else
126
+      #define Y_HOME_POS Y_MAX_POS
127
+    #endif //BED_CENTER_AT_0_0
128
+  #endif //Y_HOME_DIR == -1
129
+  
130
+  // Z axis
131
+  #if Z_HOME_DIR == -1 //BED_CENTER_AT_0_0 not used
132
+    #define Z_HOME_POS Z_MIN_POS
133
+  #else    
134
+    #define Z_HOME_POS Z_MAX_POS
135
+  #endif //Z_HOME_DIR == -1
136
+#endif //End auto min/max positions
137
+//END AUTOSET LOCATIONS OF LIMIT SWITCHES -ZP
138
+
139
+
140
+//#define Z_LATE_ENABLE // Enable Z the last moment. Needed if your Z driver overheats.
141
+
142
+// A single Z stepper driver is usually used to drive 2 stepper motors.
143
+// Uncomment this define to utilize a separate stepper driver for each Z axis motor.
144
+// Only a few motherboards support this, like RAMPS, which have dual extruder support (the 2nd, often unused, extruder driver is used
145
+// to control the 2nd Z axis stepper motor). The pins are currently only defined for a RAMPS motherboards.
146
+// On a RAMPS (or other 5 driver) motherboard, using this feature will limit you to using 1 extruder.
147
+//#define Z_DUAL_STEPPER_DRIVERS
148
+
149
+#ifdef Z_DUAL_STEPPER_DRIVERS
150
+  #undef EXTRUDERS
151
+  #define EXTRUDERS 1
152
+#endif
153
+
154
+// Same again but for Y Axis.
155
+//#define Y_DUAL_STEPPER_DRIVERS
156
+
157
+// Define if the two Y drives need to rotate in opposite directions
158
+#define INVERT_Y2_VS_Y_DIR true
159
+
160
+#ifdef Y_DUAL_STEPPER_DRIVERS
161
+  #undef EXTRUDERS
162
+  #define EXTRUDERS 1
163
+#endif
164
+
165
+#if defined (Z_DUAL_STEPPER_DRIVERS) && defined (Y_DUAL_STEPPER_DRIVERS)
166
+  #error "You cannot have dual drivers for both Y and Z"
167
+#endif
168
+
169
+// Enable this for dual x-carriage printers. 
170
+// A dual x-carriage design has the advantage that the inactive extruder can be parked which
171
+// prevents hot-end ooze contaminating the print. It also reduces the weight of each x-carriage
172
+// allowing faster printing speeds.
173
+//#define DUAL_X_CARRIAGE
174
+#ifdef DUAL_X_CARRIAGE
175
+// Configuration for second X-carriage
176
+// Note: the first x-carriage is defined as the x-carriage which homes to the minimum endstop;
177
+// the second x-carriage always homes to the maximum endstop.
178
+#define X2_MIN_POS 80     // set minimum to ensure second x-carriage doesn't hit the parked first X-carriage
179
+#define X2_MAX_POS 353    // set maximum to the distance between toolheads when both heads are homed 
180
+#define X2_HOME_DIR 1     // the second X-carriage always homes to the maximum endstop position
181
+#define X2_HOME_POS X2_MAX_POS // default home position is the maximum carriage position 
182
+    // However: In this mode the EXTRUDER_OFFSET_X value for the second extruder provides a software 
183
+    // override for X2_HOME_POS. This also allow recalibration of the distance between the two endstops
184
+    // without modifying the firmware (through the "M218 T1 X???" command).
185
+    // Remember: you should set the second extruder x-offset to 0 in your slicer.
186
+
187
+// Pins for second x-carriage stepper driver (defined here to avoid further complicating pins.h)
188
+#define X2_ENABLE_PIN 29
189
+#define X2_STEP_PIN 25
190
+#define X2_DIR_PIN 23
191
+
192
+// There are a few selectable movement modes for dual x-carriages using M605 S<mode>
193
+//    Mode 0: Full control. The slicer has full control over both x-carriages and can achieve optimal travel results
194
+//                           as long as it supports dual x-carriages. (M605 S0)
195
+//    Mode 1: Auto-park mode. The firmware will automatically park and unpark the x-carriages on tool changes so
196
+//                           that additional slicer support is not required. (M605 S1)
197
+//    Mode 2: Duplication mode. The firmware will transparently make the second x-carriage and extruder copy all  
198
+//                           actions of the first x-carriage. This allows the printer to print 2 arbitrary items at
199
+//                           once. (2nd extruder x offset and temp offset are set using: M605 S2 [Xnnn] [Rmmm])
200
+
201
+// This is the default power-up mode which can be later using M605. 
202
+#define DEFAULT_DUAL_X_CARRIAGE_MODE 0 
203
+
204
+// Default settings in "Auto-park Mode" 
205
+#define TOOLCHANGE_PARK_ZLIFT   0.2      // the distance to raise Z axis when parking an extruder
206
+#define TOOLCHANGE_UNPARK_ZLIFT 1        // the distance to raise Z axis when unparking an extruder
207
+
208
+// Default x offset in duplication mode (typically set to half print bed width)
209
+#define DEFAULT_DUPLICATION_X_OFFSET 100
210
+
211
+#endif //DUAL_X_CARRIAGE
212
+    
213
+//homing hits the endstop, then retracts by this distance, before it tries to slowly bump again:
214
+#define X_HOME_RETRACT_MM 5 
215
+#define Y_HOME_RETRACT_MM 5 
216
+#define Z_HOME_RETRACT_MM 5 // deltas need the same for all three axis
217
+#define HOMING_BUMP_DIVISOR {10, 10, 20}  // Re-Bump Speed Divisor (Divides the Homing Feedrate)
218
+
219
+//#define QUICK_HOME  //if this is defined, if both x and y are to be homed, a diagonal move will be performed initially.
220
+
221
+#define AXIS_RELATIVE_MODES {false, false, false, false}
222
+
223
+#define MAX_STEP_FREQUENCY 40000 // Max step frequency for Ultimaker (5000 pps / half step)
224
+
225
+//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
226
+#define INVERT_X_STEP_PIN false
227
+#define INVERT_Y_STEP_PIN false
228
+#define INVERT_Z_STEP_PIN false
229
+#define INVERT_E_STEP_PIN false
230
+
231
+//default stepper release if idle. Set to 0 to deactivate.
232
+#define DEFAULT_STEPPER_DEACTIVE_TIME 60
233
+
234
+#define DEFAULT_MINIMUMFEEDRATE       0.0     // minimum feedrate
235
+#define DEFAULT_MINTRAVELFEEDRATE     0.0
236
+
237
+// Feedrates for manual moves along X, Y, Z, E from panel
238
+#ifdef ULTIPANEL
239
+#define MANUAL_FEEDRATE {50*60, 50*60, 4*60, 60}  // set the speeds for manual moves (mm/min)
240
+#endif
241
+
242
+// minimum time in microseconds that a movement needs to take if the buffer is emptied.
243
+#define DEFAULT_MINSEGMENTTIME        20000
244
+
245
+// If defined the movements slow down when the look ahead buffer is only half full
246
+//#define SLOWDOWN
247
+
248
+// Frequency limit
249
+// See nophead's blog for more info
250
+// Not working O
251
+//#define XY_FREQUENCY_LIMIT  15
252
+
253
+// Minimum planner junction speed. Sets the default minimum speed the planner plans for at the end
254
+// of the buffer and all stops. This should not be much greater than zero and should only be changed
255
+// if unwanted behavior is observed on a user's machine when running at very slow speeds.
256
+#define MINIMUM_PLANNER_SPEED 0.05// (mm/sec)
257
+
258
+// MS1 MS2 Stepper Driver Microstepping mode table
259
+#define MICROSTEP1 LOW,LOW
260
+#define MICROSTEP2 HIGH,LOW
261
+#define MICROSTEP4 LOW,HIGH
262
+#define MICROSTEP8 HIGH,HIGH
263
+#define MICROSTEP16 HIGH,HIGH
264
+
265
+// Microstep setting (Only functional when stepper driver microstep pins are connected to MCU.
266
+#define MICROSTEP_MODES {16,16,16,16,16} // [1,2,4,8,16]
267
+
268
+// Motor Current setting (Only functional when motor driver current ref pins are connected to a digital trimpot on supported boards)
269
+#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
270
+
271
+// uncomment to enable an I2C based DIGIPOT like on the Azteeg X3 Pro
272
+//#define DIGIPOT_I2C
273
+// Number of channels available for I2C digipot, For Azteeg X3 Pro we have 8
274
+#define DIGIPOT_I2C_NUM_CHANNELS 8
275
+// actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
276
+#define DIGIPOT_I2C_MOTOR_CURRENTS {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}
277
+
278
+//===========================================================================
279
+//=============================Additional Features===========================
280
+//===========================================================================
281
+
282
+#define ENCODER_RATE_MULTIPLIER         // If defined, certain menu edit operations automatically multiply the steps when the encoder is moved quickly
283
+#define ENCODER_10X_STEPS_PER_SEC 75    // If the encoder steps per sec exceed this value, multiple the steps moved by ten to quickly advance the value
284
+#define ENCODER_100X_STEPS_PER_SEC 160  // If the encoder steps per sec exceed this value, multiple the steps moved by 100 to really quickly advance the value
285
+//#define ENCODER_RATE_MULTIPLIER_DEBUG  // If defined, output the encoder steps per second value
286
+
287
+//#define CHDK 4        //Pin for triggering CHDK to take a picture see how to use it here http://captain-slow.dk/2014/03/09/3d-printing-timelapses/
288
+#define CHDK_DELAY 50 //How long in ms the pin should stay HIGH before going LOW again
289
+
290
+#define SD_FINISHED_STEPPERRELEASE true  //if sd support and the file is finished: disable steppers?
291
+#define SD_FINISHED_RELEASECOMMAND "M84 X Y Z E" // You might want to keep the z enabled so your bed stays in place.
292
+
293
+#define SDCARD_RATHERRECENTFIRST  //reverse file order of sd card menu display. Its sorted practically after the filesystem block order. 
294
+// if a file is deleted, it frees a block. hence, the order is not purely cronological. To still have auto0.g accessible, there is again the option to do that.
295
+// using:
296
+//#define MENU_ADDAUTOSTART
297
+
298
+// Show a progress bar on the LCD when printing from SD
299
+//#define LCD_PROGRESS_BAR
300
+
301
+#ifdef LCD_PROGRESS_BAR
302
+  // Amount of time (ms) to show the bar
303
+  #define PROGRESS_BAR_BAR_TIME 2000
304
+  // Amount of time (ms) to show the status message
305
+  #define PROGRESS_BAR_MSG_TIME 2000
306
+  // Amount of time (ms) to retain the status message (0=forever)
307
+  #define PROGRESS_MSG_EXPIRE   0
308
+  // Enable this to show messages for MSG_TIME then hide them
309
+  //#define PROGRESS_MSG_ONCE
310
+#endif
311
+
312
+// The hardware watchdog should reset the Microcontroller disabling all outputs, in case the firmware gets stuck and doesn't do temperature regulation.
313
+//#define USE_WATCHDOG
314
+
315
+#ifdef USE_WATCHDOG
316
+// If you have a watchdog reboot in an ArduinoMega2560 then the device will hang forever, as a watchdog reset will leave the watchdog on.
317
+// The "WATCHDOG_RESET_MANUAL" goes around this by not using the hardware reset.
318
+//  However, THIS FEATURE IS UNSAFE!, as it will only work if interrupts are disabled. And the code could hang in an interrupt routine with interrupts disabled.
319
+//#define WATCHDOG_RESET_MANUAL
320
+#endif
321
+
322
+// Enable the option to stop SD printing when hitting and endstops, needs to be enabled from the LCD menu when this option is enabled.
323
+//#define ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED
324
+
325
+// Babystepping enables the user to control the axis in tiny amounts, independently from the normal printing process
326
+// it can e.g. be used to change z-positions in the print startup phase in realtime
327
+// does not respect endstops!
328
+//#define BABYSTEPPING
329
+#ifdef BABYSTEPPING
330
+  #define BABYSTEP_XY  //not only z, but also XY in the menu. more clutter, more functions
331
+  #define BABYSTEP_INVERT_Z false  //true for inverse movements in Z
332
+  #define BABYSTEP_Z_MULTIPLICATOR 2 //faster z movements
333
+  
334
+  #ifdef COREXY
335
+    #error BABYSTEPPING not implemented for COREXY yet.
336
+  #endif
337
+
338
+  #ifdef DELTA
339
+    #ifdef BABYSTEP_XY
340
+      #error BABYSTEPPING only implemented for Z axis on deltabots.
341
+    #endif
342
+  #endif
343
+#endif
344
+
345
+// extruder advance constant (s2/mm3)
346
+//
347
+// advance (steps) = STEPS_PER_CUBIC_MM_E * EXTRUDER_ADVANCE_K * cubic mm per second ^ 2
348
+//
349
+// hooke's law says:		force = k * distance
350
+// Bernoulli's principle says:	v ^ 2 / 2 + g . h + pressure / density = constant
351
+// so: v ^ 2 is proportional to number of steps we advance the extruder
352
+//#define ADVANCE
353
+
354
+#ifdef ADVANCE
355
+  #define EXTRUDER_ADVANCE_K .0
356
+
357
+  #define D_FILAMENT 2.85
358
+  #define STEPS_MM_E 836
359
+  #define EXTRUSION_AREA (0.25 * D_FILAMENT * D_FILAMENT * 3.14159)
360
+  #define STEPS_PER_CUBIC_MM_E (axis_steps_per_unit[E_AXIS]/ EXTRUSION_AREA)
361
+
362
+#endif // ADVANCE
363
+
364
+// Arc interpretation settings:
365
+#define MM_PER_ARC_SEGMENT 1
366
+#define N_ARC_CORRECTION 25
367
+
368
+const unsigned int dropsegments=5; //everything with less than this number of steps will be ignored as move and joined with the next movement
369
+
370
+// If you are using a RAMPS board or cheap E-bay purchased boards that do not detect when an SD card is inserted
371
+// You can get round this by connecting a push button or single throw switch to the pin defined as SDCARDCARDDETECT 
372
+// in the pins.h file.  When using a push button pulling the pin to ground this will need inverted.  This setting should
373
+// be commented out otherwise
374
+#define SDCARDDETECTINVERTED 
375
+
376
+#ifdef ULTIPANEL
377
+ #undef SDCARDDETECTINVERTED
378
+#endif
379
+
380
+// Power Signal Control Definitions
381
+// By default use ATX definition
382
+#ifndef POWER_SUPPLY
383
+  #define POWER_SUPPLY 1
384
+#endif
385
+// 1 = ATX
386
+#if (POWER_SUPPLY == 1) 
387
+  #define PS_ON_AWAKE  LOW
388
+  #define PS_ON_ASLEEP HIGH
389
+#endif
390
+// 2 = X-Box 360 203W
391
+#if (POWER_SUPPLY == 2) 
392
+  #define PS_ON_AWAKE  HIGH
393
+  #define PS_ON_ASLEEP LOW
394
+#endif
395
+
396
+// Control heater 0 and heater 1 in parallel.
397
+//#define HEATERS_PARALLEL
398
+
399
+//===========================================================================
400
+//=============================Buffers           ============================
401
+//===========================================================================
402
+
403
+// The number of linear motions that can be in the plan at any give time.  
404
+// THE BLOCK_BUFFER_SIZE NEEDS TO BE A POWER OF 2, i.g. 8,16,32 because shifts and ors are used to do the ringbuffering.
405
+#if defined SDSUPPORT
406
+  #define BLOCK_BUFFER_SIZE 16   // SD,LCD,Buttons take more memory, block buffer needs to be smaller
407
+#else
408
+  #define BLOCK_BUFFER_SIZE 16 // maximize block buffer
409
+#endif
410
+
411
+
412
+//The ASCII buffer for recieving from the serial:
413
+#define MAX_CMD_SIZE 96
414
+#define BUFSIZE 4
415
+
416
+
417
+// Firmware based and LCD controled retract
418
+// M207 and M208 can be used to define parameters for the retraction. 
419
+// The retraction can be called by the slicer using G10 and G11
420
+// until then, intended retractions can be detected by moves that only extrude and the direction. 
421
+// the moves are than replaced by the firmware controlled ones.
422
+
423
+// #define FWRETRACT  //ONLY PARTIALLY TESTED
424
+#ifdef FWRETRACT
425
+  #define MIN_RETRACT 0.1                //minimum extruded mm to accept a automatic gcode retraction attempt
426
+  #define RETRACT_LENGTH 3               //default retract length (positive mm)
427
+  #define RETRACT_LENGTH_SWAP 13         //default swap retract length (positive mm), for extruder change
428
+  #define RETRACT_FEEDRATE 45            //default feedrate for retracting (mm/s)
429
+  #define RETRACT_ZLIFT 0                //default retract Z-lift
430
+  #define RETRACT_RECOVER_LENGTH 0       //default additional recover length (mm, added to retract length when recovering)
431
+  #define RETRACT_RECOVER_LENGTH_SWAP 0  //default additional swap recover length (mm, added to retract length when recovering from extruder change)
432
+  #define RETRACT_RECOVER_FEEDRATE 8     //default feedrate for recovering from retraction (mm/s)
433
+#endif
434
+
435
+//adds support for experimental filament exchange support M600; requires display
436
+#ifdef ULTIPANEL
437
+  #define FILAMENTCHANGEENABLE
438
+  #ifdef FILAMENTCHANGEENABLE
439
+    #define FILAMENTCHANGE_XPOS 3
440
+    #define FILAMENTCHANGE_YPOS 3
441
+    #define FILAMENTCHANGE_ZADD 10
442
+    #define FILAMENTCHANGE_FIRSTRETRACT -2
443
+    #define FILAMENTCHANGE_FINALRETRACT -100
444
+  #endif
445
+#endif
446
+
447
+#ifdef FILAMENTCHANGEENABLE
448
+  #ifdef EXTRUDER_RUNOUT_PREVENT
449
+    #error EXTRUDER_RUNOUT_PREVENT currently incompatible with FILAMENTCHANGE
450
+  #endif 
451
+#endif
452
+ 
453
+//===========================================================================
454
+//=============================  Define Defines  ============================
455
+//===========================================================================
456
+
457
+#if defined (ENABLE_AUTO_BED_LEVELING) && defined (DELTA)
458
+
459
+  #if not defined(AUTO_BED_LEVELING_GRID)
460
+    #error "Only Grid Bed Auto Leveling is supported on Deltas."
461
+  #endif
462
+  
463
+  #if defined(Z_PROBE_SLED)
464
+    #error "You cannot use Z_PROBE_SLED together with DELTA."
465
+  #endif
466
+
467
+  #if defined(Z_PROBE_REPEATABILITY_TEST)
468
+    #error "Z-probe repeatability test is not supported on Deltas yet."
469
+  #endif
470
+
471
+#endif  
472
+
473
+#if defined(Z_PROBE_ALLEN_KEY)
474
+  #if !defined(AUTO_BED_LEVELING_GRID) || !defined(DELTA)
475
+    #error "Invalid use of Z_PROBE_ALLEN_KEY."
476
+  #endif
477
+#endif
478
+
479
+#if EXTRUDERS > 1 && defined TEMP_SENSOR_1_AS_REDUNDANT
480
+  #error "You cannot use TEMP_SENSOR_1_AS_REDUNDANT if EXTRUDERS > 1"
481
+#endif
482
+
483
+#if EXTRUDERS > 1 && defined HEATERS_PARALLEL
484
+  #error "You cannot use HEATERS_PARALLEL if EXTRUDERS > 1"
485
+#endif
486
+
487
+#if TEMP_SENSOR_0 > 0
488
+  #define THERMISTORHEATER_0 TEMP_SENSOR_0
489
+  #define HEATER_0_USES_THERMISTOR
490
+#endif
491
+#if TEMP_SENSOR_1 > 0
492
+  #define THERMISTORHEATER_1 TEMP_SENSOR_1
493
+  #define HEATER_1_USES_THERMISTOR
494
+#endif
495
+#if TEMP_SENSOR_2 > 0
496
+  #define THERMISTORHEATER_2 TEMP_SENSOR_2
497
+  #define HEATER_2_USES_THERMISTOR
498
+#endif
499
+#if TEMP_SENSOR_3 > 0
500
+  #define THERMISTORHEATER_3 TEMP_SENSOR_3
501
+  #define HEATER_3_USES_THERMISTOR
502
+#endif
503
+#if TEMP_SENSOR_BED > 0
504
+  #define THERMISTORBED TEMP_SENSOR_BED
505
+  #define BED_USES_THERMISTOR
506
+#endif
507
+#if TEMP_SENSOR_0 == -1
508
+  #define HEATER_0_USES_AD595
509
+#endif
510
+#if TEMP_SENSOR_1 == -1
511
+  #define HEATER_1_USES_AD595
512
+#endif
513
+#if TEMP_SENSOR_2 == -1
514
+  #define HEATER_2_USES_AD595
515
+#endif
516
+#if TEMP_SENSOR_3 == -1
517
+  #define HEATER_3_USES_AD595
518
+#endif
519
+#if TEMP_SENSOR_BED == -1
520
+  #define BED_USES_AD595
521
+#endif
522
+#if TEMP_SENSOR_0 == -2
523
+  #define HEATER_0_USES_MAX6675
524
+#endif
525
+#if TEMP_SENSOR_0 == 0
526
+  #undef HEATER_0_MINTEMP
527
+  #undef HEATER_0_MAXTEMP
528
+#endif
529
+#if TEMP_SENSOR_1 == 0
530
+  #undef HEATER_1_MINTEMP
531
+  #undef HEATER_1_MAXTEMP
532
+#endif
533
+#if TEMP_SENSOR_2 == 0
534
+  #undef HEATER_2_MINTEMP
535
+  #undef HEATER_2_MAXTEMP
536
+#endif
537
+#if TEMP_SENSOR_3 == 0
538
+  #undef HEATER_3_MINTEMP
539
+  #undef HEATER_3_MAXTEMP
540
+#endif
541
+#if TEMP_SENSOR_BED == 0
542
+  #undef BED_MINTEMP
543
+  #undef BED_MAXTEMP
544
+#endif
545
+
546
+
547
+#endif //__CONFIGURATION_ADV_H

+ 1
- 0
Marlin/example_configurations/makibox/Configuration.h View File

450
 
450
 
451
   #define Z_RAISE_BEFORE_PROBING 15    //How much the extruder will be raised before traveling to the first probing point.
451
   #define Z_RAISE_BEFORE_PROBING 15    //How much the extruder will be raised before traveling to the first probing point.
452
   #define Z_RAISE_BETWEEN_PROBINGS 5  //How much the extruder will be raised when traveling from between next probing points
452
   #define Z_RAISE_BETWEEN_PROBINGS 5  //How much the extruder will be raised when traveling from between next probing points
453
+  #define Z_RAISE_AFTER_PROBING 15    //How much the extruder will be raised after the last probing point.
453
 
454
 
454
   //#define Z_PROBE_SLED // turn on if you have a z-probe mounted on a sled like those designed by Charles Bell
455
   //#define Z_PROBE_SLED // turn on if you have a z-probe mounted on a sled like those designed by Charles Bell
455
   //#define SLED_DOCKING_OFFSET 5 // the extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.
456
   //#define SLED_DOCKING_OFFSET 5 // the extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.

+ 1
- 0
Marlin/example_configurations/tvrrug/Round2/Configuration.h View File

452
 
452
 
453
   #define Z_RAISE_BEFORE_PROBING 15    //How much the extruder will be raised before traveling to the first probing point.
453
   #define Z_RAISE_BEFORE_PROBING 15    //How much the extruder will be raised before traveling to the first probing point.
454
   #define Z_RAISE_BETWEEN_PROBINGS 5  //How much the extruder will be raised when traveling from between next probing points
454
   #define Z_RAISE_BETWEEN_PROBINGS 5  //How much the extruder will be raised when traveling from between next probing points
455
+  #define Z_RAISE_AFTER_PROBING 15    //How much the extruder will be raised after the last probing point.
455
 
456
 
456
   //#define Z_PROBE_SLED // turn on if you have a z-probe mounted on a sled like those designed by Charles Bell
457
   //#define Z_PROBE_SLED // turn on if you have a z-probe mounted on a sled like those designed by Charles Bell
457
   //#define SLED_DOCKING_OFFSET 5 // the extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.
458
   //#define SLED_DOCKING_OFFSET 5 // the extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.

BIN
Marlin/fonts/ISO10646-1.fon View File


+ 1
- 1
Marlin/fonts/README.fonts View File

1
 The fonts are created with Fony.exe (http://hukka.ncn.fi/?fony) because Fontforge didn't do what I want (probably lack off experience). 
1
 The fonts are created with Fony.exe (http://hukka.ncn.fi/?fony) because Fontforge didn't do what I want (probably lack off experience). 
2
 In Fony export the fonts to bdf-format. Maybe another one can edit them with Fontforge.
2
 In Fony export the fonts to bdf-format. Maybe another one can edit them with Fontforge.
3
 Then run make_fonts.bat what calls bdf2u8g.exe with the needed parameters to produce the .h files.
3
 Then run make_fonts.bat what calls bdf2u8g.exe with the needed parameters to produce the .h files.
4
-The .h files must be edited to replace '#include "u8g.h"' with '#include <utility/u8g.h>', replace 'U8G_FONT_SECTION' with 'U8G_SECTION', inset '.progmem.' right behind the first '"' and moved to the main directory.
4
+The .h files must be edited to replace '#include "u8g.h"' with '#include <utility/u8g.h>', replace 'U8G_FONT_SECTION' with 'U8G_SECTION', insert '.progmem.' right behind the first '"' and moved to the main directory.
5
 
5
 
6
 Especially the Kana and Cyrillic fonts should be revised by someone who knows what he/she does. I am only a west-European with very little knowledge about this scripts.
6
 Especially the Kana and Cyrillic fonts should be revised by someone who knows what he/she does. I am only a west-European with very little knowledge about this scripts.

+ 1
- 0
Marlin/fonts/make_fonts.bat View File

2
 .\bdf2u8g.exe -b 16 -e 255 HD44780_W.bdf HD44780_W_5x7 dogm_font_data_HD44780_W.h
2
 .\bdf2u8g.exe -b 16 -e 255 HD44780_W.bdf HD44780_W_5x7 dogm_font_data_HD44780_W.h
3
 .\bdf2u8g.exe -b 32 -e 255 HD44780_C.bdf HD44780_C_5x7 dogm_font_data_HD44780_C.h
3
 .\bdf2u8g.exe -b 32 -e 255 HD44780_C.bdf HD44780_C_5x7 dogm_font_data_HD44780_C.h
4
 .\bdf2u8g.exe -b 32 -e 255 HD44780_J.bdf HD44780_J_5x7 dogm_font_data_HD44780_J.h
4
 .\bdf2u8g.exe -b 32 -e 255 HD44780_J.bdf HD44780_J_5x7 dogm_font_data_HD44780_J.h
5
+.\bdf2u8g.exe -b 32 -e 255 ISO10646-1.bdf ISO10646_1_5x7 dogm_font_data_ISO10646_1.h
5
 .\bdf2u8g.exe -b 32 -e 255 ISO10646_5_Cyrillic.bdf ISO10646_5_Cyrillic_5x7 dogm_font_data_ISO10646_5_Cyrillic.h
6
 .\bdf2u8g.exe -b 32 -e 255 ISO10646_5_Cyrillic.bdf ISO10646_5_Cyrillic_5x7 dogm_font_data_ISO10646_5_Cyrillic.h
6
 .\bdf2u8g.exe -b 32 -e 255 ISO10646_Kana.bdf ISO10646_Kana_5x7 dogm_font_data_ISO10646_Kana.h
7
 .\bdf2u8g.exe -b 32 -e 255 ISO10646_Kana.bdf ISO10646_Kana_5x7 dogm_font_data_ISO10646_Kana.h

+ 1
- 1
Marlin/planner.cpp View File

1063
   st_wake_up();
1063
   st_wake_up();
1064
 }
1064
 }
1065
 
1065
 
1066
-#ifdef ENABLE_AUTO_BED_LEVELING
1066
+#if defined(ENABLE_AUTO_BED_LEVELING) && not defined(DELTA)
1067
 vector_3 plan_get_position() {
1067
 vector_3 plan_get_position() {
1068
 	vector_3 position = vector_3(st_get_position_mm(X_AXIS), st_get_position_mm(Y_AXIS), st_get_position_mm(Z_AXIS));
1068
 	vector_3 position = vector_3(st_get_position_mm(X_AXIS), st_get_position_mm(Y_AXIS), st_get_position_mm(Z_AXIS));
1069
 
1069
 

+ 4
- 2
Marlin/planner.h View File

85
 #ifdef ENABLE_AUTO_BED_LEVELING
85
 #ifdef ENABLE_AUTO_BED_LEVELING
86
 void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, const uint8_t &extruder);
86
 void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, const uint8_t &extruder);
87
 
87
 
88
-// Get the position applying the bed level matrix if enabled
89
-vector_3 plan_get_position();
88
+  #ifndef DELTA
89
+  // Get the position applying the bed level matrix if enabled
90
+  vector_3 plan_get_position();
91
+  #endif
90
 #else
92
 #else
91
 void plan_buffer_line(const float &x, const float &y, const float &z, const float &e, float feed_rate, const uint8_t &extruder);
93
 void plan_buffer_line(const float &x, const float &y, const float &z, const float &e, float feed_rate, const uint8_t &extruder);
92
 #endif // ENABLE_AUTO_BED_LEVELING
94
 #endif // ENABLE_AUTO_BED_LEVELING

+ 40
- 39
Marlin/stepper.cpp View File

413
       #else
413
       #else
414
         // Head direction in -X axis for CoreXY bots.
414
         // Head direction in -X axis for CoreXY bots.
415
         // If DeltaX == -DeltaY, the movement is only in Y axis
415
         // If DeltaX == -DeltaY, the movement is only in Y axis
416
-        if (TEST(out_bits, X_HEAD) && (current_block->steps_x != current_block->steps_y || (TEST(out_bits, X_AXIS) == TEST(out_bits, Y_AXIS))))
416
+        if (current_block->steps_x != current_block->steps_y || (TEST(out_bits, X_AXIS) == TEST(out_bits, Y_AXIS)))      
417
+            if (TEST(out_bits, X_HEAD))
417
       #endif
418
       #endif
418
-        { // -direction
419
-          #ifdef DUAL_X_CARRIAGE
420
-            // with 2 x-carriages, endstops are only checked in the homing direction for the active extruder
421
-            if ((current_block->active_extruder == 0 && X_HOME_DIR == -1) || (current_block->active_extruder != 0 && X2_HOME_DIR == -1))
422
-          #endif          
423
-            {
424
-              #if defined(X_MIN_PIN) && X_MIN_PIN >= 0
425
-                UPDATE_ENDSTOP(x, X, min, MIN);
419
+            { // -direction
420
+              #ifdef DUAL_X_CARRIAGE
421
+                // with 2 x-carriages, endstops are only checked in the homing direction for the active extruder
422
+                if ((current_block->active_extruder == 0 && X_HOME_DIR == -1) || (current_block->active_extruder != 0 && X2_HOME_DIR == -1))
423
+              #endif          
424
+                {
425
+                  #if defined(X_MIN_PIN) && X_MIN_PIN >= 0
426
+                    UPDATE_ENDSTOP(x, X, min, MIN);
427
+                  #endif
428
+                }
429
+            }
430
+            else { // +direction
431
+              #ifdef DUAL_X_CARRIAGE
432
+                // with 2 x-carriages, endstops are only checked in the homing direction for the active extruder
433
+                if ((current_block->active_extruder == 0 && X_HOME_DIR == 1) || (current_block->active_extruder != 0 && X2_HOME_DIR == 1))
426
               #endif
434
               #endif
435
+                {
436
+                  #if defined(X_MAX_PIN) && X_MAX_PIN >= 0
437
+                    UPDATE_ENDSTOP(x, X, max, MAX);
438
+                  #endif
439
+                }
427
             }
440
             }
428
-        }
429
-        else { // +direction
430
-          #ifdef DUAL_X_CARRIAGE
431
-            // with 2 x-carriages, endstops are only checked in the homing direction for the active extruder
432
-            if ((current_block->active_extruder == 0 && X_HOME_DIR == 1) || (current_block->active_extruder != 0 && X2_HOME_DIR == 1))
433
-          #endif
434
-            {
435
-              #if defined(X_MAX_PIN) && X_MAX_PIN >= 0
436
-                UPDATE_ENDSTOP(x, X, max, MAX);
441
+      #ifndef COREXY
442
+        if (TEST(out_bits, Y_AXIS))   // -direction
443
+      #else
444
+        // Head direction in -Y axis for CoreXY bots.
445
+        // If DeltaX == DeltaY, the movement is only in X axis
446
+        if (current_block->steps_x != current_block->steps_y || (TEST(out_bits, X_AXIS) != TEST(out_bits, Y_AXIS)))
447
+            if (TEST(out_bits, Y_HEAD))             
448
+      #endif
449
+            { // -direction
450
+              #if defined(Y_MIN_PIN) && Y_MIN_PIN >= 0
451
+                UPDATE_ENDSTOP(y, Y, min, MIN);
452
+              #endif
453
+            }
454
+            else { // +direction
455
+              #if defined(Y_MAX_PIN) && Y_MAX_PIN >= 0
456
+                UPDATE_ENDSTOP(y, Y, max, MAX);
437
               #endif
457
               #endif
438
             }
458
             }
439
-        }
440
-
441
-        #ifndef COREXY
442
-          if (TEST(out_bits, Y_AXIS))   // -direction
443
-        #else
444
-          // Head direction in -Y axis for CoreXY bots.
445
-          // If DeltaX == DeltaY, the movement is only in X axis
446
-          if (TEST(out_bits, Y_HEAD) && (current_block->steps_x != current_block->steps_y || (TEST(out_bits, X_AXIS) != TEST(out_bits, Y_AXIS))))
447
-        #endif
448
-        { // -direction
449
-          #if defined(Y_MIN_PIN) && Y_MIN_PIN >= 0
450
-            UPDATE_ENDSTOP(y, Y, min, MIN);
451
-          #endif
452
-        }
453
-        else { // +direction
454
-          #if defined(Y_MAX_PIN) && Y_MAX_PIN >= 0
455
-            UPDATE_ENDSTOP(y, Y, max, MAX);
456
-          #endif
457
-        }
458
     }
459
     }
459
 
460
 
460
     if (TEST(out_bits, Z_AXIS)) {   // -direction
461
     if (TEST(out_bits, Z_AXIS)) {   // -direction
528
         #endif
529
         #endif
529
 
530
 
530
         #define STEP_IF_COUNTER(axis, AXIS) \
531
         #define STEP_IF_COUNTER(axis, AXIS) \
531
-          if (counter_## axis > 0) {
532
+          if (counter_## axis > 0) { \
532
             counter_## axis -= current_block->step_event_count; \
533
             counter_## axis -= current_block->step_event_count; \
533
             count_position[AXIS ##_AXIS] += count_direction[AXIS ##_AXIS]; \
534
             count_position[AXIS ##_AXIS] += count_direction[AXIS ##_AXIS]; \
534
-            AXIS ##_STEP_WRITE(LOW);
535
+            AXIS ##_STEP_WRITE(LOW); \
535
           }
536
           }
536
 
537
 
537
         STEP_IF_COUNTER(x, X);
538
         STEP_IF_COUNTER(x, X);

+ 6
- 6
Marlin/ultralcd.cpp View File

61
 #ifdef DOGLCD
61
 #ifdef DOGLCD
62
 static void lcd_set_contrast();
62
 static void lcd_set_contrast();
63
 #endif
63
 #endif
64
+#ifdef FWRETRACT
64
 static void lcd_control_retract_menu();
65
 static void lcd_control_retract_menu();
66
+#endif
65
 static void lcd_sdcard_menu();
67
 static void lcd_sdcard_menu();
66
 
68
 
67
 #ifdef DELTA_CALIBRATION_MENU
69
 #ifdef DELTA_CALIBRATION_MENU
402
   END_MENU();
404
   END_MENU();
403
 }
405
 }
404
 
406
 
405
-#ifdef SDSUPPORT
407
+#if defined( SDSUPPORT ) && defined( MENU_ADDAUTOSTART )
406
   static void lcd_autostart_sd() {
408
   static void lcd_autostart_sd() {
407
     card.autostart_index = 0;
409
     card.autostart_index = 0;
408
     card.setroot();
410
     card.setroot();
587
 static void lcd_prepare_menu() {
589
 static void lcd_prepare_menu() {
588
   START_MENU();
590
   START_MENU();
589
   MENU_ITEM(back, MSG_MAIN, lcd_main_menu);
591
   MENU_ITEM(back, MSG_MAIN, lcd_main_menu);
590
-  #ifdef SDSUPPORT
591
-    #ifdef MENU_ADDAUTOSTART
592
-      MENU_ITEM(function, MSG_AUTOSTART, lcd_autostart_sd);
593
-    #endif
592
+  #if defined( SDSUPPORT ) && defined( MENU_ADDAUTOSTART )
593
+    MENU_ITEM(function, MSG_AUTOSTART, lcd_autostart_sd);
594
   #endif
594
   #endif
595
   MENU_ITEM(gcode, MSG_DISABLE_STEPPERS, PSTR("M84"));
595
   MENU_ITEM(gcode, MSG_DISABLE_STEPPERS, PSTR("M84"));
596
   MENU_ITEM(gcode, MSG_AUTO_HOME, PSTR("G28"));
596
   MENU_ITEM(gcode, MSG_AUTO_HOME, PSTR("G28"));
1246
     }
1246
     }
1247
   #endif//CARDINSERTED
1247
   #endif//CARDINSERTED
1248
 
1248
 
1249
-  long ms = millis();
1249
+  uint32_t ms = millis();
1250
   if (ms > lcd_next_update_millis) {
1250
   if (ms > lcd_next_update_millis) {
1251
 
1251
 
1252
     #ifdef ULTIPANEL
1252
     #ifdef ULTIPANEL

Loading…
Cancel
Save