Serial read and write buffer rfid mit neuem Wert

Guten Abend alle zusammen,

ich hoffe mir kann jemand helfen, wenn ich euch die Situation genau erkläre.

Situation:

Rfid Tag bekommt als Name die 15
Rfid Tag wird gelesen
der Name soll um 1 reduziert werden
Rfid Tag wird beschrieben

Lesen Auszug

  byte buffer2[18];
  block = 1;

  status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, 1, &key, &(mfrc522.uid)); //line 834
  if (status != MFRC522::STATUS_OK) {
    Serial.print(F("Authentication failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
  }

  status = mfrc522.MIFARE_Read(block, buffer2, &len);
  if (status != MFRC522::STATUS_OK) {
    Serial.print(F("Reading failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
  }

  //PRINT LAST NAME
  for (uint8_t i = 0; i < 16; i++) {
    Serial.write(buffer2[i] );
  }

  //----------------------------------------

  Serial.println(F("\n**End Reading**\n"));

Schreiben Auszug

  Serial.print(F("Card UID:"));    //Dump UID
  for (byte i = 0; i < mfrc522.uid.size; i++) {
    Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
    Serial.print(mfrc522.uid.uidByte[i], HEX);
  }
  Serial.print(F(" PICC type: "));   // Dump PICC type
  MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak);
  Serial.println(mfrc522.PICC_GetTypeName(piccType));

  byte buffer[34];
  byte block;
  MFRC522::StatusCode status;
  byte len;

  Serial.setTimeout(20000L) ;     // wait until 20 seconds for input from serial
  // Ask personal data: Family name
 [b] Serial.println(F("Type Family name, ending with #"));
  len = Serial.readBytesUntil('#', (char *) buffer, 30) ; // read family name from serial
  for (byte i = len; i < 30; i++) buffer[i] = ' ';     // pad with spaces[/b]

  block = 1;
  //Serial.println(F("Authenticating using key A..."));
  status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(mfrc522.uid));
  if (status != MFRC522::STATUS_OK) {
    Serial.print(F("PCD_Authenticate() failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
  }
  else Serial.println(F("PCD_Authenticate() success: "));

  // Write block
  status = mfrc522.MIFARE_Write(block, buffer, 16);
  if (status != MFRC522::STATUS_OK) {
    Serial.print(F("MIFARE_Write() failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
  }
  else Serial.println(F("MIFARE_Write() success: "));

  block = 2;
  //Serial.println(F("Authenticating using key A..."));
  status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, block, &key, &(mfrc522.uid));
  if (status != MFRC522::STATUS_OK) {
    Serial.print(F("PCD_Authenticate() failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
  }

  // Write block
  status = mfrc522.MIFARE_Write(block, &buffer[16], 16);
  if (status != MFRC522::STATUS_OK) {
    Serial.print(F("MIFARE_Write() failed: "));
    Serial.println(mfrc522.GetStatusCodeName(status));
    return;
  }
  else Serial.println(F("MIFARE_Write() success: "));

 


  Serial.println(" ");

bei fett soll der neue Wert rein

Danke an alle
und einen schönen Abend

Ok ... sehe kein Fragezeichen.

Was soll der Sketch (also beide Fetzen) machen, was passiert statt Dessen?
Etwas mehr als 'Macht Ihr Mal' dürfte von Dir schon kommen.

MfG

Entschuldige bitte,

ich häng so lang dran, da setzt man schnell zuviel voraus.

Im ersten Schritt beschreibe ich einen Tag mit dem "Wert" 15 wo der Name hin soll.
Im zweiten Schritt halte ich den Tag an ein Gerät. Es soll geprüft werden, ob Wert über Null,
dann Relais anziehen und neuen Wert = alter Wert -1 schreiben

Da könnte ich jetzt fragen: Und warum machst Du es dann nicht?

Du kannst einen Wert schreiben, Du kannst einen Wert lesen.
Vom gelesenen Wert 1 abzuziehen sollte nicht das Problem sein.
Du hast also alles, was Du brauchst.

Evtl. solltest Du ein paar serelle Ausgaben in Deinen (geheimen) Sketch schreiben, um zu sehen, was er wirklich macht.

Wo klemmt es denn konkret?

Gruß Tommy

for (uint8_t i = 0; i < 16; i++) {
Serial.write(buffer2 );
so bekomme ich den Wert.
Aber keine Ahnung wie ich da 1 abziehe und dann zurück sende

Was steht denn in buffer2?
Wenn das 0x31, 0x35, 0x00 ist oder 49, 53, 0 oder '1', '5', '\0' (also "15") dann solltest Du Dich über atoi schlau machen (umgekehrt itoa)

Wenn es das nicht ist, dann fehlen hier Infos von Dir.

Gruß Tommy

Danke,

probiere ich