Skip to content

Instantly share code, notes, and snippets.

@ErikDeBruijn
Last active September 4, 2018 18:52
Show Gist options
  • Save ErikDeBruijn/eb1e790f02dfa205df4c to your computer and use it in GitHub Desktop.
Save ErikDeBruijn/eb1e790f02dfa205df4c to your computer and use it in GitHub Desktop.
SlaveUMBoard Sketch
case 43: //M43 - Choose an external feeder
// e.g. M43 P0 means no feeder, M43 P1 means the first feeder, etc.
if (code_seen('P')) {
int feeder_number = 0;
feeder_number = code_value();
switch(feeder_number)
{
case 0:
digitalWrite(FEEDER_SELECT_BIT1, LOW);
digitalWrite(FEEDER_SELECT_BIT2, LOW);
digitalWrite(FEEDER_SELECT_BIT3, LOW);
break;
case 1:
digitalWrite(FEEDER_SELECT_BIT1, HIGH);
digitalWrite(FEEDER_SELECT_BIT2, LOW);
digitalWrite(FEEDER_SELECT_BIT3, LOW);
break;
case 2:
digitalWrite(FEEDER_SELECT_BIT1, LOW);
digitalWrite(FEEDER_SELECT_BIT2, HIGH);
digitalWrite(FEEDER_SELECT_BIT3, LOW);
break;
case 3:
digitalWrite(FEEDER_SELECT_BIT1, HIGH);
digitalWrite(FEEDER_SELECT_BIT2, HIGH);
digitalWrite(FEEDER_SELECT_BIT3, LOW);
break;
case 4:
digitalWrite(FEEDER_SELECT_BIT1, LOW);
digitalWrite(FEEDER_SELECT_BIT2, LOW);
digitalWrite(FEEDER_SELECT_BIT3, HIGH);
break;
case 5:
digitalWrite(FEEDER_SELECT_BIT1, HIGH);
digitalWrite(FEEDER_SELECT_BIT2, LOW);
digitalWrite(FEEDER_SELECT_BIT3, HIGH);
break;
case 6:
digitalWrite(FEEDER_SELECT_BIT1, LOW);
digitalWrite(FEEDER_SELECT_BIT2, HIGH);
digitalWrite(FEEDER_SELECT_BIT3, HIGH);
break;
}
}
break;
#define FORWARD 1
#define RETRACT 0
// On mega Analog 0 is 54
// External feeders
#define J25_PIN1 18 //18=TXD1 was 54 // STEP
#define J25_PIN2 55 // DIR
#define J25_PIN3 56 // ENABLE
#define J25_PIN4 57 // FEEDER_SELECT_BIT1
#define J25_PIN5 58 // FEEDER_SELECT_BIT2
#define J25_PIN6 59 // FEEDER_SELECT_BIT3
#define J25_PIN7 60
#define J25_PIN8 61
#define FEEDER_SELECT_BIT1 J25_PIN4
#define FEEDER_SELECT_BIT2 J25_PIN5
#define FEEDER_SELECT_BIT3 J25_PIN6
/*****************************************************************
* Ultiboard v2.0 pin assignment
******************************************************************/
#ifndef __AVR_ATmega2560__
#error Oops! Make sure you have 'Arduino Mega 2560' selected from the 'Tools -> Boards' menu.
#endif
#define X_STEP_PIN 25
#define X_DIR_PIN 23
#define X_STOP_PIN 22
#define X_ENABLE_PIN 27
#define Y_STEP_PIN 32
#define Y_DIR_PIN 33
#define Y_STOP_PIN 26
#define Y_ENABLE_PIN 31
#define Z_STEP_PIN 35
#define Z_DIR_PIN 36
#define Z_STOP_PIN 29
#define Z_ENABLE_PIN 34
#define HEATER_BED_PIN 4
#define TEMP_BED_PIN 10
#define HEATER_0_PIN 2
#define TEMP_0_PIN 8
#define HEATER_1_PIN 3
#define TEMP_1_PIN 9
#define HEATER_2_PIN -1
#define TEMP_2_PIN -1
#define E0_STEP_PIN 42
#define E0_DIR_PIN 43
#define E0_ENABLE_PIN 37
#define E1_STEP_PIN 49
#define E1_DIR_PIN 47
#define E1_ENABLE_PIN 48
#define SDPOWER -1
#define SDSS 53
#define LED_PIN 8
#define FAN_PIN 7
#define PS_ON_PIN -1
#define KILL_PIN -1
#define SUICIDE_PIN -1 //PIN that has to be turned on right after start, to keep power flowing.
#define SAFETY_TRIGGERED_PIN 28 //PIN to detect the safety circuit has triggered
#define MAIN_VOLTAGE_MEASURE_PIN 14 //Analogue PIN to measure the main voltage, with a 100k - 4k7 resitor divider.
#define MOTOR_CURRENT_PWM_XY_PIN 44
#define MOTOR_CURRENT_PWM_Z_PIN 45
#define MOTOR_CURRENT_PWM_E_PIN 46
//Motor current PWM conversion, PWM value = MotorCurrentSetting * 255 / range
#define MOTOR_CURRENT_PWM_RANGE 2000
#define DEFAULT_PWM_MOTOR_CURRENT {1300, 1300, 1250}
//arduino pin witch triggers an piezzo beeper
#define BEEPER 18
#define LCD_PINS_RS 20
#define LCD_PINS_ENABLE 15
#define LCD_PINS_D4 14
#define LCD_PINS_D5 21
#define LCD_PINS_D6 5
#define LCD_PINS_D7 6
//buttons are directly attached
#define BTN_EN1 40
#define BTN_EN2 41
#define BTN_ENC 19 //the click
#define BLEN_C 2
#define BLEN_B 1
#define BLEN_A 0
#define SDCARDDETECT 39
#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
// Default motor current for XY,Z,E in mA
#define DEFAULT_PWM_MOTOR_CURRENT {1300, 1300, 1250}
#include "settings.h"
#include "pins.h"
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Slave Ultiboard Ready.");
pinMode(SAFETY_TRIGGERED_PIN,OUTPUT);
pinMode(J25_PIN1,INPUT);
pinMode(J25_PIN2,INPUT);
pinMode(J25_PIN3,INPUT);
pinMode(J25_PIN4,INPUT);
pinMode(J25_PIN5,INPUT);
pinMode(J25_PIN6,INPUT);
pinMode(J25_PIN7,INPUT);
digitalWrite(J25_PIN1, HIGH); // turn on pullup resistors
digitalWrite(J25_PIN2, HIGH); // turn on pullup resistors
digitalWrite(J25_PIN3, HIGH); // turn on pullup resistors
digitalWrite(J25_PIN4, HIGH); // turn on pullup resistors
digitalWrite(J25_PIN5, HIGH); // turn on pullup resistors
digitalWrite(J25_PIN6, HIGH); // turn on pullup resistors
digitalWrite(J25_PIN7, HIGH); // turn on pullup resistors
digitalWrite(J25_PIN8, HIGH); // turn on pullup resistors
heaters_init();
init_motors();
digitalWrite(SAFETY_TRIGGERED_PIN,LOW); // PA5 is safety
attachInterrupt(5, pinChanged, RISING);
Serial.begin(115200);
}
int extruderNr = 0;
int extruderNrPrev = 0;
void pinChanged() {
switch(extruderNr) {
case 1:
digitalWrite(X_STEP_PIN, HIGH);
delayMicroseconds(5);
digitalWrite(X_STEP_PIN, LOW);
break;
case 2:
digitalWrite(Y_STEP_PIN, HIGH);
delayMicroseconds(5);
digitalWrite(Y_STEP_PIN, LOW);
delayMicroseconds(200);
break;
case 3:
digitalWrite(Z_STEP_PIN, HIGH);
delayMicroseconds(5);
digitalWrite(Z_STEP_PIN, LOW);
delayMicroseconds(200);
break;
case 4:
digitalWrite(E0_STEP_PIN, HIGH);
delayMicroseconds(5);
digitalWrite(E0_STEP_PIN, LOW);
delayMicroseconds(200);
break;
case 5:
digitalWrite(E1_STEP_PIN, HIGH);
delayMicroseconds(5);
digitalWrite(E1_STEP_PIN, LOW);
break;
}
}
void loop() {
//FIXME: read the entire byte instead of each bit one at a time
extruderNr = digitalRead(FEEDER_SELECT_BIT1) + 2*digitalRead(FEEDER_SELECT_BIT2) + 4*digitalRead(FEEDER_SELECT_BIT3);
if(extruderNr == 0)
extruderNr = 1;
switch(extruderNr) {
case 0: //off
heater1(10);
heater2(10);
heater3(10);
digitalWrite(X_ENABLE_PIN, HIGH);
digitalWrite(Y_ENABLE_PIN, HIGH);
digitalWrite(Z_ENABLE_PIN, HIGH);
digitalWrite(E0_ENABLE_PIN, HIGH);
digitalWrite(E1_ENABLE_PIN, HIGH);
break;
case 1:
digitalWrite(Y_ENABLE_PIN, HIGH);
digitalWrite(Z_ENABLE_PIN, HIGH);
digitalWrite(E0_ENABLE_PIN, HIGH);
digitalWrite(E1_ENABLE_PIN, HIGH);
digitalWrite(X_DIR_PIN, digitalRead(J25_PIN2));
digitalWrite(X_ENABLE_PIN, digitalRead(J25_PIN3));
heater1(30);
heater2(0);
heater3(0);
break;
case 2:
digitalWrite(X_ENABLE_PIN, HIGH);
digitalWrite(Z_ENABLE_PIN, HIGH);
digitalWrite(E0_ENABLE_PIN, HIGH);
digitalWrite(E1_ENABLE_PIN, HIGH);
digitalWrite(Y_DIR_PIN, digitalRead(J25_PIN2));
digitalWrite(Y_ENABLE_PIN, digitalRead(J25_PIN3));
heater1(0);
heater2(30);
heater3(0);
break;
case 3:
digitalWrite(X_ENABLE_PIN, HIGH);
digitalWrite(Y_ENABLE_PIN, HIGH);
digitalWrite(E0_ENABLE_PIN, HIGH);
digitalWrite(E1_ENABLE_PIN, HIGH);
digitalWrite(Z_DIR_PIN, digitalRead(J25_PIN2));
digitalWrite(Z_ENABLE_PIN, digitalRead(J25_PIN3));
heater1(0);
heater2(0);
heater3(30);
break;
case 4:
digitalWrite(X_ENABLE_PIN, HIGH);
digitalWrite(Y_ENABLE_PIN, HIGH);
digitalWrite(Z_ENABLE_PIN, HIGH);
digitalWrite(E1_ENABLE_PIN, HIGH);
digitalWrite(E0_DIR_PIN, digitalRead(J25_PIN2));
digitalWrite(E0_ENABLE_PIN, digitalRead(J25_PIN3));
heater1(30);
heater2(0);
heater3(30);
break;
case 5:
digitalWrite(X_ENABLE_PIN, HIGH);
digitalWrite(Y_ENABLE_PIN, HIGH);
digitalWrite(Z_ENABLE_PIN, HIGH);
digitalWrite(E0_ENABLE_PIN, HIGH);
digitalWrite(E1_DIR_PIN, digitalRead(J25_PIN2));
digitalWrite(E1_ENABLE_PIN, digitalRead(J25_PIN3));
heater1(30);
heater2(0);
heater3(30);
break;
}
//if(digitalWrite()digitalRead(J25_PIN1)
}
void init_motors() {
pinMode(X_STEP_PIN,OUTPUT);
pinMode(X_DIR_PIN,OUTPUT);
pinMode(X_STOP_PIN,OUTPUT);
pinMode(X_ENABLE_PIN,OUTPUT);
pinMode(Y_STEP_PIN,OUTPUT);
pinMode(Y_DIR_PIN,OUTPUT);
pinMode(Y_STOP_PIN,OUTPUT);
pinMode(Y_ENABLE_PIN,OUTPUT);
pinMode(Z_STEP_PIN,OUTPUT);
pinMode(Z_DIR_PIN,OUTPUT);
pinMode(Z_STOP_PIN,OUTPUT);
pinMode(Z_ENABLE_PIN,OUTPUT);
pinMode(E0_STEP_PIN,OUTPUT);
pinMode(E0_DIR_PIN,OUTPUT);
pinMode(E0_ENABLE_PIN,OUTPUT);
pinMode(E1_STEP_PIN,OUTPUT);
pinMode(E1_DIR_PIN,OUTPUT);
pinMode(E1_ENABLE_PIN,OUTPUT);
digitalWrite(X_ENABLE_PIN, HIGH);
digitalWrite(X_STOP_PIN, LOW);
digitalWrite(Y_ENABLE_PIN, HIGH);
digitalWrite(Y_STOP_PIN, LOW);
digitalWrite(Z_ENABLE_PIN, HIGH);
digitalWrite(Z_STOP_PIN, LOW);
digitalWrite(E0_ENABLE_PIN, HIGH);
digitalWrite(E1_ENABLE_PIN, HIGH);
pinMode(MOTOR_CURRENT_PWM_XY_PIN, OUTPUT);
pinMode(MOTOR_CURRENT_PWM_Z_PIN, OUTPUT);
pinMode(MOTOR_CURRENT_PWM_E_PIN, OUTPUT);
analogWrite(MOTOR_CURRENT_PWM_XY_PIN,125);
analogWrite(MOTOR_CURRENT_PWM_Z_PIN,125);
analogWrite(MOTOR_CURRENT_PWM_E_PIN,125);
}
void step_X_motor(bool dir,int delayAfter) {
digitalWrite(X_DIR_PIN, dir);
digitalWrite(X_STEP_PIN,HIGH);
delayMicroseconds(1);
digitalWrite(X_STEP_PIN,LOW);
delayMicroseconds(delayAfter);
}
void step_Y_motor(bool dir,int delayAfter) {
digitalWrite(Y_DIR_PIN, dir);
digitalWrite(Y_STEP_PIN,HIGH);
delayMicroseconds(1);
digitalWrite(Y_STEP_PIN,LOW);
delayMicroseconds(delayAfter);
}
void heaters_init() {
pinMode(HEATER_0_PIN,OUTPUT);
pinMode(HEATER_1_PIN,OUTPUT);
pinMode(HEATER_BED_PIN,OUTPUT);
}
void heater1(int val) {
analogWrite(HEATER_0_PIN,val);
}
void heater2(int val) {
analogWrite(HEATER_1_PIN,val);
}
void heater3(int val) {
analogWrite(HEATER_BED_PIN,val);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment