Sfoglia il codice sorgente

added support for the reprapworld keypad

gregor 12 anni fa
parent
commit
6fb9573157
4 ha cambiato i file con 99 aggiunte e 3 eliminazioni
  1. 10
    0
      Marlin/Configuration.h
  2. 21
    3
      Marlin/pins.h
  3. 50
    0
      Marlin/ultralcd.cpp
  4. 18
    0
      Marlin/ultralcd.h

+ 10
- 0
Marlin/Configuration.h Vedi File

@@ -338,6 +338,11 @@ const bool Z_ENDSTOPS_INVERTING = true; // set to true to invert the logic of th
338 338
 // ==> REMEMBER TO INSTALL U8glib to your ARDUINO library folder: http://code.google.com/p/u8glib/wiki/u8glib
339 339
 //#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
340 340
 
341
+// The RepRapWorld Keypad v1.1
342
+// http://reprapworld.com/?products_details&products_id=202&cPath=1591_1626
343
+//#define KEYPAD
344
+//#define KEYPAD_MOVE_STEP 10.0 // how much should be moved when a key is pressed, eg 10.0 means 10mm per click
345
+
341 346
 //automatic expansion
342 347
 #if defined (REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER)
343 348
  #define DOGLCD
@@ -350,6 +355,11 @@ const bool Z_ENDSTOPS_INVERTING = true; // set to true to invert the logic of th
350 355
  #define NEWPANEL
351 356
 #endif 
352 357
 
358
+#if defined(KEYPAD)
359
+  #define NEWPANEL
360
+  #define ULTIPANEL
361
+#endif
362
+
353 363
 // Preheat Constants
354 364
 #define PLA_PREHEAT_HOTEND_TEMP 180 
355 365
 #define PLA_PREHEAT_HPB_TEMP 70

+ 21
- 3
Marlin/pins.h Vedi File

@@ -416,9 +416,27 @@
416 416
       #define BEEPER 33	 // Beeper on AUX-4
417 417
 
418 418
       //buttons are directly attached using AUX-2
419
-      #define BTN_EN1 37
420
-      #define BTN_EN2 35
421
-      #define BTN_ENC 31  //the click
419
+      #ifdef KEYPAD
420
+        #define BTN_EN1 64 // encoder
421
+        #define BTN_EN2 59 // encoder
422
+        #define BTN_ENC 63 // enter button
423
+        #define SHIFT_OUT 40 // shift register
424
+        #define SHIFT_CLK 44 // shift register
425
+        #define SHIFT_LD 42 // shift register
426
+        // define register bit values, don't change it
427
+        #define BLEN_KEYPAD_F3 0
428
+        #define BLEN_KEYPAD_F2 1
429
+        #define BLEN_KEYPAD_F1 2
430
+        #define BLEN_KEYPAD_UP 3
431
+        #define BLEN_KEYPAD_RIGHT 4
432
+        #define BLEN_KEYPAD_MIDDLE 5
433
+        #define BLEN_KEYPAD_DOWN 6
434
+        #define BLEN_KEYPAD_LEFT 7
435
+	  #else
436
+        #define BTN_EN1 37
437
+        #define BTN_EN2 35
438
+        #define BTN_ENC 31  //the click
439
+      #endif
422 440
 
423 441
       #ifdef G3D_PANEL
424 442
         #define SDCARDDETECT 49

+ 50
- 0
Marlin/ultralcd.cpp Vedi File

@@ -113,6 +113,7 @@ static void menu_action_setting_edit_callback_long5(const char* pstr, unsigned l
113 113
 
114 114
 /** Used variables to keep track of the menu */
115 115
 volatile uint8_t buttons;//Contains the bits of the currently pressed buttons.
116
+volatile uint8_t buttons_keypad; // to store the keypad shiftregister values
116 117
 
117 118
 uint8_t currentMenuViewOffset;              /* scroll offset in the current menu */
118 119
 uint32_t blocking_enc;
@@ -687,6 +688,25 @@ menu_edit_type(float, float51, ftostr51, 10)
687 688
 menu_edit_type(float, float52, ftostr52, 100)
688 689
 menu_edit_type(unsigned long, long5, ftostr5, 0.01)
689 690
 
691
+#ifdef KEYPAD
692
+	static void keypad_move_y_down() {
693
+	SERIAL_ECHO("keypad_move_y_down");
694
+        encoderPosition = 1;
695
+        move_menu_scale = KEYPAD_MOVE_STEP;
696
+		lcd_move_y();
697
+	}
698
+	static void keypad_move_y_up() {
699
+		encoderPosition = -1;
700
+		move_menu_scale = KEYPAD_MOVE_STEP;
701
+    	lcd_move_y();
702
+	}
703
+	static void keypad_move_home() {
704
+		//enquecommand_P((PSTR("G28"))); // move all axis home
705
+		// TODO gregor: move all axis home, i have currently only one axis on my prusa i3
706
+		enquecommand_P((PSTR("G28 Y")));
707
+	}
708
+#endif
709
+
690 710
 /** End of menus **/
691 711
 
692 712
 static void lcd_quick_feedback()
@@ -750,6 +770,13 @@ void lcd_init()
750 770
     WRITE(BTN_EN1,HIGH);
751 771
     WRITE(BTN_EN2,HIGH);
752 772
     WRITE(BTN_ENC,HIGH);
773
+    #ifdef KEYPAD
774
+      pinMode(SHIFT_CLK,OUTPUT);
775
+      pinMode(SHIFT_LD,OUTPUT);
776
+      pinMode(SHIFT_OUT,INPUT);
777
+      WRITE(SHIFT_OUT,HIGH);
778
+      WRITE(SHIFT_LD,HIGH);
779
+    #endif
753 780
 #else
754 781
     pinMode(SHIFT_CLK,OUTPUT);
755 782
     pinMode(SHIFT_LD,OUTPUT);
@@ -796,6 +823,17 @@ void lcd_update()
796 823
     if (lcd_next_update_millis < millis())
797 824
     {
798 825
 #ifdef ULTIPANEL
826
+		#ifdef KEYPAD
827
+        	if (KEYPAD_MOVE_Y_DOWN) {
828
+        		keypad_move_y_down();
829
+        	}
830
+        	if (KEYPAD_MOVE_Y_UP) {
831
+        		keypad_move_y_up();
832
+        	}
833
+        	if (KEYPAD_MOVE_HOME) {
834
+        		keypad_move_home();
835
+        	}
836
+		#endif
799 837
         if (encoderDiff)
800 838
         {
801 839
             lcdDrawUpdate = 1;
@@ -876,6 +914,18 @@ void lcd_buttons_update()
876 914
     if((blocking_enc<millis()) && (READ(BTN_ENC)==0))
877 915
         newbutton |= EN_C;
878 916
     buttons = newbutton;
917
+    // for the keypad
918
+    uint8_t newbutton_keypad=0;
919
+    WRITE(SHIFT_LD,LOW);
920
+    WRITE(SHIFT_LD,HIGH);
921
+    for(int8_t i=0;i<8;i++) {
922
+        newbutton_keypad = newbutton_keypad>>1;
923
+        if(READ(SHIFT_OUT))
924
+            newbutton_keypad|=(1<<7);
925
+        WRITE(SHIFT_CLK,HIGH);
926
+        WRITE(SHIFT_CLK,LOW);
927
+    }
928
+    buttons_keypad=~newbutton_keypad; //invert it, because a pressed switch produces a logical 0
879 929
 #else   //read it from the shift register
880 930
     uint8_t newbutton=0;
881 931
     WRITE(SHIFT_LD,LOW);

+ 18
- 0
Marlin/ultralcd.h Vedi File

@@ -23,6 +23,9 @@
23 23
   #ifdef ULTIPANEL
24 24
   void lcd_buttons_update();
25 25
   extern volatile uint8_t buttons;  //the last checked buttons in a bit array.
26
+  #ifdef KEYPAD
27
+    extern volatile uint8_t buttons_keypad; // to store the keypad shiftregister values
28
+  #endif
26 29
   #else
27 30
   FORCE_INLINE void lcd_buttons_update() {}
28 31
   #endif
@@ -41,6 +44,21 @@
41 44
     #define EN_A (1<<BLEN_A)
42 45
 
43 46
     #define LCD_CLICKED (buttons&EN_C)
47
+    #ifdef KEYPAD
48
+  	  #define EN_KEYPAD_F3 (1<<BLEN_KEYPAD_F3)
49
+  	  #define EN_KEYPAD_F2 (1<<BLEN_KEYPAD_F2)
50
+  	  #define EN_KEYPAD_F1 (1<<BLEN_KEYPAD_F1)
51
+  	  #define EN_KEYPAD_UP (1<<BLEN_KEYPAD_UP)
52
+  	  #define EN_KEYPAD_RIGHT (1<<BLEN_KEYPAD_RIGHT)
53
+  	  #define EN_KEYPAD_MIDDLE (1<<BLEN_KEYPAD_MIDDLE)
54
+  	  #define EN_KEYPAD_DOWN (1<<BLEN_KEYPAD_DOWN)
55
+  	  #define EN_KEYPAD_LEFT (1<<BLEN_KEYPAD_LEFT)
56
+
57
+  	  #define LCD_CLICKED ((buttons&EN_C) || (buttons_keypad&EN_KEYPAD_F1))
58
+  	  #define KEYPAD_MOVE_Y_DOWN (buttons_keypad&EN_KEYPAD_DOWN)
59
+  	  #define KEYPAD_MOVE_Y_UP (buttons_keypad&EN_KEYPAD_UP)
60
+  	  #define KEYPAD_MOVE_HOME (buttons_keypad&EN_KEYPAD_MIDDLE)
61
+    #endif //KEYPAD
44 62
   #else
45 63
     //atomatic, do not change
46 64
     #define B_LE (1<<BL_LE)

Loading…
Annulla
Salva