You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					181 lines
				
				9.3 KiB
			
		
		
			
		
	
	
					181 lines
				
				9.3 KiB
			| 
								 
											13 years ago
										 
									 | 
							
								/*
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  Chess.pde
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  Little Rook Chess
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  >>> Before compiling: Please remove comment from the constructor of the 
							 | 
						||
| 
								 | 
							
								  >>> connected graphics display (see below).
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  Universal 8bit Graphics Library, http://code.google.com/p/u8glib/
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  Copyright (c) 2012, olikraus@gmail.com
							 | 
						||
| 
								 | 
							
								  All rights reserved.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  Redistribution and use in source and binary forms, with or without modification, 
							 | 
						||
| 
								 | 
							
								  are permitted provided that the following conditions are met:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  * Redistributions of source code must retain the above copyright notice, this list 
							 | 
						||
| 
								 | 
							
								    of conditions and the following disclaimer.
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								  * Redistributions in binary form must reproduce the above copyright notice, this 
							 | 
						||
| 
								 | 
							
								    list of conditions and the following disclaimer in the documentation and/or other 
							 | 
						||
| 
								 | 
							
								    materials provided with the distribution.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
							 | 
						||
| 
								 | 
							
								  CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 
							 | 
						||
| 
								 | 
							
								  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
							 | 
						||
| 
								 | 
							
								  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
							 | 
						||
| 
								 | 
							
								  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 
							 | 
						||
| 
								 | 
							
								  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
							 | 
						||
| 
								 | 
							
								  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
							 | 
						||
| 
								 | 
							
								  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
							 | 
						||
| 
								 | 
							
								  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
							 | 
						||
| 
								 | 
							
								  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 
							 | 
						||
| 
								 | 
							
								  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
							 | 
						||
| 
								 | 
							
								  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
							 | 
						||
| 
								 | 
							
								  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "U8glib.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// setup u8g object, please remove comment from one of the following constructor calls
							 | 
						||
| 
								 | 
							
								// IMPORTANT NOTE: The complete list of supported devices is here: http://code.google.com/p/u8glib/wiki/device
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								//U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9);	// SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
							 | 
						||
| 
								 | 
							
								//U8GLIB_NHD27OLED_2X_BW u8g(13, 11, 10, 9);	// SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
							 | 
						||
| 
								 | 
							
								//U8GLIB_NHD27OLED_GR u8g(13, 11, 10, 9);	// SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
							 | 
						||
| 
								 | 
							
								//U8GLIB_NHD27OLED_2X_GR u8g(13, 11, 10, 9);	// SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
							 | 
						||
| 
								 | 
							
								//U8GLIB_NHD31OLED_BW u8g(13, 11, 10, 9);	// SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
							 | 
						||
| 
								 | 
							
								//U8GLIB_NHD31OLED_2X_BW u8g(13, 11, 10, 9);	// SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
							 | 
						||
| 
								 | 
							
								//U8GLIB_NHD31OLED_GR u8g(13, 11, 10, 9);	// SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
							 | 
						||
| 
								 | 
							
								//U8GLIB_NHD31OLED_2X_GR u8g(13, 11, 10, 9);	// SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
							 | 
						||
| 
								 | 
							
								//U8GLIB_DOGS102 u8g(13, 11, 10, 9);		// SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
							 | 
						||
| 
								 | 
							
								//U8GLIB_DOGM132 u8g(13, 11, 10, 9);		// SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
							 | 
						||
| 
								 | 
							
								//U8GLIB_DOGM128 u8g(13, 11, 10, 9);		// SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
							 | 
						||
| 
								 | 
							
								//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
							 | 
						||
| 
								 | 
							
								//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
							 | 
						||
| 
								 | 
							
								//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17);	// SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
							 | 
						||
| 
								 | 
							
								//U8GLIB_ST7920_128X64_4X u8g(18, 16, 17);	// SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
							 | 
						||
| 
								 | 
							
								//U8GLIB_ST7920_192X32_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
							 | 
						||
| 
								 | 
							
								//U8GLIB_ST7920_192X32_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
							 | 
						||
| 
								 | 
							
								//U8GLIB_ST7920_192X32_1X u8g(18, 16, 17);	// SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
							 | 
						||
| 
								 | 
							
								//U8GLIB_ST7920_192X32_4X u8g(18, 16, 17);	// SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
							 | 
						||
| 
								 | 
							
								//U8GLIB_ST7920_192X32_1X u8g(13, 11, 10);	// SPI Com: SCK = en = 13, MOSI = rw = 11, CS = di = 10
							 | 
						||
| 
								 | 
							
								//U8GLIB_ST7920_192X32_4X u8g(10);		// SPI Com: SCK = en = 13, MOSI = rw = 11, CS = di = 10, HW SPI
							 | 
						||
| 
								 | 
							
								//U8GLIB_ST7920_202X32_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
							 | 
						||
| 
								 | 
							
								//U8GLIB_ST7920_202X32_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
							 | 
						||
| 
								 | 
							
								//U8GLIB_ST7920_202X32_1X u8g(18, 16, 17);	// SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
							 | 
						||
| 
								 | 
							
								//U8GLIB_ST7920_202X32_4X u8g(18, 16, 17);	// SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
							 | 
						||
| 
								 | 
							
								//U8GLIB_LM6059 u8g(13, 11, 10, 9);		// SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
							 | 
						||
| 
								 | 
							
								//U8GLIB_LM6063 u8g(13, 11, 10, 9);		// SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
							 | 
						||
| 
								 | 
							
								//U8GLIB_DOGXL160_BW u8g(10, 9);		// SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
							 | 
						||
| 
								 | 
							
								//U8GLIB_DOGXL160_GR u8g(13, 11, 10, 9);	// SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
							 | 
						||
| 
								 | 
							
								//U8GLIB_DOGXL160_2X_BW u8g(13, 11, 10, 9);	// SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
							 | 
						||
| 
								 | 
							
								//U8GLIB_DOGXL160_2X_GR u8g(13, 11, 10, 9);	// SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
							 | 
						||
| 
								 | 
							
								//U8GLIB_PCD8544 u8g(13, 11, 10, 9, 8);		// SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, Reset = 8
							 | 
						||
| 
								 | 
							
								//U8GLIB_PCF8812 u8g(13, 11, 10, 9, 8);		// SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, Reset = 8
							 | 
						||
| 
								 | 
							
								//U8GLIB_KS0108_128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 14, 15, 17, 16); 		// 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs1=14, cs2=15,di=17,rw=16
							 | 
						||
| 
								 | 
							
								//U8GLIB_LC7981_160X80 u8g(8, 9, 10, 11, 4, 5, 6, 7,  18, 14, 15, 17, 16); 	// 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=14 ,di=15,rw=17, reset = 16
							 | 
						||
| 
								 | 
							
								//U8GLIB_LC7981_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7,  18, 14, 15, 17, 16); 	// 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=14 ,di=15,rw=17, reset = 16
							 | 
						||
| 
								 | 
							
								//U8GLIB_LC7981_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7,  18, 14, 15, 17, 16); 	// 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, cs=14 ,di=15,rw=17, reset = 16
							 | 
						||
| 
								 | 
							
								//U8GLIB_ILI9325D_320x240 u8g(18,17,19,U8G_PIN_NONE,16 );  			// 8Bit Com: D0..D7: 0,1,2,3,4,5,6,7 en=wr=18, cs=17, rs=19, rd=U8G_PIN_NONE, reset = 16
							 | 
						||
| 
								 | 
							
								//U8GLIB_SBN1661_122X32 u8g(8,9,10,11,4,5,6,7,14,15, 17, U8G_PIN_NONE, 16); 	// 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 cs1=14, cs2=15,di=17,rw=16,reset = 16
							 | 
						||
| 
								 | 
							
								//U8GLIB_SSD1306_128X64 u8g(13, 11, 10, 9);	// SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
							 | 
						||
| 
								 | 
							
								//U8GLIB_SSD1306_128X64 u8g(10, 9);		// HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are  SCK = 13 and MOSI = 11)
							 | 
						||
| 
								 | 
							
								//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);	// HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are  SCK = 13 and MOSI = 11)
							 | 
						||
| 
								 | 
							
								//U8GLIB_SSD1306_128X32 u8g(13, 11, 10, 9);	// SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
							 | 
						||
| 
								 | 
							
								//U8GLIB_SSD1306_128X32 u8g(10, 9);             // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are  SCK = 13 and MOSI = 11)
							 | 
						||
| 
								 | 
							
								//U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE);	// HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are  SCK = 13 and MOSI = 11)
							 | 
						||
| 
								 | 
							
								//U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9);	// SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
							 | 
						||
| 
								 | 
							
								//U8GLIB_SSD1327_96X96_GR u8g(U8G_I2C_OPT_NONE);	// I2C
							 | 
						||
| 
								 | 
							
								//U8GLIB_SSD1327_96X96_2X_GR u8g(U8G_I2C_OPT_NONE);	// I2C
							 | 
						||
| 
								 | 
							
								//U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8);	// SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
							 | 
						||
| 
								 | 
							
								//U8GLIB_NHD_C12832 u8g(13, 11, 10, 9, 8);	// SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
							 | 
						||
| 
								 | 
							
								//U8GLIB_T6963_240X128 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
							 | 
						||
| 
								 | 
							
								//U8GLIB_T6963_240X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
							 | 
						||
| 
								 | 
							
								//U8GLIB_T6963_128X64 u8g(8, 9, 10, 11, 4, 5, 6, 7, 14, 15, 17, 18, 16); // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7, cs=14, a0=15, wr=17, rd=18, reset=16
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// DOGS102 shield configuration values
							 | 
						||
| 
								 | 
							
								uint8_t uiKeyPrev = 2;
							 | 
						||
| 
								 | 
							
								uint8_t uiKeyNext = 4;
							 | 
						||
| 
								 | 
							
								uint8_t uiKeySelect = 5;
							 | 
						||
| 
								 | 
							
								uint8_t uiKeyBack = 3;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// DOGM128-Shield	 configuration values
							 | 
						||
| 
								 | 
							
								// DOGXL60-Shield configuration values
							 | 
						||
| 
								 | 
							
								//uint8_t uiKeyPrev = 7;
							 | 
						||
| 
								 | 
							
								//uint8_t uiKeyNext = 3;
							 | 
						||
| 
								 | 
							
								//uint8_t uiKeySelect = 2;
							 | 
						||
| 
								 | 
							
								//uint8_t uiKeyBack = 8;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								uint8_t uiKeyCodeFirst = CHESS_KEY_NONE;
							 | 
						||
| 
								 | 
							
								uint8_t uiKeyCodeSecond = CHESS_KEY_NONE;
							 | 
						||
| 
								 | 
							
								uint8_t uiKeyCode = CHESS_KEY_NONE;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void uiSetup(void) {
							 | 
						||
| 
								 | 
							
								  // configure input keys 
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  pinMode(uiKeyPrev, INPUT);           // set pin to input
							 | 
						||
| 
								 | 
							
								  digitalWrite(uiKeyPrev, HIGH);       // turn on pullup resistors
							 | 
						||
| 
								 | 
							
								  pinMode(uiKeyNext, INPUT);           // set pin to input
							 | 
						||
| 
								 | 
							
								  digitalWrite(uiKeyNext, HIGH);       // turn on pullup resistors
							 | 
						||
| 
								 | 
							
								  pinMode(uiKeySelect, INPUT);           // set pin to input
							 | 
						||
| 
								 | 
							
								  digitalWrite(uiKeySelect, HIGH);       // turn on pullup resistors
							 | 
						||
| 
								 | 
							
								  pinMode(uiKeyBack, INPUT);           // set pin to input
							 | 
						||
| 
								 | 
							
								  digitalWrite(uiKeyBack, HIGH);       // turn on pullup resistors
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void uiStep(void)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  uiKeyCodeSecond = uiKeyCodeFirst;
							 | 
						||
| 
								 | 
							
								  if ( digitalRead(uiKeyPrev) == LOW )
							 | 
						||
| 
								 | 
							
								    uiKeyCodeFirst = CHESS_KEY_PREV;
							 | 
						||
| 
								 | 
							
								  else if ( digitalRead(uiKeyNext) == LOW )
							 | 
						||
| 
								 | 
							
								    uiKeyCodeFirst = CHESS_KEY_NEXT;
							 | 
						||
| 
								 | 
							
								  else if ( digitalRead(uiKeySelect) == LOW )
							 | 
						||
| 
								 | 
							
								    uiKeyCodeFirst = CHESS_KEY_SELECT;
							 | 
						||
| 
								 | 
							
								  else if ( digitalRead(uiKeyBack) == LOW )
							 | 
						||
| 
								 | 
							
								    uiKeyCodeFirst = CHESS_KEY_BACK;
							 | 
						||
| 
								 | 
							
								  else 
							 | 
						||
| 
								 | 
							
								    uiKeyCodeFirst = CHESS_KEY_NONE;
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  if ( uiKeyCodeSecond == uiKeyCodeFirst )
							 | 
						||
| 
								 | 
							
								    uiKeyCode = uiKeyCodeFirst;
							 | 
						||
| 
								 | 
							
								  else
							 | 
						||
| 
								 | 
							
								    uiKeyCode = CHESS_KEY_NONE;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void setup() {
							 | 
						||
| 
								 | 
							
								  // rotate screen, if required
							 | 
						||
| 
								 | 
							
								  u8g.setRot180();
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  uiSetup();
							 | 
						||
| 
								 | 
							
								  chess_Init(u8g.getU8g(), 0);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void loop() {  
							 | 
						||
| 
								 | 
							
								  uint8_t keyCode = CHESS_KEY_NONE;
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  u8g.firstPage();
							 | 
						||
| 
								 | 
							
								  do {
							 | 
						||
| 
								 | 
							
								    chess_Draw();
							 | 
						||
| 
								 | 
							
								    uiStep();
							 | 
						||
| 
								 | 
							
								    if ( uiKeyCode != CHESS_KEY_NONE )
							 | 
						||
| 
								 | 
							
								      keyCode = uiKeyCode;
							 | 
						||
| 
								 | 
							
								  } while( u8g.nextPage() );
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  u8g_Delay(10);
							 | 
						||
| 
								 | 
							
								  chess_Step(keyCode);
							 | 
						||
| 
								 | 
							
								  uiStep();
							 | 
						||
| 
								 | 
							
								  keyCode = uiKeyCode;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 |