Ich bin aktuell an einem Projekt, eine kleine Fräsmaschine per Kabellosem Bedienpult (ESP32 Bluetooth Keyboard) mit Tastern im Handbetrieb verfahren zu lassen.
Dabei soll bei Tasterdruck nicht nur der Tastenbefehl an die Maschine gesendet werden, sondern es soll auf einem kleinen TFT Display am Bedienpult die aktuelle Richtung angezeigt werden (z.B JOG X-, JOG Y-, usw).
Aktuell habe ich aber das Problem, dass wenn ich die Taster halte, der Text mit der Richtung JOGX+ usw. flackert. Ich möchte aber, dass solange die Taster gedrückt werden, der Text ohne zu flackern angezeigt wird.
//Bibliotheken einbinden
#include <BleKeyboard.h>
#include <PCF8574.h>
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
//Bibliotheken einbinden
//Variablen anlegen
int BetriebsartAlt = 0;
int merkerDisplay[17] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
//Variablen anlegen
//Objekte der verschiedenen Klassen anlegen
BleKeyboard bleKeyboard;
PCF8574 m1(0x21);
PCF8574 m2(0x22);
PCF8574 m3(0x24);
PCF8574 m4(0x25);
//Objekte der verschiedenen Klassen anlegen
//Display
#define TFT_CS 33
#define TFT_RST -1
#define TFT_DC 25
const int backlightLed = 26;
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
//Display
void setup() {
//Pins der PCF8574-GPIO-Erweiterungsmodule als INPUT oder OUTPUT konfigurieren
m2.pinMode(P1, INPUT);
m2.pinMode(P2, INPUT);
m2.pinMode(P3, INPUT);
m2.pinMode(P5, INPUT);
m2.pinMode(P6, INPUT);
m2.pinMode(P7, INPUT);
m3.pinMode(P0, INPUT);
m3.pinMode(P1, INPUT);
//Pins der PCF8574-GPIO-Erweiterungsmodule als INPUT oder OUTPUT konfigurieren
//Pins konfigurieren
pinMode(backlightLed, OUTPUT);
//Pins konfigurieren
//Initialisierung der Schnittstellen
bleKeyboard.begin();
Serial.begin(9600);
SPI.begin();
m2.begin();
m3.begin();
//Initialisierung der Schnittstellen
//Display initialisieren
tft.initR(INITR_BLACKTAB);
tft.fillScreen(ST7735_WHITE);
tft.setRotation(3);
tft.setTextColor(ST7735_BLACK);
digitalWrite(backlightLed, HIGH);
tft.setCursor(25, 55);
tft.setTextSize(3);
tft.print("BEDIENPULT");
delay(1500);
tft.fillScreen(ST7735_WHITE);
// Display dauerhafter Text Drehzahl, Vorschub und "JOG"
tft.fillScreen(ST7735_WHITE);
tft.setCursor(2, 8);
tft.setTextSize(2);
tft.print("F=UGS ");
tft.setCursor(85, 8);
tft.print("n=0 %");
tft.setCursor(90, 32);
tft.print("JOG:");
for (int k = 0; k < 2; k++) //Waagerechte Linie unter F und n
{
tft.drawLine(75 + k, 0, 75 + k, 25, ST7735_BLACK);
}
for (int i = 0; i < 2; i++) {
tft.drawLine(0, 25 + i, 160, 25 + i, ST7735_BLACK); //Senkrechte Linie zwischen F und n
}
tft.setCursor(10, 30); //Dauerhafter Text "Betr"
tft.setTextSize(2);
tft.print("Betr:");
//Display initialisieren
}
void loop() {
//Festlegen, dass Pins der PCF8574-Module als Digitale Werte ausgelesen werden
uint8_t resetTaster = m2.digitalRead(P4); // Taster 1: Reset-Taster
uint8_t xTaster = m2.digitalRead(P5); // Taster 2: X-Richtung
uint8_t yTaster = m2.digitalRead(P6); // Taster 3: Y-Richtung
uint8_t zTaster = m2.digitalRead(P7); // Taster 4: Z-Richtung
uint8_t plusTaster = m3.digitalRead(P0); // Taster 5: In Richtung + verfahren
uint8_t minusTaster = m3.digitalRead(P1); // Taster 6: In Richtung - verfahren
uint8_t spindelEinTaster = m3.digitalRead(P2); // Taster 7: Spindel einschalten
uint8_t spindelAusTaster = m3.digitalRead(P3); // Taster 8: Spindel ausschalten
uint8_t ncStartTaster = m3.digitalRead(P4); // Taster 9: NC-Programm starten
uint8_t ncStopTaster = m3.digitalRead(P5); // Taster 10: NC-Programm stoppen
uint8_t greiferAusfTaster = m3.digitalRead(P6); // Taster 11: Greifer ausfahren
uint8_t greiferEinfTaster = m3.digitalRead(P7); // Taster 12: Greifer einfahren
uint8_t greiferOefTaster = m4.digitalRead(P0); // Taster 13: Greifer öffnen
uint8_t greiferSchlieTaster = m4.digitalRead(P1); // Taster 14: Greifer schließen
uint8_t powerSchalter = m2.digitalRead(P1); // Schalter 2: Bedienpult einschalten --> Display über Transistor einschaltbar -->0x22 P1
uint8_t TippSchalter = m2.digitalRead(P2); // Schalter 3: Betriebsart Tippbetrieb -->0x22 P2
uint8_t AutoSchalter = m2.digitalRead(P3); // Schalter 3: Betriebsart Automatikbetrieb -->0x22 P3
//Festlegen, dass Pins der PCF8574-Module als Digitale Werte ausgelesen werden
//Wenn der Betriebsartschalter auf Tippbetrieb ist
if ((TippSchalter == 1) && (AutoSchalter == 0)) {
if (BetriebsartAlt == 1) {
tft.fillRect(10, 50, 150, 200, ST7735_WHITE);
BetriebsartAlt = 0;
}
delay(20);
//Wenn der Betriebsartschalter auf Tippbetrieb ist
if ((xTaster == LOW) && (plusTaster == LOW)) { //JOG X+
bleKeyboard.press('d'); //
delay(10); // //
tft.setCursor(93, 50); //
tft.setTextSize(2); //
tft.print("X+"); // //
} //
else if ((xTaster == HIGH) || (plusTaster == HIGH)) { //
delay(10); //
bleKeyboard.release('d'); //
tft.fillRect(93, 50, 30, 20, ST7735_WHITE); //
merkerDisplay[0] = 0; //
} //
if ((xTaster == LOW) && (minusTaster == LOW)) { //JOG X-
bleKeyboard.press('a'); //
delay(10); //
tft.setCursor(93, 50); //
tft.setTextSize(2); //
tft.print("X-"); //
} //
else if ((xTaster == HIGH) || (minusTaster == HIGH)) { //
delay(10); //
bleKeyboard.release('a'); //
tft.fillRect(93, 50, 30, 20, ST7735_WHITE); //
} //
if ((yTaster == LOW) && (plusTaster == LOW)) { //JOG Y+
bleKeyboard.press('w'); //
delay(10); //
tft.setCursor(93, 50); //
tft.setTextSize(2); //
tft.print("Y+"); //
} //
else if ((yTaster == HIGH) || (plusTaster == HIGH)) { //
delay(10); //
bleKeyboard.release('w'); //
tft.fillRect(93, 50, 30, 20, ST7735_WHITE); //
} //
if ((yTaster == LOW) && (minusTaster == LOW)) { //JOG Y-
bleKeyboard.press('s'); //
delay(10); //
tft.setCursor(93, 50); //
tft.setTextSize(2); //
tft.print("Y-"); //
} //
else if ((yTaster == HIGH) || (minusTaster == HIGH)) { //
delay(10); //
bleKeyboard.release('s'); //
tft.fillRect(93, 50, 30, 20, ST7735_WHITE); //
} //
if ((zTaster == LOW) && (plusTaster == LOW)) { //JOG Z+
bleKeyboard.press('e'); //
delay(10); //
tft.setCursor(93, 50); //
tft.setTextSize(2); //
tft.print("Z+"); //
} //
else if ((zTaster == HIGH) || (plusTaster == HIGH)) { //
delay(10); //
bleKeyboard.release('e'); //
tft.fillRect(93, 50, 30, 20, ST7735_WHITE); //
} //
if ((zTaster == LOW) && (minusTaster == LOW)) { //JOG Z-
bleKeyboard.press('q'); //
delay(10); //
tft.setCursor(93, 50); //
tft.setTextSize(2); //
tft.print("Z-"); //
} //
else if ((zTaster == HIGH) || (minusTaster == HIGH)) { //
delay(10); //
bleKeyboard.release('q'); //
tft.fillRect(93, 50, 30, 20, ST7735_WHITE); //
} //
}
if ((AutoSchalter == 1) && (TippSchalter == 0)) {
//Wenn Betriebartschalter auf Automatikbetrieb
if (BetriebsartAlt == 0) {
tft.fillRect(10, 50, 60, 30, ST7735_WHITE);
BetriebsartAlt = 1;
}
delay(20);
tft.setCursor(10, 50);
tft.setTextSize(2);
tft.print("Auto");
tft.setCursor(10, 70);
tft.setTextSize(2);
tft.print("Eingaben nur ");
tft.setCursor(10, 85);
tft.setTextSize(2);
tft.print("per Laptop ");
tft.setCursor(10, 103);
tft.setTextSize(2);
tft.print("bzw. UGS ");
tft.setCursor(93, 50);
tft.setTextSize(2);
tft.print("N/A");
}
//Wenn Betriebartschalter auf Automatikbetrieb
}