added support for the reprapworld keypad
This commit is contained in:
		@@ -338,6 +338,11 @@ const bool Z_ENDSTOPS_INVERTING = true; // set to true to invert the logic of th
 | 
			
		||||
// ==> REMEMBER TO INSTALL U8glib to your ARDUINO library folder: http://code.google.com/p/u8glib/wiki/u8glib
 | 
			
		||||
//#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
 | 
			
		||||
 | 
			
		||||
// The RepRapWorld Keypad v1.1
 | 
			
		||||
// http://reprapworld.com/?products_details&products_id=202&cPath=1591_1626
 | 
			
		||||
//#define KEYPAD
 | 
			
		||||
//#define KEYPAD_MOVE_STEP 10.0 // how much should be moved when a key is pressed, eg 10.0 means 10mm per click
 | 
			
		||||
 | 
			
		||||
//automatic expansion
 | 
			
		||||
#if defined (REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER)
 | 
			
		||||
 #define DOGLCD
 | 
			
		||||
@@ -350,6 +355,11 @@ const bool Z_ENDSTOPS_INVERTING = true; // set to true to invert the logic of th
 | 
			
		||||
 #define NEWPANEL
 | 
			
		||||
#endif 
 | 
			
		||||
 | 
			
		||||
#if defined(KEYPAD)
 | 
			
		||||
  #define NEWPANEL
 | 
			
		||||
  #define ULTIPANEL
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// Preheat Constants
 | 
			
		||||
#define PLA_PREHEAT_HOTEND_TEMP 180 
 | 
			
		||||
#define PLA_PREHEAT_HPB_TEMP 70
 | 
			
		||||
 
 | 
			
		||||
@@ -416,9 +416,27 @@
 | 
			
		||||
      #define BEEPER 33	 // Beeper on AUX-4
 | 
			
		||||
 | 
			
		||||
      //buttons are directly attached using AUX-2
 | 
			
		||||
      #define BTN_EN1 37
 | 
			
		||||
      #define BTN_EN2 35
 | 
			
		||||
      #define BTN_ENC 31  //the click
 | 
			
		||||
      #ifdef KEYPAD
 | 
			
		||||
        #define BTN_EN1 64 // encoder
 | 
			
		||||
        #define BTN_EN2 59 // encoder
 | 
			
		||||
        #define BTN_ENC 63 // enter button
 | 
			
		||||
        #define SHIFT_OUT 40 // shift register
 | 
			
		||||
        #define SHIFT_CLK 44 // shift register
 | 
			
		||||
        #define SHIFT_LD 42 // shift register
 | 
			
		||||
        // define register bit values, don't change it
 | 
			
		||||
        #define BLEN_KEYPAD_F3 0
 | 
			
		||||
        #define BLEN_KEYPAD_F2 1
 | 
			
		||||
        #define BLEN_KEYPAD_F1 2
 | 
			
		||||
        #define BLEN_KEYPAD_UP 3
 | 
			
		||||
        #define BLEN_KEYPAD_RIGHT 4
 | 
			
		||||
        #define BLEN_KEYPAD_MIDDLE 5
 | 
			
		||||
        #define BLEN_KEYPAD_DOWN 6
 | 
			
		||||
        #define BLEN_KEYPAD_LEFT 7
 | 
			
		||||
	  #else
 | 
			
		||||
        #define BTN_EN1 37
 | 
			
		||||
        #define BTN_EN2 35
 | 
			
		||||
        #define BTN_ENC 31  //the click
 | 
			
		||||
      #endif
 | 
			
		||||
 | 
			
		||||
      #ifdef G3D_PANEL
 | 
			
		||||
        #define SDCARDDETECT 49
 | 
			
		||||
 
 | 
			
		||||
@@ -113,6 +113,7 @@ static void menu_action_setting_edit_callback_long5(const char* pstr, unsigned l
 | 
			
		||||
 | 
			
		||||
/** Used variables to keep track of the menu */
 | 
			
		||||
volatile uint8_t buttons;//Contains the bits of the currently pressed buttons.
 | 
			
		||||
volatile uint8_t buttons_keypad; // to store the keypad shiftregister values
 | 
			
		||||
 | 
			
		||||
uint8_t currentMenuViewOffset;              /* scroll offset in the current menu */
 | 
			
		||||
uint32_t blocking_enc;
 | 
			
		||||
@@ -687,6 +688,25 @@ menu_edit_type(float, float51, ftostr51, 10)
 | 
			
		||||
menu_edit_type(float, float52, ftostr52, 100)
 | 
			
		||||
menu_edit_type(unsigned long, long5, ftostr5, 0.01)
 | 
			
		||||
 | 
			
		||||
#ifdef KEYPAD
 | 
			
		||||
	static void keypad_move_y_down() {
 | 
			
		||||
	SERIAL_ECHO("keypad_move_y_down");
 | 
			
		||||
        encoderPosition = 1;
 | 
			
		||||
        move_menu_scale = KEYPAD_MOVE_STEP;
 | 
			
		||||
		lcd_move_y();
 | 
			
		||||
	}
 | 
			
		||||
	static void keypad_move_y_up() {
 | 
			
		||||
		encoderPosition = -1;
 | 
			
		||||
		move_menu_scale = KEYPAD_MOVE_STEP;
 | 
			
		||||
    	lcd_move_y();
 | 
			
		||||
	}
 | 
			
		||||
	static void keypad_move_home() {
 | 
			
		||||
		//enquecommand_P((PSTR("G28"))); // move all axis home
 | 
			
		||||
		// TODO gregor: move all axis home, i have currently only one axis on my prusa i3
 | 
			
		||||
		enquecommand_P((PSTR("G28 Y")));
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/** End of menus **/
 | 
			
		||||
 | 
			
		||||
static void lcd_quick_feedback()
 | 
			
		||||
@@ -750,6 +770,13 @@ void lcd_init()
 | 
			
		||||
    WRITE(BTN_EN1,HIGH);
 | 
			
		||||
    WRITE(BTN_EN2,HIGH);
 | 
			
		||||
    WRITE(BTN_ENC,HIGH);
 | 
			
		||||
    #ifdef KEYPAD
 | 
			
		||||
      pinMode(SHIFT_CLK,OUTPUT);
 | 
			
		||||
      pinMode(SHIFT_LD,OUTPUT);
 | 
			
		||||
      pinMode(SHIFT_OUT,INPUT);
 | 
			
		||||
      WRITE(SHIFT_OUT,HIGH);
 | 
			
		||||
      WRITE(SHIFT_LD,HIGH);
 | 
			
		||||
    #endif
 | 
			
		||||
#else
 | 
			
		||||
    pinMode(SHIFT_CLK,OUTPUT);
 | 
			
		||||
    pinMode(SHIFT_LD,OUTPUT);
 | 
			
		||||
@@ -796,6 +823,17 @@ void lcd_update()
 | 
			
		||||
    if (lcd_next_update_millis < millis())
 | 
			
		||||
    {
 | 
			
		||||
#ifdef ULTIPANEL
 | 
			
		||||
		#ifdef KEYPAD
 | 
			
		||||
        	if (KEYPAD_MOVE_Y_DOWN) {
 | 
			
		||||
        		keypad_move_y_down();
 | 
			
		||||
        	}
 | 
			
		||||
        	if (KEYPAD_MOVE_Y_UP) {
 | 
			
		||||
        		keypad_move_y_up();
 | 
			
		||||
        	}
 | 
			
		||||
        	if (KEYPAD_MOVE_HOME) {
 | 
			
		||||
        		keypad_move_home();
 | 
			
		||||
        	}
 | 
			
		||||
		#endif
 | 
			
		||||
        if (encoderDiff)
 | 
			
		||||
        {
 | 
			
		||||
            lcdDrawUpdate = 1;
 | 
			
		||||
@@ -876,6 +914,18 @@ void lcd_buttons_update()
 | 
			
		||||
    if((blocking_enc<millis()) && (READ(BTN_ENC)==0))
 | 
			
		||||
        newbutton |= EN_C;
 | 
			
		||||
    buttons = newbutton;
 | 
			
		||||
    // for the keypad
 | 
			
		||||
    uint8_t newbutton_keypad=0;
 | 
			
		||||
    WRITE(SHIFT_LD,LOW);
 | 
			
		||||
    WRITE(SHIFT_LD,HIGH);
 | 
			
		||||
    for(int8_t i=0;i<8;i++) {
 | 
			
		||||
        newbutton_keypad = newbutton_keypad>>1;
 | 
			
		||||
        if(READ(SHIFT_OUT))
 | 
			
		||||
            newbutton_keypad|=(1<<7);
 | 
			
		||||
        WRITE(SHIFT_CLK,HIGH);
 | 
			
		||||
        WRITE(SHIFT_CLK,LOW);
 | 
			
		||||
    }
 | 
			
		||||
    buttons_keypad=~newbutton_keypad; //invert it, because a pressed switch produces a logical 0
 | 
			
		||||
#else   //read it from the shift register
 | 
			
		||||
    uint8_t newbutton=0;
 | 
			
		||||
    WRITE(SHIFT_LD,LOW);
 | 
			
		||||
 
 | 
			
		||||
@@ -23,6 +23,9 @@
 | 
			
		||||
  #ifdef ULTIPANEL
 | 
			
		||||
  void lcd_buttons_update();
 | 
			
		||||
  extern volatile uint8_t buttons;  //the last checked buttons in a bit array.
 | 
			
		||||
  #ifdef KEYPAD
 | 
			
		||||
    extern volatile uint8_t buttons_keypad; // to store the keypad shiftregister values
 | 
			
		||||
  #endif
 | 
			
		||||
  #else
 | 
			
		||||
  FORCE_INLINE void lcd_buttons_update() {}
 | 
			
		||||
  #endif
 | 
			
		||||
@@ -41,6 +44,21 @@
 | 
			
		||||
    #define EN_A (1<<BLEN_A)
 | 
			
		||||
 | 
			
		||||
    #define LCD_CLICKED (buttons&EN_C)
 | 
			
		||||
    #ifdef KEYPAD
 | 
			
		||||
  	  #define EN_KEYPAD_F3 (1<<BLEN_KEYPAD_F3)
 | 
			
		||||
  	  #define EN_KEYPAD_F2 (1<<BLEN_KEYPAD_F2)
 | 
			
		||||
  	  #define EN_KEYPAD_F1 (1<<BLEN_KEYPAD_F1)
 | 
			
		||||
  	  #define EN_KEYPAD_UP (1<<BLEN_KEYPAD_UP)
 | 
			
		||||
  	  #define EN_KEYPAD_RIGHT (1<<BLEN_KEYPAD_RIGHT)
 | 
			
		||||
  	  #define EN_KEYPAD_MIDDLE (1<<BLEN_KEYPAD_MIDDLE)
 | 
			
		||||
  	  #define EN_KEYPAD_DOWN (1<<BLEN_KEYPAD_DOWN)
 | 
			
		||||
  	  #define EN_KEYPAD_LEFT (1<<BLEN_KEYPAD_LEFT)
 | 
			
		||||
 | 
			
		||||
  	  #define LCD_CLICKED ((buttons&EN_C) || (buttons_keypad&EN_KEYPAD_F1))
 | 
			
		||||
  	  #define KEYPAD_MOVE_Y_DOWN (buttons_keypad&EN_KEYPAD_DOWN)
 | 
			
		||||
  	  #define KEYPAD_MOVE_Y_UP (buttons_keypad&EN_KEYPAD_UP)
 | 
			
		||||
  	  #define KEYPAD_MOVE_HOME (buttons_keypad&EN_KEYPAD_MIDDLE)
 | 
			
		||||
    #endif //KEYPAD
 | 
			
		||||
  #else
 | 
			
		||||
    //atomatic, do not change
 | 
			
		||||
    #define B_LE (1<<BL_LE)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user