Arduino Polska Forum
skrócenie kodu oraz jak usunąć coś z tablicy - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica)
+--- Wątek: skrócenie kodu oraz jak usunąć coś z tablicy (/watek-skr%C3%B3cenie-kodu-oraz-jak-usun%C4%85%C4%87-co%C5%9B-z-tablicy)



skrócenie kodu oraz jak usunąć coś z tablicy - senpuuxd - 01-04-2023

Witam mam problem otóż jak skrócić kod chodzi mi dokładnie żeby w 2 poziomowej tablicy nie musiał wypisywać dla każdego "zbioru" (nie wiem jak to się fachowo nazywa) poroównania z zeskanowanym rfid tagiem
Kod:
if
      ( rfid.uid.uidByte[0] == poprawna_karta2[0][0]&&
      rfid.uid.uidByte[1] == poprawna_karta2[1][0]&&
      rfid.uid.uidByte[2] == poprawna_karta2[2][0]&&
      rfid.uid.uidByte[3] == poprawna_karta2[3][0]
      ||
      rfid.uid.uidByte[0] == poprawna_karta2[0][1]&&
      rfid.uid.uidByte[1] == poprawna_karta2[1][1]&&
      rfid.uid.uidByte[2] == poprawna_karta2[2][1]&&
      rfid.uid.uidByte[3] == poprawna_karta2[3][1]
      ||
      rfid.uid.uidByte[0] == poprawna_karta2[0][2]&&
      rfid.uid.uidByte[1] == poprawna_karta2[1][2]&&
      rfid.uid.uidByte[2] == poprawna_karta2[2][2]&&
      rfid.uid.uidByte[3] == poprawna_karta2[3][2]
      ||
      rfid.uid.uidByte[0] == poprawna_karta2[0][3]&&
      rfid.uid.uidByte[1] == poprawna_karta2[1][3]&&
      rfid.uid.uidByte[2] == poprawna_karta2[2][3]&&
      rfid.uid.uidByte[3] == poprawna_karta2[3][3]
     
    )
próbowałem dać przed pętlą if for( a =0; a<=4; a++) i wpisałem == poprawna_karta2[0][a] ale niestety działa tylko 1 tag to przez pętlę for?? Oraz chciał bym się dowiedzieć jak usunąć/ zmienić coś z tablicy( z tego co zrozumiałem jak wartość to -1 to jest to pomijane)


RE: skrócenie kodu oraz jak usunąć coś z tablicy - Jarewa0606 - 01-04-2023

A dlaczego korzystasz z tablicy dwuwymiarowej?? pokaż cały kod.


RE: skrócenie kodu oraz jak usunąć coś z tablicy - senpuuxd - 01-04-2023

Kod:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <SPI.h>
#include <MFRC522.h>
#define BACKLIGHT_PIN 3
LiquidCrystal_I2C lcd(0x27,16,2);
#define SS_PIN 10
#define RST_PIN 9
unsigned long punkty;
int delayTime = 1500;
int a;

MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class

const byte poprawna_karta2[4][4] = { {0x93,0xD3,0xB3,0xE3,},
                                    {0x7D,0xC0,0x8E,0xD4},
                                    {0xE9,0xD4,0x9F,0x12},
                                    {0x1B,0x1B,0xAC,0x1D} };

void setup() {
  Serial.begin(9600);
  SPI.begin(); // Init SPI bus
  rfid.PCD_Init(); // Init MFRC522
  lcd.init();
  lcd.backlight();
  lcd.home();
  lcd.print ("Grabierz");
  lcd.setCursor(0,1);
  delay(3000);
  lcd.clear();
  }
void loop() {
        
          lcd.setCursor(3,0);
          lcd.print("Wynik:");
          lcd.setCursor(7,1);
          lcd.print(punkty);

  // Look for new card
  if ( ! rfid.PICC_IsNewCardPresent())
    return;

  // Verify if the NUID has been readed
  if ( ! rfid.PICC_ReadCardSerial())
    return;
if
      ( rfid.uid.uidByte[0] == poprawna_karta2[0][0]&&
      rfid.uid.uidByte[1] == poprawna_karta2[1][0]&&
      rfid.uid.uidByte[2] == poprawna_karta2[2][0] &&
      rfid.uid.uidByte[3] == poprawna_karta2[3][0]
      ||
      rfid.uid.uidByte[0] == poprawna_karta2[0][1]&&
      rfid.uid.uidByte[1] == poprawna_karta2[1][1]&&
      rfid.uid.uidByte[2] == poprawna_karta2[2][1] &&
      rfid.uid.uidByte[3] == poprawna_karta2[3][1]
      ||
      rfid.uid.uidByte[0] == poprawna_karta2[0][2]&&
      rfid.uid.uidByte[1] == poprawna_karta2[1][2]&&
      rfid.uid.uidByte[2] == poprawna_karta2[2][2] &&
      rfid.uid.uidByte[3] == poprawna_karta2[3][2]
      ||
      rfid.uid.uidByte[0] == poprawna_karta2[0][3]&&
      rfid.uid.uidByte[1] == poprawna_karta2[1][3]&&
      rfid.uid.uidByte[2] == poprawna_karta2[2][3] &&
      rfid.uid.uidByte[3] == poprawna_karta2[3][3]
  
    )
  
    {
          lcd.clear();
          lcd.setCursor(3,0);
          lcd.print("Przyznano");
          lcd.setCursor(3,1);
          lcd.print("2 punkty!!");
          delay(delayTime);
          lcd.clear();
          punkty=punkty+2;
          return;
    
    }
else{
          lcd.clear();
          lcd.setCursor(2,0);
          lcd.print("Niepoprawna");
          lcd.setCursor(3,1);
          lcd.print("Karta!!!");
          delay(delayTime);
          lcd.clear();
        return;
    }


  // Halt PICC
  rfid.PICC_HaltA();

  // Stop encryption on PCD
  rfid.PCD_StopCrypto1();
}

korzystam z 2wymiarowej bo finalnie ma być około 50 tagów


RE: skrócenie kodu oraz jak usunąć coś z tablicy - kaczakat - 01-04-2023

4 bajty to liczba uint32_t, po co to trzymać w tablicy dwuwymiarowej. Miałbyś if (liczba1==liczba2) dla całej karty.
Warunki muszą być spełnione wszystkie, więc coś w ten desen:
Kod:
for( int i =0; i<2; i++)//
{
bool czyToDobraKarta=1;
for (( int j =0; j<4; j++) (tu też miałeś błąd <=)
{
if (! rfid.uid.uidByte[j] == poprawna_karta2[j][i])
{
czyToDobraKarta=0; //  
}
//tutaj jeśli czyToDobraKarta  to można przerwać, będzie 0 gdy w sprawdzanych bajtach choć jeden nie pasował
}
}