mirror of
https://github.com/MarlinFirmware/Marlin.git
synced 2024-11-24 20:43:32 +00:00
349 lines
16 KiB
Arduino
349 lines
16 KiB
Arduino
|
/*
|
||
|
|
||
|
Touch4WSetup.pde
|
||
|
|
||
|
Use this example to figure out the ranges for of the active area of a 4-wire resistive
|
||
|
touch panel.
|
||
|
|
||
|
>>> 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 following list is incomplete. The complete list of supported
|
||
|
// devices with all constructor calls 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, 8); // 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_DOGM128_2X 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(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new white HalTec OLED)
|
||
|
//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|U8G_I2C_OPT_DEV_0); // I2C / TWI
|
||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST); // Fast I2C / TWI
|
||
|
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send AC
|
||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||
|
//U8GLIB_SSD1306_ADAFRUIT_128X64 u8g(10, 9); // 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); // I2C / TWI
|
||
|
//U8GLIB_SH1106_128X64 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||
|
//U8GLIB_SH1106_128X64 u8g(4, 5, 6, 7); // SW SPI Com: SCK = 4, MOSI = 5, CS = 6, A0 = 7 (new blue HalTec OLED)
|
||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
|
||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST); // Dev 0, Fast I2C / TWI
|
||
|
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK); // Display which does not send ACK
|
||
|
//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_UC1611_DOGM240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||
|
//U8GLIB_UC1611_DOGM240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||
|
//U8GLIB_UC1611_DOGM240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||
|
//U8GLIB_UC1611_DOGXL240 u8g(U8G_I2C_OPT_NONE); // I2C
|
||
|
//U8GLIB_UC1611_DOGXL240 u8g(13, 11, 10, 9); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
|
||
|
//U8GLIB_UC1611_DOGXL240 u8g(10, 9); // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are SCK = 13 and MOSI = 11)
|
||
|
//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_LD7032_60x32 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||
|
//U8GLIB_LD7032_60x32 u8g(11, 12, 9, 10, 8); // SPI Com: SCK = 11, MOSI = 12, CS = 9, A0 = 10, RST = 8 (SW SPI Nano Board)
|
||
|
//U8GLIB_UC1608_240X64 u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||
|
//U8GLIB_UC1608_240X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||
|
//U8GLIB_UC1608_240X64_2X u8g(13, 11, 10, 9, 8); // SW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||
|
//U8GLIB_UC1608_240X64 u8g(10, 9, 8); // HW SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
|
||
|
//U8GLIB_UC1608_240X64_2X u8g(10, 9, 8); // HW 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_128X128 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
|
||
|
//U8GLIB_HT1632_24X16 u8g(3, 2, 4); // WR = 3, DATA = 2, CS = 4
|
||
|
//U8GLIB_SSD1351_128X128_332 u8g(13, 11, 8, 9, 7); // Arduino UNO: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||
|
//U8GLIB_SSD1351_128X128_332 u8g(76, 75, 8, 9, 7); // Arduino DUE: SW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||
|
//U8GLIB_SSD1351_128X128_332 u8g(8, 9, 7); // Arduino: HW SPI Com: SCK = 13, MOSI = 11, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(76, 75, 8, 9, 7); // Arduino DUE, SW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||
|
//U8GLIB_SSD1351_128X128_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (http://electronics.ilsoft.co.uk/ArduinoShield.aspx)
|
||
|
//U8GLIB_SSD1351_128X128GH_332 u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||
|
//U8GLIB_SSD1351_128X128GH_HICOLOR u8g(8, 9, 7); // Arduino, HW SPI Com: SCK = 76, MOSI = 75, CS = 8, A0 = 9, RESET = 7 (Freetronics OLED)
|
||
|
|
||
|
//================================================================
|
||
|
// Setup 4-Wire Resistive Touch Panel
|
||
|
|
||
|
uint8_t tp_left = A3;
|
||
|
uint8_t tp_right = A5;
|
||
|
uint8_t tp_top = A4;
|
||
|
uint8_t tp_bottom = A2;
|
||
|
|
||
|
#define X_START 120
|
||
|
#define X_END 140
|
||
|
#define Y_START 120
|
||
|
#define Y_END 140
|
||
|
|
||
|
#define PULLUP_THRESHOLD 235
|
||
|
|
||
|
//================================================================
|
||
|
// Touch Panel Code
|
||
|
|
||
|
/* touch panel dimension */
|
||
|
struct tpd_struct
|
||
|
{
|
||
|
/* raw value */
|
||
|
uint8_t raw;
|
||
|
|
||
|
/* calibration values */
|
||
|
uint8_t start;
|
||
|
uint8_t end;
|
||
|
|
||
|
/* user values */
|
||
|
uint8_t range; /* result will have range fron 0..range (including the value of range) */
|
||
|
|
||
|
uint8_t result; /* output value: position [0...range] */
|
||
|
uint8_t is_pressed; /* output value: pressed (=1) or not pressed (=0) */
|
||
|
uint8_t is_update; /* will be set to 1 if result or is_pressed has been updated */
|
||
|
};
|
||
|
|
||
|
struct tp_struct
|
||
|
{
|
||
|
struct tpd_struct x;
|
||
|
struct tpd_struct y;
|
||
|
uint8_t is_pressed; /* combination of x.is_pressed && y.is_pressed */
|
||
|
uint8_t is_update;
|
||
|
};
|
||
|
|
||
|
struct tp_struct tp;
|
||
|
|
||
|
/* map raw value to 0...range (result) */
|
||
|
void tpd_map_touch_position(struct tpd_struct *d, uint8_t raw)
|
||
|
{
|
||
|
uint8_t is_pressed;
|
||
|
uint16_t p;
|
||
|
uint8_t start, end;
|
||
|
|
||
|
d->raw = raw;
|
||
|
|
||
|
start = d->start;
|
||
|
end = d->end;
|
||
|
|
||
|
/* check if position is within active area; store result in "is_pressed" */
|
||
|
is_pressed = 1;
|
||
|
if ( raw >= PULLUP_THRESHOLD )
|
||
|
{
|
||
|
d->result = 0;
|
||
|
is_pressed = 0;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
/* update start and end */
|
||
|
if ( raw < start )
|
||
|
{
|
||
|
start = raw;
|
||
|
d->start = raw;
|
||
|
}
|
||
|
if ( raw > end )
|
||
|
{
|
||
|
end = raw;
|
||
|
d->end = raw;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/* store "is_pressed" in the global structure, set update flag */
|
||
|
if ( d->is_pressed != is_pressed )
|
||
|
d->is_update = 1;
|
||
|
d->is_pressed = is_pressed;
|
||
|
|
||
|
/* map "raw" value into target range */
|
||
|
if ( is_pressed != 0 )
|
||
|
{
|
||
|
p = raw;
|
||
|
p -= start;
|
||
|
p *= d->range;
|
||
|
end -= start;
|
||
|
p /= end;
|
||
|
|
||
|
if ( d->result != p )
|
||
|
d->is_update = 1;
|
||
|
d->result = p;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void tp_Init(uint8_t width, uint8_t height)
|
||
|
{
|
||
|
tp.x.start = X_START;
|
||
|
tp.x.end = X_END;
|
||
|
tp.x.range = width-1;
|
||
|
|
||
|
tp.y.start = Y_START;
|
||
|
tp.y.end = Y_END;
|
||
|
tp.y.range = height-1;
|
||
|
|
||
|
tp.is_update = 1;
|
||
|
}
|
||
|
|
||
|
void setTouchRawValues(uint8_t x, uint8_t y)
|
||
|
{
|
||
|
tpd_map_touch_position(&(tp.x), x);
|
||
|
tpd_map_touch_position(&(tp.y), y);
|
||
|
|
||
|
tp.is_pressed = tp.x.is_pressed && tp.y.is_pressed;
|
||
|
if ( tp.x.is_update || tp.y.is_update )
|
||
|
tp.is_update = 1;
|
||
|
}
|
||
|
|
||
|
|
||
|
uint8_t getTouchPos(uint8_t hiPin, uint8_t lowPin, uint8_t sensePin, uint8_t dcPin)
|
||
|
{
|
||
|
uint8_t val;
|
||
|
pinMode(dcPin, INPUT);
|
||
|
pinMode(sensePin, INPUT_PULLUP);
|
||
|
pinMode(hiPin, OUTPUT);
|
||
|
pinMode(lowPin, OUTPUT);
|
||
|
|
||
|
digitalWrite(hiPin, HIGH);
|
||
|
digitalWrite(lowPin, LOW);
|
||
|
delay(10);
|
||
|
val = analogRead(sensePin) >> 2;
|
||
|
pinMode(hiPin, INPUT);
|
||
|
pinMode(lowPin, INPUT);
|
||
|
delay(10);
|
||
|
return val;
|
||
|
}
|
||
|
|
||
|
void updateTouchPanel(void)
|
||
|
{
|
||
|
uint8_t tp_raw_x;
|
||
|
uint8_t tp_raw_y;
|
||
|
|
||
|
tp_raw_x = getTouchPos(tp_right, tp_left, tp_bottom, tp_top);
|
||
|
tp_raw_y = getTouchPos(tp_top, tp_bottom, tp_left, tp_right);
|
||
|
|
||
|
setTouchRawValues(tp_raw_x, tp_raw_y);
|
||
|
}
|
||
|
|
||
|
//================================================================
|
||
|
// graphics output and picture loop
|
||
|
|
||
|
void center(u8g_uint_t y, const char *str)
|
||
|
{
|
||
|
u8g_uint_t x;
|
||
|
x = u8g.getWidth();
|
||
|
x -= u8g.getStrWidth(str);
|
||
|
x /= 2;
|
||
|
u8g.drawStr(x, y, str);
|
||
|
}
|
||
|
|
||
|
|
||
|
void draw(void) {
|
||
|
u8g.setFont(u8g_font_6x10);
|
||
|
center( 10, "Touch Panel Setup");
|
||
|
u8g.setPrintPos(0, 20); u8g.print("x_start=");u8g.print((int)tp.x.start);u8g.print(" x_end=");u8g.print((int)tp.x.end);
|
||
|
u8g.setPrintPos(0, 30); u8g.print("y_start=");u8g.print((int)tp.y.start);u8g.print(" y_end=");u8g.print((int)tp.y.end);
|
||
|
u8g.setPrintPos(0, 40); u8g.print("x=");u8g.print((int)tp.x.raw);
|
||
|
u8g.setPrintPos(0, 50); u8g.print("y=");u8g.print((int)tp.y.raw);
|
||
|
}
|
||
|
|
||
|
void setup(void) {
|
||
|
|
||
|
// flip screen, if required
|
||
|
// u8g.setRot180();
|
||
|
u8g.setCursorFont(u8g_font_cursor);
|
||
|
u8g.setCursorStyle(32);
|
||
|
|
||
|
tp_Init(u8g.getWidth(), u8g.getHeight());
|
||
|
|
||
|
tp.is_update = 1;
|
||
|
}
|
||
|
|
||
|
void loop(void) {
|
||
|
|
||
|
// update touch panel and handle return values
|
||
|
updateTouchPanel();
|
||
|
|
||
|
if ( tp.is_pressed != 0 )
|
||
|
u8g.enableCursor();
|
||
|
else
|
||
|
u8g.disableCursor();
|
||
|
|
||
|
u8g.setCursorPos(tp.x.result, u8g.getHeight()-tp.y.result-1);
|
||
|
|
||
|
// picture loop
|
||
|
if ( tp.is_update != 0 )
|
||
|
{
|
||
|
tp.is_update = 0;
|
||
|
u8g.firstPage();
|
||
|
do {
|
||
|
draw();
|
||
|
} while( u8g.nextPage() );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|