initial import
This commit is contained in:
		
							
								
								
									
										61
									
								
								Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,61 @@
 | 
			
		||||
ARDUINO_DIR = /home/dan/projects/arduino-1.8.9
 | 
			
		||||
ARDUINO_PLATFORM_LIB_PATH = /home/dan/.arduino15/packages/esp32/hardware/esp32/1.0.2/libraries
 | 
			
		||||
USER_LIB_PATH = /home/dan/Arduino/libraries
 | 
			
		||||
ARDUINO = $(ARDUINO_DIR)/arduino
 | 
			
		||||
CTAGS_PATH = $(ARDUINO_DIR)/tools-builder/ctags/5.8-arduino11/ctags
 | 
			
		||||
 | 
			
		||||
# ctags command: append, flags unsort (as will be sorted after) and specify filename
 | 
			
		||||
# use ETAGS format
 | 
			
		||||
CTAGS_CMD = $(CTAGS_PATH) -auef
 | 
			
		||||
TAGS_FILE = TAGS
 | 
			
		||||
 | 
			
		||||
all:
 | 
			
		||||
	$(ARDUINO) --upload tetris.ino
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Local sources
 | 
			
		||||
 | 
			
		||||
LOCAL_C_SRCS    ?= $(wildcard *.c)
 | 
			
		||||
LOCAL_CPP_SRCS  ?= $(wildcard *.cpp)
 | 
			
		||||
LOCAL_CC_SRCS   ?= $(wildcard *.cc)
 | 
			
		||||
LOCAL_PDE_SRCS  ?= $(wildcard *.pde)
 | 
			
		||||
LOCAL_INO_SRCS  ?= $(wildcard *.ino)
 | 
			
		||||
LOCAL_AS_SRCS   ?= $(wildcard *.S)
 | 
			
		||||
LOCAL_SRCS      = $(LOCAL_C_SRCS)   $(LOCAL_CPP_SRCS) \
 | 
			
		||||
		$(LOCAL_CC_SRCS)   $(LOCAL_PDE_SRCS) \
 | 
			
		||||
		$(LOCAL_INO_SRCS) $(LOCAL_AS_SRCS)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Determine Arduino libs that are used
 | 
			
		||||
# first do platform-specific libraries
 | 
			
		||||
# then "core" libraries
 | 
			
		||||
# then sketchbook libraries and user-installed libraries
 | 
			
		||||
ifndef ARDUINO_LIBS
 | 
			
		||||
    ARDUINO_LIBS_NAMES1 = $(filter $(notdir $(wildcard $(ARDUINO_PLATFORM_LIB_PATH)/*)), \
 | 
			
		||||
	$(shell sed -ne 's/^ *\# *include *[<\"]\(.*\)\.h[>\"]/\1/p' $(LOCAL_SRCS)))
 | 
			
		||||
    ARDUINO_LIBS += $(foreach lib,$(ARDUINO_LIBS_NAMES1),$(ARDUINO_PLATFORM_LIB_PATH)/$(lib))
 | 
			
		||||
 | 
			
		||||
    ARDUINO_LIBS_NAMES2 = $(filter $(notdir $(wildcard $(ARDUINO_DIR)/libraries/*)), \
 | 
			
		||||
	$(shell sed -ne 's/^ *\# *include *[<\"]\(.*\)\.h[>\"]/\1/p' $(LOCAL_SRCS)))
 | 
			
		||||
    ARDUINO_LIBS += $(foreach lib,$(ARDUINO_LIBS_NAMES2),$(ARDUINO_DIR)/libraries/$(lib))
 | 
			
		||||
 | 
			
		||||
# ARDUINO_LIBS_NAMES = $(filter $(notdir $(wildcard $(ARDUINO_SKETCHBOOK)/libraries/*)), \
 | 
			
		||||
#     $(shell sed -ne 's/^ *\# *include *[<\"]\(.*\)\.h[>\"]/\1/p' $(LOCAL_SRCS)))
 | 
			
		||||
# ARDUINO_LIBS += $(foreach lib,$(ARDUINO_LIBS_NAMES),$(ARDUINO_SKETCHBOOK)/libraries/$(lib))
 | 
			
		||||
 | 
			
		||||
    ARDUINO_LIBS_NAMES3 = $(filter $(notdir $(wildcard $(USER_LIB_PATH)/*)), \
 | 
			
		||||
	$(shell sed -ne 's/^ *\# *include *[<\"]\(.*\)\.h[>\"]/\1/p' $(LOCAL_SRCS)))
 | 
			
		||||
    ARDUINO_LIBS += $(foreach lib,$(ARDUINO_LIBS_NAMES3),$(USER_LIB_PATH)/$(lib))
 | 
			
		||||
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
.PHONY: tags
 | 
			
		||||
tags:
 | 
			
		||||
	rm -f $(TAGS_FILE)
 | 
			
		||||
	@echo "Generating tags for local sources: "
 | 
			
		||||
	$(CTAGS_CMD) $(TAGS_FILE) --langmap=c++:+.ino.pde $(LOCAL_SRCS)
 | 
			
		||||
ifneq ($(words $(ARDUINO_LIBS)), 0)
 | 
			
		||||
		@echo "Generating tags for project libraries: "
 | 
			
		||||
		$(CTAGS_CMD) $(TAGS_FILE) -R $(ARDUINO_LIBS)
 | 
			
		||||
endif
 | 
			
		||||
#sort $(TAGS_FILE) -o $(TAGS_FILE)
 | 
			
		||||
							
								
								
									
										136
									
								
								tetris.ino
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										136
									
								
								tetris.ino
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,136 @@
 | 
			
		||||
#include <Arduino.h>
 | 
			
		||||
#include <TFT_eSPI.h>
 | 
			
		||||
#include <SPI.h>
 | 
			
		||||
 | 
			
		||||
TFT_eSPI tft = TFT_eSPI();       // Invoke custom library
 | 
			
		||||
// pins are defined un User_Setup.h
 | 
			
		||||
 | 
			
		||||
const int BTN1_PIN = 25;
 | 
			
		||||
volatile bool btn1_pressed = false;
 | 
			
		||||
const int BTN2_PIN = 33;
 | 
			
		||||
volatile bool btn2_pressed = false;
 | 
			
		||||
 | 
			
		||||
// forward declarations
 | 
			
		||||
void IRAM_ATTR isr1();
 | 
			
		||||
void IRAM_ATTR isr2();
 | 
			
		||||
 | 
			
		||||
void setup() {
 | 
			
		||||
  tft.init();   // initialize a ST7735S chip
 | 
			
		||||
 | 
			
		||||
  // set up the buttons and the interrupts
 | 
			
		||||
  pinMode(BTN1_PIN, INPUT_PULLUP);
 | 
			
		||||
  attachInterrupt(BTN1_PIN, isr1, FALLING);
 | 
			
		||||
  pinMode(BTN2_PIN, INPUT_PULLUP);
 | 
			
		||||
  attachInterrupt(BTN2_PIN, isr2, FALLING);
 | 
			
		||||
 | 
			
		||||
  init_board();
 | 
			
		||||
 | 
			
		||||
  delay(100);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define GRID_WIDTH   12
 | 
			
		||||
#define GRID_HEIGHT  18
 | 
			
		||||
#define BLOCK_SIZE   10
 | 
			
		||||
#define BLOCK_MARGIN  2
 | 
			
		||||
 | 
			
		||||
#define BLOCK_WIDTH    20
 | 
			
		||||
#define BLOCK_HEIGHT   30
 | 
			
		||||
 | 
			
		||||
uint32_t main_board[GRID_WIDTH][GRID_HEIGHT], offboard[GRID_WIDTH][GRID_HEIGHT];
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
init_board()
 | 
			
		||||
{
 | 
			
		||||
  tft.fillScreen(TFT_BLACK);
 | 
			
		||||
 | 
			
		||||
  for(int i = 0; i < GRID_WIDTH; i++)
 | 
			
		||||
    for(int j = 0; j < GRID_HEIGHT; j++)
 | 
			
		||||
      {
 | 
			
		||||
        main_board[i][j] = 0;
 | 
			
		||||
        offboard[i][j]  = 0;
 | 
			
		||||
      }  
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
draw_board()
 | 
			
		||||
{
 | 
			
		||||
  for(int i = 0; i < GRID_WIDTH; i++)
 | 
			
		||||
    for(int j = 0; j < GRID_HEIGHT; j++)
 | 
			
		||||
      {
 | 
			
		||||
        if (main_board[i][j] == offboard[i][j]) continue; // no need to redraw
 | 
			
		||||
        offboard[i][j] = main_board[i][j];
 | 
			
		||||
        tft.fillRect(i*BLOCK_SIZE+BLOCK_MARGIN,j*BLOCK_SIZE+BLOCK_MARGIN,
 | 
			
		||||
                     BLOCK_SIZE-BLOCK_MARGIN,BLOCK_SIZE-BLOCK_MARGIN,
 | 
			
		||||
                     main_board[i][j]);
 | 
			
		||||
      }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint8_t blocks[2][4] =
 | 
			
		||||
  {
 | 
			
		||||
   {0,1,2,3},{0,1,4,5}
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Draw a block of type TYPE with color COLOR, starting at coordinates X, Y.
 | 
			
		||||
// Updates the main_board directly
 | 
			
		||||
void
 | 
			
		||||
draw_block(int x, int y, int type, int color)
 | 
			
		||||
{
 | 
			
		||||
  for (int i = 0; i < 4; i++)
 | 
			
		||||
    {
 | 
			
		||||
      int v = blocks[type][i];
 | 
			
		||||
      int dx = v%4;
 | 
			
		||||
      int dy = v/4;
 | 
			
		||||
      main_board[x+dx][y+dy] = color;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int px = 0, cx = 0;
 | 
			
		||||
int py = 0, cy = 0;
 | 
			
		||||
int cblock_ty = 0;
 | 
			
		||||
void loop() {
 | 
			
		||||
  // if (dy == 0) {
 | 
			
		||||
  //   dx = map(esp_random(), 0, 0xFFFFFFFF, 0, 128/5);
 | 
			
		||||
  // }
 | 
			
		||||
  cy++;
 | 
			
		||||
  if (cy >= GRID_HEIGHT) {
 | 
			
		||||
    cy = 0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (btn1_pressed)
 | 
			
		||||
    {
 | 
			
		||||
      btn1_pressed = false;
 | 
			
		||||
      cx--;
 | 
			
		||||
    }
 | 
			
		||||
  if (btn2_pressed)
 | 
			
		||||
    {
 | 
			
		||||
      btn2_pressed = false;
 | 
			
		||||
      cx++;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  // clear the previous block
 | 
			
		||||
  if (cy != py || cx != px)
 | 
			
		||||
    {
 | 
			
		||||
      draw_block(px, py, cblock_ty, TFT_BLACK);
 | 
			
		||||
    }
 | 
			
		||||
  draw_block(cx, cy, cblock_ty, TFT_RED);
 | 
			
		||||
 | 
			
		||||
  draw_board();
 | 
			
		||||
 | 
			
		||||
  delay(350);
 | 
			
		||||
 | 
			
		||||
  px = cx;
 | 
			
		||||
  py = cy;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void IRAM_ATTR
 | 
			
		||||
isr1()
 | 
			
		||||
{
 | 
			
		||||
  btn1_pressed = true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void IRAM_ATTR
 | 
			
		||||
isr2()
 | 
			
		||||
{
 | 
			
		||||
  btn2_pressed = true;
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user