// Hry s Arduino MEGA logaritmický průběh vodopád dole. #include "arduinoFFT.h" #define LCD_CS A3 // Chip Select goes to Analog 3 #define LCD_CD A2 // Command/Data goes to Analog 2 #define LCD_WR A1 // LCD Write goes to Analog 1 #define LCD_RD A0 // LCD Read goes to Analog 0 #define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin #include // f.k. for Arduino-1.5.2 #include "Adafruit_GFX.h" // Hardware-specific library #include #include MCUFRIEND_kbv lcd; // nastavení lcde, lišta, poloha řádku L & R #define LINEY 260 #define LINEXL 20 #define LINEXR 276 #define DIA 200 //#define MINPRESSURE 200 //#define MAXPRESSURE 1000 #define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF // nastavení propojovacích pinů dotykové vrstvy #define XM A3 #define XP 9 #define YM 8 #define YP A2 // rozsah hodnot pro obě osy dotykové vrstvy #define TS_MINX 0 #define TS_MAXX 320 #define TS_MINY 0 #define TS_MAXY 240 int c=0; #define SAMPLES 512 //Must be a power of 2 #define SAMPLING_FREQUENCY 1000 //Hz, must be less than 10000 due to ADC arduinoFFT FFT = arduinoFFT(); unsigned int sampling_period_us; unsigned long microseconds; double vReal[SAMPLES]; double vImag[SAMPLES]; uint16_t barva=0x0000; uint16_t rgb; int sl,y,yp; int m[SAMPLES/2]; double peak; double power; int volume=50; int OK=0 ; // inicializace řadiče dotykové vrstvy z knihovny, // poslední číslo 470 označuje odpor měřený mezi piny XP a XM TouchScreen dotyk = TouchScreen(XP, YP, XM, YM, 800); // 470 void setup() { Serial.begin(115200); uint16_t ID = lcd.readID(); // if (ID == 0xD3D3) ID = 0x9481; // write-only shield lcd.begin (ID); // zobrazíte // pro otočení lcde stačí změnit číslo // v závorce v rozmezí 0-3 lcd.setRotation(0); lcd.fillScreen(BLACK); // teplotni stupnice lcd.fillRect (0, LINEY - 80, 15, -40, BLUE); lcd.fillRect (0, LINEY - 120, 15, -40, GREEN); lcd.fillRect (0, LINEY - 160, 15,-40, YELLOW); lcd.fillRect (0, LINEY - 200, 15, -60, RED); // stupnice frekvence lcd.drawLine (LINEXL, LINEY+DIA, LINEXR, LINEY+DIA, WHITE); lcd.setTextColor(YELLOW); lcd.setTextSize(1); for (int i = 0; i <=10; i ++){ lcd.drawLine (LINEXL+i*256/10, LINEY+DIA+1, LINEXL+i*256/10, LINEY+3+DIA, WHITE); lcd.setCursor(LINEXL+i*256/10-5, LINEY+DIA+5); lcd.print(i*50); } lcd.print(" Hz"); sampling_period_us = round(1000000*(1.0/SAMPLING_FREQUENCY)); lcd.setTextColor(WHITE); lcd.setTextSize(4); for(int i=0; i<10; i++){ lcd.setCursor(292,30+38*i); lcd.print(i); } lcd.setTextSize(2); lcd.setCursor(290, 35+380); lcd.print("OK"); } void loop() { for(int j=0; j<199; j++) { TSPoint bod = dotyk.getPoint(); pinMode(XM, OUTPUT); pinMode(YP, OUTPUT); // lcd.drawLine (LINEXL, LINEY+j+1, LINEXR, LINEY+j+1, WHITE); lcd.drawLine (LINEXL, LINEY+j+2, LINEXR, LINEY+ j+2, WHITE); /*Načítání dat*/ for(int i=0; i dotyk.pressureThreshhold) & (bod.y < 500))){ // dotýká se krabičky??? // Serial.println(bod.y); OK=false; // pokud je detekován dotyk na lcdi, // tedy tlak větší než 0, proveď následující if (bod.z > dotyk.pressureThreshhold) { // zpětné nastavení pinů jako výstupních // pro řízení LCD lcde pinMode(XM, OUTPUT); pinMode(YP, OUTPUT); lcd.drawRect(120, 50, 100, 50, YELLOW); lcd.setTextSize(4); lcd.setTextColor(YELLOW); for(int i=0; i<10; i++){ if (bod.x < 190+70*i & bod.x >120+70*i & bod.y > 130 & bod.y < 200 ) { lcd.fillRect(121, 51, 98, 48, BLACK); lcd.setCursor(135, 60); c=c*10+i; if (c>1000) c=0; lcd.print(c); } } if (bod.x < 330+550 & bod.x >280+550 & bod.y > 130 & bod.y < 200 ) OK=true; // uložení dat na SD delay(400); } bod = dotyk.getPoint(); pinMode(XM, OUTPUT); pinMode(YP, OUTPUT); } } }