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