cecell icon

Control_Bandsaw

cecell | PRO | 07/16/24 01:59:50 AM UTC | 0 ⭐ | 10827 👁️ | Never ⏰ | [Arduino]
Arduino |

5.59 KB

|

None

|

0 👍

/

0 👎

#include <Arduino_GigaDisplay_GFX.h>
#include <Arduino_GigaDisplayTouch.h>
 
// Define pins for the touch screen
#define YP A3  // must be an analog pin, use "An" notation!
#define XM A2  // must be an analog pin, use "An" notation!
#define YM 9   // can be a digital pin
#define XP 8   // can be a digital pin
 
#define TS_MINX 100
#define TS_MINY 120
#define TS_MAXX 940
#define TS_MAXY 900
 
GigaDisplay_GFX Display; // Initialize the display
Arduino_GigaDisplayTouch ts; // Initialize the touch screen
 
// Relay pins
const int relay1 = 2;
const int relay2 = 3;
const int relay3 = 4;
 
int touch_x;   // x location where screen was touched
int touch_y;   // y location where screen was touched
 
// Button coordinates
const int button1_x = 20;
const int button1_y = 50;
const int button2_x = 140;
const int button2_y = 50;
const int button3_x = 260;
const int button3_y = 50;
const int button_w = 100;
const int button_h = 50;
 
// Button modes
const bool momentary = true;
const bool toggle = false;
const bool buttonModes[] = {momentary, momentary, toggle};
 
bool relayStates[] = {false, false, false};
 
// Relay pin array for easier handling
const int relayPins[] = {relay1, relay2, relay3};
 
// Define custom colors
#define GD_BLACK 0x0000
#define GD_WHITE 0xFFFF
#define GD_RED   0xF800
#define GD_GREEN 0x07E0
#define GD_BLUE  0x001F
#define GD_ORANGE 0xFD20
#define GD_YELLOW 0xFFE0
#define GD_CYAN   0x07FF
 
void setup() {
  Serial.begin(9600);
  delay(1000); // Wait for the Serial Monitor to initialize
  Serial.println("Initializing display...");
  
  Display.begin();
  ts.begin();
  Display.setRotation(1);
  Display.fillScreen(GD_BLACK);
  Serial.println("Display initialized.");
  
  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  pinMode(relay3, OUTPUT);
 
  drawButtons();
}
 
void loop() {
  uint8_t contact;
  GDTpoint_t myPoint[1];
  contact = ts.getTouchPoints(myPoint);
 
  if (contact > 0) {
    touch_x = myPoint[0].y;
    touch_y = 480 - myPoint[0].x;
    Serial.println("touch_x = " + String(touch_x));
    Serial.println("touch_y = " + String(touch_y));
    Serial.println("myPoint[0].y = " + String(myPoint[0].y));
    Serial.println("myPoint[0].x = " + String(myPoint[0].x));
    
    if (myPoint[0].y > button1_y && myPoint[0].y < button1_y + button_h) {
      if (touch_x > button3_x && touch_x < button3_x + button_w) {
        handleButtonPress(3);
        Serial.println("Button 3 pressed!");
      } else if (touch_x > button2_x && touch_x < button2_x + button_w) {
        handleButtonPress(2);
        Serial.println("Button 2 pressed!");
      } else if (touch_x > button1_x && touch_x < button1_x + button_w) {
        handleButtonPress(1);
        Serial.println("Button 1 pressed!");
      }
    }
  }
}
 
void drawButtons() {
  Display.fillRect(button1_x, button1_y, button_w, button_h, GD_RED);
  Display.fillRect(button2_x, button2_y, button_w, button_h, GD_GREEN);
  Display.fillRect(button3_x, button3_y, button_w, button_h, GD_BLUE);
 
  Display.setCursor(button1_x + 25, button1_y + 20);
  Display.setTextColor(GD_WHITE);
  Display.setTextSize(2);
  Display.print("Relay 1");
 
  Display.setCursor(button2_x + 25, button2_y + 20);
  Display.setTextColor(GD_WHITE);
  Display.setTextSize(2);
  Display.print("Relay 2");
 
  Display.setCursor(button3_x + 25, button3_y + 20);
  Display.setTextColor(GD_WHITE);
  Display.setTextSize(2);
  Display.print("Relay 3");
}
 
void handleButtonPress(int button) {
  pressButton(button);
  delay(200);
 
  if (buttonModes[button - 1] == momentary) {
    digitalWrite(relayPins[button - 1], HIGH);
    releaseButton(button);
    delay(200);
    digitalWrite(relayPins[button - 1], LOW);
  } else if (buttonModes[button - 1] == toggle) {
    relayStates[button - 1] = !relayStates[button - 1];
    digitalWrite(relayPins[button - 1], relayStates[button - 1]);
    releaseButton(button);
  }
}
 
void pressButton(int button) {
  switch (button) {
    case 1:
      Display.fillRect(button1_x, button1_y, button_w, button_h, GD_ORANGE);
      Display.setCursor(button1_x + 25, button1_y + 20);
      Display.setTextColor(GD_WHITE);
      Display.setTextSize(2);
      Display.print("Relay 1");
      break;
    case 2:
      Display.fillRect(button2_x, button2_y, button_w, button_h, GD_YELLOW);
      Display.setCursor(button2_x + 25, button2_y + 20);
      Display.setTextColor(GD_WHITE);
      Display.setTextSize(2);
      Display.print("Relay 2");
      break;
    case 3:
      Display.fillRect(button3_x, button3_y, button_w, button_h, GD_CYAN);
      Display.setCursor(button3_x + 25, button3_y + 20);
      Display.setTextColor(GD_WHITE);
      Display.setTextSize(2);
      Display.print("Relay 3");
      break;
  }
}
 
void releaseButton(int button) {
  switch (button) {
    case 1:
      Display.fillRect(button1_x, button1_y, button_w, button_h, GD_RED);
      Display.setCursor(button1_x + 25, button1_y + 20);
      Display.setTextColor(GD_WHITE);
      Display.setTextSize(2);
      Display.print("Relay 1");
      break;
    case 2:
      Display.fillRect(button2_x, button2_y, button_w, button_h, GD_GREEN);
      Display.setCursor(button2_x + 25, button2_y + 20);
      Display.setTextColor(GD_WHITE);
      Display.setTextSize(2);
      Display.print("Relay 2");
      break;
    case 3:
      Display.fillRect(button3_x, button3_y, button_w, button_h, GD_BLUE);
      Display.setCursor(button3_x + 25, button3_y + 20);
      Display.setTextColor(GD_WHITE);
      Display.setTextSize(2);
      Display.print("Relay 3");
      break;
  }
}
 

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎