Problem beim verarbeiten von gesendeten Werten

Hallo zusammen,

ich versuche, dass wenn ich auf einem TFT Display einen Button betätige ein vorprogrammierter Wert an den Arduino gesendet wird, welcher wiederum wie eine serielle Eingabe für den Arduino zählt und somit eine Funktion getriggert wird.

Meine Frage ist: wie schaffe ich es, dass der Arduino Werte sendet, welche quasi als Eingabe im seriellen Monitor gewertet werden.

Vielleicht gehe ich das auch ganz falsch an... vielen Dank im Voraus!

Hier mein Test-Code bisher:

#if 1

#include <Adafruit_GFX.h>
#include <MCUFRIEND_kbv.h>
MCUFRIEND_kbv tft;
#include <TouchScreen.h>
#define MINPRESSURE 200
#define MAXPRESSURE 1000

// ALL Touch panels and wiring is DIFFERENT
// copy-paste results from TouchScreen_Calibr_native.ino
const int XP = 8, XM = A2, YP = A3, YM = 9;  //320x480 ID=0x9488
const int TS_LEFT = 942, TS_RT = 157, TS_TOP = 990, TS_BOT = 146;

TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);

Adafruit_GFX_Button on_btn, off_btn;

int pixel_x, pixel_y;  //Touch_getXY() updates global vars
bool Touch_getXY(void) {
  TSPoint p = ts.getPoint();
  pinMode(YP, OUTPUT);  //restore shared pins
  pinMode(XM, OUTPUT);
  digitalWrite(YP, HIGH);  //because TFT control pins
  digitalWrite(XM, HIGH);
  bool pressed = (p.z > MINPRESSURE && p.z < MAXPRESSURE);
  if (pressed) {
    pixel_x = map(p.y, TS_LEFT, TS_RT, 0, tft.width());  //.kbv makes sense to me
    pixel_y = map(p.x, TS_TOP, TS_BOT, 0, tft.height());
  }
  return pressed;
}

#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF

void setup(void) {
  Serial.begin(9600);
  uint16_t ID = tft.readID();
  Serial.print("TFT ID = 0x");
  Serial.println(ID, HEX);
  Serial.println("Calibrate for your Touch Panel");
  if (ID == 0xD3D3) ID = 0x9486;  // write-only shield
  tft.begin(ID);
  tft.setRotation(45);  //PORTRAIT
  tft.fillScreen(BLACK);
  on_btn.initButton(&tft, 250, 280, 160, 80, WHITE, CYAN, BLACK, "ON", 2);
  // off_btn.initButton(&tft, 180, 200, 100, 40, WHITE, CYAN, BLACK, "OFF", 2);
  on_btn.drawButton(false);
  // off_btn.drawButton(false);
  tft.fillRect(170, 80, 160, 80, RED);
}

/* two buttons are quite simple
 */
void loop(void) {
  bool down = Touch_getXY();
  on_btn.press(down && on_btn.contains(pixel_x, pixel_y));
  off_btn.press(down && off_btn.contains(pixel_x, pixel_y));
  if (on_btn.justReleased())
    on_btn.drawButton();
  if (off_btn.justReleased())
    off_btn.drawButton();
  if (on_btn.justPressed()) {
    on_btn.drawButton(true);
    //  tft.fillRect(170, 80, 160, 80, GREEN);
    Serial.println("10");
  }
  if (off_btn.justPressed()) {
    off_btn.drawButton(true);

    tft.fillRect(40, 80, 160, 80, RED);
  }
  int incomingByte = 0;  // Für eingehende serielle Daten
  if (Serial.available() > 0) {
    // Lies das eingehende Byte:
    incomingByte = Serial.read();

    // Ausgeben:
    Serial.print("I received: ");
    Serial.println(incomingByte);
    if (incomingByte == 10){
      Serial.println("Success");
    }
  }
}
#endif

triggere einfach durch den Tastendruck die gleiche funktion die auch über den Seriellen Monitor getriggert werden würde..

Es müssen aber Werte mit übergeben werden. Das ist das Problem. Gibt es denn eine Möglichkeit Werte zu senden und zu verarbeiten?

Beschreibe doch mal genau, was das werden soll und wie die Abläufe sein sollen.
Ich habe den Eindruck, Du hast Dich gedanklich in eine Sackgasse manövriert.

Gruß Tommy

Momentan wird meine Funktion durch eine Eingabe im seriellen Monitor ausgelöst.

Meine Eingabe sieht wie folgt aus:
"<wert1,wert2,wert3,wert4,wert5,wert6,wert7,wert8,auslöser>"

Ich übergeben die 8 Werte und den Auslöser. Der Auslöser sorgt nur dafür, dass im Loop die Funktion getriggert wird.

  if (mix == 1) {
    LoadCell.tare();
    Mix(mengeaperol, mengesekt, mengesoda, mengerum, mengesirup, mengegin, mengewodka, mengetequilla);
  }

Diese Funktion wird getriggert:

void Mix(int mengeaperol, int mengesekt, int mengesoda, int mengerum, int mengesirup, int mengegin, int mengewodka, int mengetequilla) {

Ich möchte jetzt quasi die "manuelle Eingabe" im seriellen Monitor durch einen Buttonklick auf dem Touchscreen emulieren und dadurch die Funktion auslösen lassen.

Ich hoffe ich habe das jetzt verständlicher rübergebracht.
Vielen Dank für Deine Mühe!

Also sollen jedem Button die ganzen Werte zugeordnet sein?
Button1 -> Funktion mit Argument 1 - die Mix mit den Werten aufruft
Bei Button2 wird halt der Funktion der Parameter 2 übergeben usw.

Gruß Tommy

Genau, wie Werte sind quasi die Mengenangaben der Flüssigkeiten und je nach dem, was ich für ein Getränk haben will ändern sich die Werte.

z.B. Button 1:
"<10, 100, 10, 0, 0, 100, 0, 10, 1>"

z.B. Button 2:
<0, 10, 10, 100, 0, 10, 0, 10, 1>

Dann mach das doch so, wie ich es beschrieben habe.

void setWerte(byte taste) {
  switch (taste) {
    case 1: Mix(10, 100, 10, 0, 0, 100, 0, 10, 1);
                 break;
    case 2: Mix(0, 10, 10, 100, 0, 10, 0, 10, 1);
                 break;
     ...
    default: Serial.println(F("Falsche Taste"));
   }
}

Gruß Tommy

Wie genau baue ich das in den vorhandenen Code ein? Was wird mit der Funktion erreicht?

Wie löse ich Case 1 und Case 2 aus?

Ich stehe gerade ein bisschen auf dem Schlauch, sorry.

Da ich Deinen Code nicht kenne, kann ich Deine Frage nicht beantworten.
Dort, wo Du die Info über den Tastendruck hast.

Gruß Tommy