Last active
September 4, 2018 18:52
-
-
Save ErikDeBruijn/eb1e790f02dfa205df4c to your computer and use it in GitHub Desktop.
SlaveUMBoard Sketch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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