瀏覽代碼

Merge pull request #472 from gregor2005/Marlin_v1

added support for the reprapworld keypad
ErikZalm 12 年之前
父節點
當前提交
90664d20a4
共有 4 個檔案被更改,包括 100 行新增3 行删除
  1. 10
    0
      Marlin/Configuration.h
  2. 21
    3
      Marlin/pins.h
  3. 51
    0
      Marlin/ultralcd.cpp
  4. 18
    0
      Marlin/ultralcd.h

+ 10
- 0
Marlin/Configuration.h 查看文件

@@ -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 REPRAPWORLD_KEYPAD v1.1
342
+// http://reprapworld.com/?products_details&products_id=202&cPath=1591_1626
343
+//#define REPRAPWORLD_KEYPAD
344
+//#define REPRAPWORLD_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(REPRAPWORLD_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 查看文件

@@ -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 REPRAPWORLD_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_REPRAPWORLD_KEYPAD_F3 0
428
+        #define BLEN_REPRAPWORLD_KEYPAD_F2 1
429
+        #define BLEN_REPRAPWORLD_KEYPAD_F1 2
430
+        #define BLEN_REPRAPWORLD_KEYPAD_UP 3
431
+        #define BLEN_REPRAPWORLD_KEYPAD_RIGHT 4
432
+        #define BLEN_REPRAPWORLD_KEYPAD_MIDDLE 5
433
+        #define BLEN_REPRAPWORLD_KEYPAD_DOWN 6
434
+        #define BLEN_REPRAPWORLD_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

+ 51
- 0
Marlin/ultralcd.cpp 查看文件

@@ -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_reprapworld_keypad; // to store the reprapworld_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,24 @@ 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 REPRAPWORLD_KEYPAD
692
+	static void reprapworld_keypad_move_y_down() {
693
+        encoderPosition = 1;
694
+        move_menu_scale = REPRAPWORLD_KEYPAD_MOVE_STEP;
695
+		lcd_move_y();
696
+	}
697
+	static void reprapworld_keypad_move_y_up() {
698
+		encoderPosition = -1;
699
+		move_menu_scale = REPRAPWORLD_KEYPAD_MOVE_STEP;
700
+    	lcd_move_y();
701
+	}
702
+	static void reprapworld_keypad_move_home() {
703
+		//enquecommand_P((PSTR("G28"))); // move all axis home
704
+		// TODO gregor: move all axis home, i have currently only one axis on my prusa i3
705
+		enquecommand_P((PSTR("G28 Y")));
706
+	}
707
+#endif
708
+
690 709
 /** End of menus **/
691 710
 
692 711
 static void lcd_quick_feedback()
@@ -750,6 +769,13 @@ void lcd_init()
750 769
     WRITE(BTN_EN1,HIGH);
751 770
     WRITE(BTN_EN2,HIGH);
752 771
     WRITE(BTN_ENC,HIGH);
772
+    #ifdef REPRAPWORLD_KEYPAD
773
+      pinMode(SHIFT_CLK,OUTPUT);
774
+      pinMode(SHIFT_LD,OUTPUT);
775
+      pinMode(SHIFT_OUT,INPUT);
776
+      WRITE(SHIFT_OUT,HIGH);
777
+      WRITE(SHIFT_LD,HIGH);
778
+    #endif
753 779
 #else
754 780
     pinMode(SHIFT_CLK,OUTPUT);
755 781
     pinMode(SHIFT_LD,OUTPUT);
@@ -796,6 +822,17 @@ void lcd_update()
796 822
     if (lcd_next_update_millis < millis())
797 823
     {
798 824
 #ifdef ULTIPANEL
825
+		#ifdef REPRAPWORLD_KEYPAD
826
+        	if (REPRAPWORLD_KEYPAD_MOVE_Y_DOWN) {
827
+        		reprapworld_keypad_move_y_down();
828
+        	}
829
+        	if (REPRAPWORLD_KEYPAD_MOVE_Y_UP) {
830
+        		reprapworld_keypad_move_y_up();
831
+        	}
832
+        	if (REPRAPWORLD_KEYPAD_MOVE_HOME) {
833
+        		reprapworld_keypad_move_home();
834
+        	}
835
+		#endif
799 836
         if (encoderDiff)
800 837
         {
801 838
             lcdDrawUpdate = 1;
@@ -876,6 +913,20 @@ void lcd_buttons_update()
876 913
     if((blocking_enc<millis()) && (READ(BTN_ENC)==0))
877 914
         newbutton |= EN_C;
878 915
     buttons = newbutton;
916
+    #ifdef REPRAPWORLD_KEYPAD
917
+      // for the reprapworld_keypad
918
+      uint8_t newbutton_reprapworld_keypad=0;
919
+      WRITE(SHIFT_LD,LOW);
920
+      WRITE(SHIFT_LD,HIGH);
921
+      for(int8_t i=0;i<8;i++) {
922
+          newbutton_reprapworld_keypad = newbutton_reprapworld_keypad>>1;
923
+          if(READ(SHIFT_OUT))
924
+              newbutton_reprapworld_keypad|=(1<<7);
925
+          WRITE(SHIFT_CLK,HIGH);
926
+          WRITE(SHIFT_CLK,LOW);
927
+      }
928
+      buttons_reprapworld_keypad=~newbutton_reprapworld_keypad; //invert it, because a pressed switch produces a logical 0
929
+	#endif
879 930
 #else   //read it from the shift register
880 931
     uint8_t newbutton=0;
881 932
     WRITE(SHIFT_LD,LOW);

+ 18
- 0
Marlin/ultralcd.h 查看文件

@@ -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 REPRAPWORLD_KEYPAD
27
+    extern volatile uint8_t buttons_reprapworld_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 REPRAPWORLD_KEYPAD
48
+  	  #define EN_REPRAPWORLD_KEYPAD_F3 (1<<BLEN_REPRAPWORLD_KEYPAD_F3)
49
+  	  #define EN_REPRAPWORLD_KEYPAD_F2 (1<<BLEN_REPRAPWORLD_KEYPAD_F2)
50
+  	  #define EN_REPRAPWORLD_KEYPAD_F1 (1<<BLEN_REPRAPWORLD_KEYPAD_F1)
51
+  	  #define EN_REPRAPWORLD_KEYPAD_UP (1<<BLEN_REPRAPWORLD_KEYPAD_UP)
52
+  	  #define EN_REPRAPWORLD_KEYPAD_RIGHT (1<<BLEN_REPRAPWORLD_KEYPAD_RIGHT)
53
+  	  #define EN_REPRAPWORLD_KEYPAD_MIDDLE (1<<BLEN_REPRAPWORLD_KEYPAD_MIDDLE)
54
+  	  #define EN_REPRAPWORLD_KEYPAD_DOWN (1<<BLEN_REPRAPWORLD_KEYPAD_DOWN)
55
+  	  #define EN_REPRAPWORLD_KEYPAD_LEFT (1<<BLEN_REPRAPWORLD_KEYPAD_LEFT)
56
+
57
+  	  #define LCD_CLICKED ((buttons&EN_C) || (buttons_reprapworld_keypad&EN_REPRAPWORLD_KEYPAD_F1))
58
+  	  #define REPRAPWORLD_KEYPAD_MOVE_Y_DOWN (buttons_reprapworld_keypad&EN_REPRAPWORLD_KEYPAD_DOWN)
59
+  	  #define REPRAPWORLD_KEYPAD_MOVE_Y_UP (buttons_reprapworld_keypad&EN_REPRAPWORLD_KEYPAD_UP)
60
+  	  #define REPRAPWORLD_KEYPAD_MOVE_HOME (buttons_reprapworld_keypad&EN_REPRAPWORLD_KEYPAD_MIDDLE)
61
+    #endif //REPRAPWORLD_KEYPAD
44 62
   #else
45 63
     //atomatic, do not change
46 64
     #define B_LE (1<<BL_LE)

Loading…
取消
儲存