Daten aus C# Anwendung lesen

Hallo zusammen,

ich sende aus meiner C#-Anwendung Befehle (REFERENZ / HÖHER / NIEDRIEGER usw.) an einen Arduino. Jetzt versuche ich beim auslesen auf dem UNO die Werte entsprechen zu filtern.
Aktuell habe ich es so versucht:

String a;

void loop(){
  String a = Serial.read();
  if (a == "REFERENZ"){
    digitalWrite(2, HIGH);
    winkelWert++;
  }
}

Leider nimmt er das so nicht an.
Gibt es denn einen anderen Befehl um diese Strings entsprechend zu filtern?

Vielleicht kannst du dir hier was abschauen

Ein Read liefert ein Int.
Ein Int kann niemals == "REFERENZ" sein.

An einem kompletten Sketch kann man besser Ursachen erkennen.
Deine wenigen Zeilen beinhalten mehrere Fehler.
Der Rückgabewert von read() ist 1 (in Worten EIN) Zeichen, keine Zeichenkette.
Wer ist winkelWert?
Was verstehst Du unter filtern?

Ich denke, da fehlen einige wesentliche Grundlagenkenntnisse.

Gruß Tommy

Hallo,

damit wird nur ein Zeichen aus dem Empfangsbuffer gelesen und nicht der ganze String.

Mach dich hier mal schlau:

Das geht zwar, macht aber nicht das was du willst.
Serial.read() liefert eine -1 oder einen Wert 0 .. 255, aber niemals einen String mit dem Text "REFERENZ".
Bei Serieller Übertragung ist außerdem immer die Frage, wann sie "fertig" ist. Gern wird dafür ein Zeilenende-Zeichen genommen.

Danke für die Tipps, soweit funktioniert das:

int winkelWert = 4;
int temperatur = 23;
String referenzStatus = "OK";
String lichtSchrankeStatus = "AUS";
int analogWertWinkelsensor = 315;
String b = "REFERENZ";

void setup() {
  Serial.begin(19200); //1bit=10µs
  Serial.setTimeout(100);
  pinMode(2, OUTPUT);

  //digitalWrite(2,HIGH);
}

void loop() {

  int lichtSchranke = digitalRead(2);
  if (lichtSchranke == 1){
    lichtSchrankeStatus="AN";
  }
  if (lichtSchranke == 0){
    lichtSchrankeStatus="AUS";
  }
  Serial.print(winkelWert, 1); Serial.print("|"); Serial.print(temperatur); Serial.print("|"); Serial.print(referenzStatus); Serial.print("|"); Serial.print(lichtSchrankeStatus); Serial.print("|"); Serial.print(analogWertWinkelsensor); Serial.println("|");
  delay(222);

  String a = Serial.readStringUntil('|');
  Serial.println(a);
  if (a == b){
    digitalWrite(2, HIGH);
  }
  else{
    digitalWrite(2,LOW);
  }
}

Sobald "REFERENZ" gelesen wird, schaltet der Ausgang.

Das ganze ist nur mein "Bastelprogramm", der richtige Code wird erst editiert wenn das funktioniert :slight_smile:

Danke!

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.