416012
The BOB makes a pretty good Arduino shield for an LCD Control Panel with switches, and ribbon cable connections to stepper motor drivers, space for a relay driver, etc.. Video of the build:
For the LCD panel, Install
For the switches, Install
For Motor Drivers (optional hack for attaching PMinMO compatible stepper or other drivers)
BOBLCDPanel.ino
#include <LiquidCrystal.h> // See this page for the BOB Control Panel build // http://www.massmind.org/techref/arduino-bob-panel.htm #define LCD_COLS 16 #define LCD_ROWS 2 //#define MOTORS #define S1_PIN 10 #define S2_PIN 11 #define S3_PIN 12 #define S4_PIN 13 #define X_DIR 6 #define X_STEP 2 #define Y_DIR 7 #define Y_STEP 3 // Shared with LCD RS #define Z_DIR 8 #define Z_STEP 4 #define A_DIR 9 #define A_STEP 5 // Shared with LCD /E // initialize the library with the numbers of the interface pins LiquidCrystal lcd(3, 5, 6, 7, 8, 9); //use this line instead if you patched C4 to JP4 (Z-STEP) instead. //LiquidCrystal lcd(4, 5, 6, 7, 8, 9); int switch_state() { int i=0; if (0==digitalRead(S1_PIN)) i+=1; if (0==digitalRead(S2_PIN)) i+=2; if (0==digitalRead(S3_PIN)) i+=4; if (0==digitalRead(S4_PIN)) i+=8; return i; } void setup() { // setup the switch pins, with pullups pinMode(S1_PIN, INPUT_PULLUP); pinMode(S2_PIN, INPUT_PULLUP); pinMode(S3_PIN, INPUT_PULLUP); pinMode(S4_PIN, INPUT_PULLUP); #ifdef MOTORS // setup the PWM or Step outputs pinMode(X_STEP, OUTPUT); pinMode(Y_STEP, OUTPUT); pinMode(Z_STEP, OUTPUT); pinMode(A_STEP, OUTPUT); // setup the Direction outputs pinMode(X_DIR, OUTPUT); pinMode(Y_DIR, OUTPUT); pinMode(Z_DIR, OUTPUT); pinMode(A_DIR, OUTPUT); // setup the A2 analog pin as an enable output. pinMode(A2, OUTPUT); #endif // setup the LCD's number of columns and rows: lcd.begin(LCD_COLS, LCD_ROWS); } void loop() { // Print a message to the LCD. lcd.setCursor(0, 0); lcd.print("Hello World! "); lcd.setCursor(0, 1); lcd.print("version 1.00 "); int s = switch_state(); if (0 != s) { // switch was pushed lcd.setCursor(13, 1); lcd.print(s); #ifdef MOTORS lcd.setCursor(0, 0); lcd.print("Motor running"); lcd.print(s*(255/15)); digitalWrite(A2,HIGH); //enable the motors. while (0 != s) { s = switch_state(); analogWrite(X_DIR, s*(255/15)); //run the motor on X 0 to 255 } digitalWrite(A2,LOW); //disable the motors. #endif } delay(1000); lcd.setCursor(0, 0); lcd.print(" "); for(int i=0; i<LCD_COLS; i++) { lcd.setCursor(i, 0); //char i of line 0 if ( i>10 ) lcd.print(i / 10); //divide by 10 gives upper digit, //no decimal because int lcd.setCursor(i, 1); //char i of line 1 lcd.print(i % 10); //modulo 10 gives lower digit delay(10); } delay(500); }