Szkic w Arduino: co to jest, do czego się go używa i jak zbudowane są te programy?

Ostatnia aktualizacja: 03/09/2022
Struktura szkicu w Arduino: czym jest, do czego służy i jak zbudowane są te programy

Szkic jest jednym z najważniejszych elementów Środowisko programistyczne IDEJeśli więc chcesz stać się prawdziwym ekspertem, konieczna jest znajomość struktury szkiców.

Informacje te można znaleźć w poniższych akapitach. Wyjaśnimy szczegółowo, czym jest Sketch i do czego służą te programy. Także Ty Pokażemy wszystkie części Kod Arduino.

Zachęcamy do dalszej lektury do końca, ponieważ znajdziesz tam informacje na temat Przykładowe szkice, z których możesz skorzystać nauczyć się programować. Zajrzyj.

Czym jest Arduino Sketch i do czego służą te programy?

Jeśli pójdziesz do utwórz projekt z płytką Arduino Nie będziesz musiał używać pinów tylko do łączenia różnych elementów między płytkąBędziesz potrzebować potrzebnych obwodów i podzespołów. Będziesz musiał również zaprogramować model Arduino tak, aby mógł emitować sygnały elektroniczne i projekt mógł być kontynuowany. Na przykład, jeśli tworzysz robota, na pierwszym etapie musisz poprawnie wykonać niezbędne połączenia. Ale to w niczym nie pomoże, bo robot pozostanie nieruchomy..

Po co Będziesz musiał zaprogramować ich ruchy aby projekt miał sens. Aby robot się poruszał, kontynuując przykład, należy skonfigurować płytkę Arduino w środowisku IDE. Jest to oprogramowanie, które wykorzystuje specjalny język programowania i dzieli każdy projekt na szkic. Dlatego Szkic Arduino to program, w którym przechowywany jest cały kod. które służą do wykonywania przez zarząd określonych zadań.

Jeśli znajdziesz plik z rozszerzeniem .ino, oznacza to, że jest to Sketch.Aby działało poprawnie, należy pamiętać nazwę folderu, w którym się znajduje. zapisz szkic Musi być zawarty w katalogu o tej samej nazwie co Naszkicować.

Możesz zapisać program Arduino w różnych plikach, ale te foldery zawsze muszą znajdować się w tym samym katalogu co plik główny. Na koniec należy pamiętać, że Szkic składa się z dwóch instrukcji: jednej nazywanej loop() i drugiej setup().Pierwszy z nich odpowiada za cykliczne, czyli pętlowe, wykonywanie instrukcji programu, drugi zaś jest poleceniem służącym do przeprowadzenia konfiguracji.

Struktura szkicu: Jakie są poszczególne części kodu Arduino?

Jak już wcześniej wspominaliśmy setup() i loop() są częścią szkicuAle to nie są jedyne elementy, które można znaleźć w programie Arduino.

Poniżej pokażemy wszystkie części kodu płytki elektronicznej, z których możesz korzystać w środowisku IDE:

struktura

struktura

Przyjrzyjmy się strukturze szkicu nieco dokładniej, możemy to powiedzieć Funkcja setup() służy do rozpoczęcia szkicuinicjowanie bibliotek, zmiennych i sposób wykorzystania pinów płytki, a także wiele innych rzeczy. Jest on używany przy każdym włączeniu lub ponownym uruchomieniu Arduino. Dlatego też należy go zapisać tylko raz i na początku kodu.

Przykładem tego jest: 

int buttonPin = 5; void setup() { begin(9600); pinMode(buttonPin, INPUT); } void loop() { // ... }

Drugim elementem tworzącym Sketch jest pętla loop(). Niniejszy dokument lub instrukcja jest używana po utworzeniu Ustawiać() dla określ wartości początkowe jakie będzie miała dana funkcja. Dzięki temu o wiele łatwiej jest kontrolować planszę przy każdym użyciu tych pętli.

Jego zastosowanie jest następujące: 

int buttonPin = 5; // setup inicjuje port szeregowy i pin przycisku void setup() { begin(9600); pinMode(buttonPin, INPUT); } // aby sterować pinem 5, // a także, jeśli zostanie naciśnięty, wyśle ​​Serial void loop() { if (digitalRead(buttonPin) == HIGH) { write('H'); } else { write('L'); } delay(1000); }

Jak widać w poprzednich przykładach, używane są inne komparatory., dlatego struktura Szkic Można je również podzielić na więcej zmiennych.

Składniki te obejmują: 

  • Kontrola: używane do ustalenia warunków lub wykonania określonej procedury. Ta grupa obejmuje złamać; kontynuować; do... jednocześnie; dla; goto; if; if...więcej; powrót; Sprawa przełącznik y jednocześnie.
  • Arytmetyka: Funkcje te należy stosować, gdy zachodzi potrzeba zaprogramowania podstawowej operacji matematycznej w środowisku Arduino. Ci kupujący są =; +; -; /; * y %.
  • Składnia: Pomagają wprowadzać komentarze jedno- lub wielowierszowe, a także nadawać nazwy wartościom stałym lub uwzględniać je w kompilacji programu. Są one używane w tym przypadku. #definiować; #zawierać; {}; średnik (;); // dla jednowierszowych komentarzy obok kodu i / * * / aby otworzyć i zamknąć komentarz wielowierszowy.
  • Wartości logiczne: Gdy musisz wprowadzić zmienną logiczną, musisz użyć tych operatorów w IDE. Należą do nich: || (Lub); && (i) i ! (nie).
  • Dla porównania: Ta podkategoria jest jedną z najczęściej używanych w programowaniu. Jak sama nazwa wskazuje, służy do porównywania warunków i zwracania wyniku, aby kontynuować procedurę. Ta grupa używa... == (równy); > (większy niż); >= (większy lub równy); < (mniej niż); <= (mniejsze lub równe) i != (nierówne).
  • Związki: Operatory te są używane w strukturze szkicu, gdy potrzebna jest kombinacja innych komponentów. Innymi słowy, pełnią podwójną funkcję. Dlatego można ich używać &= (i kompozyt bit po bicie); Do (zmniejszenie); /= (podział metodą złożoną); ++ (zwiększyć); %= (moduł złożony); *= (mnożenie złożone); |= (lub kompozyt bit po bicie); -=(odejmowanie złożone) i += (suma łączona).
  • Po trochu: Operatory bitowe działają na liczbach binarnych, ustalając relacje według określonej reguły. Używane operatory to: >> (idź w prawo); << (idź w lewo); ~ (nie kawałek po kawałku); | (lub kawałek po kawałku); ^ (XOR bitowy) i & (i kawałek po kawałku).
  • Dostęp do wskaźnika: * y & Oto operatorzy, których możesz używać w tej grupie.

Wartości

Wartości

W tej sekcji Należą do nich stałe, kwalifikatory, zakres i typy danych. które służą do programowania płytki Arduino.

Zmienne można podzielić na:

  • stałe: Służą one do ułatwienia odczytu języka płytki. Można w nich znaleźć wartości, jakie pin może przyjmować, oraz tryb konfiguracji wejścia lub wyjścia. Najczęściej używane to: fałszywy; stałe zmiennoprzecinkowe; WYSOKI; LOW; WEJŚCIE; WEJŚCIE_POCIĄGNIĘCIE; stałe całkowite; LED_BUILTIN; WYDAJNOŚĆ y prawdziwy.
  • Klasy danych: Gdy w języku programowania musisz określić, z jakim typem danych pracujesz, powinieneś użyć tej grupy. Dlatego do tej kategorii można zaliczyć następujące elementy: szyk; boolean; bajt; zwęglać; Podwójna; unosić się; int; długie; krótki; ciąg (jako tablica znaków); ciąg (Obiekt); niepodpisany char; niepodpisany; bez znaku długo; unieważnić y słowo.
  • Zastosowania: Ta kategoria zmiennych służy do tego, aby program zwracał określoną liczbę bajtów z tablicy. Dlatego można ją wprowadzić do środowiska IDE. PROGRAM y rozmiar.
  • Rozmowa: Zmienne w tej grupie konwertują wartość na określony typ danych. bajt; zwęglać; unosić się; int; długie y słowo.
  • Kwalifikatory zakresu: Te zmienne służą do modyfikowania zachowania samej zmiennej. Wskazują one między innymi, czy jest ona zmienną tylko do odczytu, czy globalną. Najpopularniejsze z nich to: const; statyczny; zakres zmienny y lotny.
Jakie są najlepsze projekty automatyki domowej Arduino, które przekształcą Twój dom w inteligentny? Lista na 2026 rok

funkcje

funkcje

W język używany w kodzie ArduinoSekcja funkcji to część przeznaczona do przekazania programowi informacji o tym, jaki typ akcji powinna wykonać zmienna.

Można je podzielić na:

  • Wejście i wyjście: Elementy te stosuje się, gdy zachodzi potrzeba skierowania prądu lub przebiegu odbieranego przez płytkę. brak dźwięku; pulsIn; pulsInLong; przesunięcie; przesunięcie y tono.
  • Czas: W kodzie komponenty te mogą być używane do wskazywania akcji związanej z czasem, na przykład liczby milisekund, przez które pieniądze muszą odczekać przed wykonaniem akcji. Jest to używane w przypadku tych komponentów. opóźnienie; opóźnienieMikrosekund; Micros y mils.
  • Cyfrowe: Służy do konfiguracji wejść i wyjść pinów cyfrowych na płytce. Dzięki temu możliwe jest znalezienie funkcji cyfrowyCzytaj; cyfrowy zapis y tryb pin.
  • Analogiczny: Podobnie jak w przypadku poprzednich funkcji, te działania służą do konfiguracji pinów analogowych na płytce Arduino. Z tego powodu możesz znaleźć analogowyOdczyt; analogWrite y analogReference (PWM). Ale kiedy używasz modelu Arduino lub Arduino ZERO Będziesz musiał wprowadzić funkcje analogReadResolution y analogWriteResolution pracować.
  • Matematyka: Funkcje te umożliwiają wykonywanie obliczeń matematycznych w kodzie programu. Najczęściej używane to: abs; wymusić; mapa; max; min; pow y kwadrat.
  • Przerwy: Funkcje te służą do aktywowania lub dezaktywowania określonego procesu. Do tej grupy należą: przerywa y brak przerwańJeśli jednak potrzebne jest przerwanie zewnętrzne, należy użyć następujących: dołączPrzerwanie y odłączPrzerwij.
  • Bity i bajty: Te narzędzia programistyczne służą do wskazywania, że ​​ze zmiennej należy wyodrębnić bity lub bajty. Dlatego też zazwyczaj używane są następujące funkcje: bit; bitWyczyść; Odczyt bitów; zestaw bitów; bitWrite; wysoki bajt y niski bajt.
  • Komunikacja: Ta grupa jest jedną z najczęściej używanych w programowaniu IDE, ponieważ umożliwia płytce Arduino komunikację z komputerem lub innym sprzętem. Dostępne funkcje to: Seryjny y Strumień.
  • Liczby losowe: Funkcje te pozwalają generować liczby, tworząc sekwencję, która zawsze będzie taka sama. W tej grupie znajdują się: losowe nasiona y przypadkowyAle kiedy pracujesz z modelami Z POWODU y ZERO Jeśli chcesz podłączyć mysz i klawiaturę do systemu 32u4, będziesz mógł skorzystać z następujących funkcji: klawiatura y Mysz.

Dowiedz się krok po kroku, jak zaprogramować prosty szkic dla swojego projektu Arduino

W tej sekcji Wdrożymy w życie wszystko, co zostało pokazane w poprzednich akapitach.Dlatego też powinieneś zachować ostrożność i jeśli z jakiegoś powodu popełniłeś błąd, zalecamy ponowne rozpoczęcie kroków, aby uniknąć powtarzania błędu.

Proces, który należy wykonać podczas programowania prostego projektu Arduino, jest następujący:

komentarze

komentarze

L komentarze Są to wszelkie adnotacje umieszczane w kodzie, które wyjaśniają, jak działa program, identyfikują autora lub wyjaśniają, dlaczego użyto danej funkcji, a nie innej. Istnieją dwa rodzaje komentarzy: komentarze wielowierszowe (które znajdują się wśród symboli /* y */) i sama linia (które są reprezentowane przez użycie //Powinieneś o tym pamiętać Komentarze nie są częścią programu i dlatego Arduino go ignoruje.

Przykładem tego jest:

/*

Internet Paso a Paso

Przykładem dla Arduino jest włączenie diody LED na sekundę, a następnie jej wyłączenie, tworząc pętlę. Wykorzystano pin 13, ponieważ jest to wspólny pin dla prawie wszystkich płytek z diodą LED. Wymagany jest również rezystor wbudowany w Arduino.

Zmienne

Zmienne składają się z typ, nazwa i wartość. Służą one do tego, aby po każdym zapisaniu nazwy kodowej można było pobrać wartość zmiennej.

Na przykład, jeśli w tworzonym programie chcemy włączać i wyłączać diodę LED podłączoną do pinu 13 płytki, należy napisać:

int ledPin = 13;

Oznacza to, że nazwa zmiennej została utworzona ledPin Aby zmienić wartość (jeśli będzie to potrzebne w przyszłości), należy wpisać typ int a jego wartość to 13.

funkcje

Nie możesz o tym zapomnieć Funkcje to działania, które są wprowadzane więc ten jeden zmienna wykonuje określoną procedurę.

Oto jak należy się logować do oprogramowania, które programujemy:

void setup() { pinMode(ledPin, OUTPUT); // aby wskazać wyjście na pinie cyfrowym }

Linia Ustawiać() Pokazuje dane typu funkcji, typ zwracany przez kod. unieważnić y (), podczas gdy ciało funkcji jest { pinMode(ledPin, OUTPUT); // aby wskazać wyjście na pinie cyfrowym }W środku tego ciała znajduje się tryb pin Funkcja ta wskazuje, że parametry ledPin y WYDAJNOŚĆ Muszą one przejść przez pin cyfrowy jako wyjście (dlatego wyjaśniono to w komentarzu). // aby wskazać wyjście na pinie cyfrowym).

pinMode(), digitalWrite() i delay()

Funkcje te dostarczają szczegółowych instrukcji dla polecenia, dlatego musisz znać każdą z nich:

  • pinMode(): Służy do określenia, czy pin płytki Arduino będzie pełnić funkcję wejścia, czy wyjścia dla układu. Jeśli jest to wejście, złącze wykryje czujnik, a jeśli jest to pin wyjściowy, będzie to element wykonawczy (w omawianym przykładzie będzie to dioda LED).
  • digitalWrite(): Ta funkcja pozwala ustawić wartość pinu. Jest ona bezpośrednio powiązana z WYSOKI y NISKA, Te wskaźniki skonfigurują typ napięcia. Na przykład, aby ustawić funkcję pinMode na 5 V, wprowadź... digitalWrite(ledPin, WYSOKI);Jeśli ma działać przy 0 woltach, należy napisać digitalWrite(ledPin, NISKI);.
  • opóźnienie(): Ta funkcja odpowiada za opóźnienie procesu przed przejściem do następnej linii kodu. Jest ona wyrażona w milisekundach, więc wartość 1000 oznacza 1 sekundę. Jej użycie to opóźnienie (1000);.
Jakie są najlepsze projekty Arduino ze strukturami sterującymi do nauki programowania? Lista na 2026 rok

Konfiguracja () i pętla ()

Konfiguracja () i pętla ()

Już to omówiliśmy Ustawiać() Jest to funkcja odpowiedzialna za konfigurowanie opcji w kodzie, jednak nie jest to jedyne narzędzie, z którego należy często korzystać podczas programowania płytki. Arduino. Jest również pętla()Ta funkcja pozwala na ciągłe monitorowanie tablicy. Dzięki niej możesz sprawdzić, czy postępujesz właściwie i czy dodane funkcje działają zgodnie z oczekiwaniami.

Przykład użycia setup() i loop():

int buttonPin = 3; // Ta konfiguracja inicjuje port szeregowy i pin void setup() { begin(9600); pinMode(buttonPin, INPUT); } // Ta pętla będzie używana do sprawdzania przycisku i wysyłania sygnału szeregowego za każdym razem, gdy zostanie naciśnięty // Opóźnienie będzie wynosić 1 sekundę void loop() { if (digitalRead(buttonPin) == HIGH) { write('H'); } else { write('L'); } delay(1000); }

Przykłady szkiców Arduino, które pomogą Ci nauczyć się programować własne urządzenia

Co zobaczysz dalej Pomoże Ci ćwiczyć samodzielnie inny Projektowanie.

Zwróć uwagę na szczegóły i powtarzaj je wielokrotnie, aby zrozumieć cały proces:

Szkic mrugnięcia

Szkic mrugnięcia

Ten projekt pomoże Ci sprawić, by dioda LED zintegrowana z płytką Arduino migała.który ma większość modeli płyt głównych. W wersji ONE, Yun A Zero, używany pin ma numer 13, podczas gdy w MKR1000 (na przykład) jest to cyfrowy pin 6.

Kod, którego użyjesz to:

void setup() { pinMode(ledPin, WYJŚCIE); } { digitalWrite(ledPin, WYSOKI); opóźnienie(1000); digitalWrite(ledPin, NISKI); opóźnienie(1000); }

Robot, który omija przeszkody

Robot, który omija przeszkody

W tym projekcie pokażemy Ci przepływ procesu, który należy wziąć pod uwagę podczas programowania, poprawnie, urządzenie, które omija przeszkody. Schemat co pokazujemy na poniższym rysunku Pomoże Ci to lepiej zrozumieć ten proces.

Kod projektu będzie wyglądał mniej więcej tak:

#włączać #włączać #włączać #define TRIG_PIN A4 #define ECHO_PIN A5 #define MAX_DISTANCE 200 #define MAX_SPEED 190 #define MAX_SPEED_OFFSET 20 NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE); AF_DCMotor motor1(1, MOTOR12_1KHZ); AF_DCMotor motor2(3, MOTOR12_1KHZ); Serwo myservo; boolean goesForward=false; int distance = 100; int speedSet = 0; void setup() { attach(9); write(115); delay(2000); distance = readPing(); delay(100); distance = readPing(); delay(100); distance = readPing(); delay(100); distance = readPing(); delay(100); } void loop() { int distanceR = 0; int distanceL = 0; delay(40); if(distance<=15) { moveStop(); delay(100); moveBackward(); delay(300); moveStop(); delay(200); distanceR = lookRight(); delay(200); distanceL = lookLeft(); delay(200); if(distanceR>=distanceL) { turnRight(); moveStop(); }else { turnLeft(); moveStop(); } }else { moveForward(); } distance = readPing(); } int lookRight() { write(50); delay(500); int distance = readPing(); delay(100); write(115); return distance; } int lookLeft() { write(170); delay(500); int distance = readPing(); delay(100); write(115); zwróć odległość; opóźnienie(100); } int readPing() { opóźnienie(70); int cm = sonar.ping_cm(); jeśli(cm==0) { cm = 250; } zwróć cm; } oid moveStop() { uruchom(ZWOLNIJ); uruchom(ZWOLNIJ); } void moveForward() { jeśli(!idzie naprzód) { idzie naprzód=prawda; uruchom(DO PRĘDKOŚCI); uruchom(DO PRĘDKOŚCI); dla (speedSet = 0; speedSet < PRĘDKOŚĆ_MAKSYMALNA; speedSet +=2) { ustawPrędkość(speedSet); ustawPrędkość(speedSet+PRZESUNIĘCIE_PRĘDKOŚCI_MAKSYMALNEJ); opóźnienie(5); } } } void moveBackward() { idzie naprzód=fałsz; uruchom(WSTECZ); dla (speedSet = 0; speedSet < PRĘDKOŚĆ_MAKSYMALNA; speedSet +=2) { ustawPrędkość(speedSet); ustawPrędkość(speedSet+MAX_SPEED_OFFSET); opóźnienie(5); } } void turnRight() { uruchom(DO PRZODU); uruchom(DO TYŁU); opóźnienie(300); uruchom(DO PRZODU); uruchom(DO PRZODU); } void turnLeft() { uruchom(DO TYŁU); uruchom(DO PRZODU); opóźnienie(300); uruchom(DO PRZODU); uruchom(DO PRZODU); }

System kontroli dostępu wykorzystujący odczyt kart RFID

System kontroli dostępu wykorzystujący odczyt kart RFID

Na początek należy zdefiniować, czym jest karta RFID. Jest to urządzenie działające w oparciu o częstotliwość radiową i służące do przesyłania informacji służących do identyfikacji lub transmisji określonych danych o obiekcie. Dlatego może być wykorzystywane w praktyce. tablica arduino stworzyć czytnik umożliwiający kontrolowanie dostępu użytkowników.

Po przećwiczeniu dwóch poprzednich projektów, będziesz mógł to zaplanować Szkic trochę bardziej skomplikowane. Z tego powodu Najpierw pokażemy Ci schemat blokowy operacji dzięki czemu możesz wykonywać swoje zadania bez błędów. Teraz musisz napisać te kodyNie są one ostateczne, ale pomogą Ci porównać to, co wprowadziłeś do systemu. Środowisko Arduino IDE.

Aby to zrobić musisz napisać:

#włączać #włączać #define RST_PIN 9 #define SS_PIN 10 MFRC522 mfrc522(SS_PIN, RST_PIN); void setup() { begin(9600); while (!Serial); begin(); PCD_Init(); delay(4); PCD_DumpVersionToSerial(); println(F("Skanuj PICC, aby zobaczyć bloki UID, SAK, typ i dane...")); } void loop() { if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } if ( ! mfrc522.PICC_ReadCardSerial()) { return; } PICC_DumpToSerial(&(mfrc522.uid)); }

To, co teraz musisz zrobić, to Zmień hasło sektora wykorzystującego Klucz-A: A0 A1 A2 A3 A4 y Klawisz B: B0 B1 B2 B3 B4.

Będziesz musiał napisać:

#włączać #włączać #define RST_PIN 9 #define SS_PIN 10 MFRC522 mfrc522(SS_PIN, RST_PIN); MFRC522::MIFARE_Key keyA = {keyByte: {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}}; MFRC522::MIFARE_Key keyB = {keyByte: {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}}; // Nowe klucze do szyfrowania MFRC522::MIFARE_Key newKeyA = {keyByte: {0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5}}; MFRC522::MIFARE_Key newKeyB = {keyByte: {0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5}}; // Dane sektora, do którego należy akceptowany użytkownik byte sector = 15; void showByteArray(byte* buffer, byte bufferSize) { for (byte i = 0; i < bufferSize; i++) { print(buffer[i] < 0x10 ? " 0" : " "); print(buffer[i], HEX); } } void setup() { begin(9600); while (!Serial); begin(); PCD_Init(); println(F("Zbliż kartę do czytnika."); println(F("Klucze dla tej karty muszą być:")); print("Klucz-A: "); showByteArray(keyA.keyByte, MFRC522::MF_KEY_SIZE); println(); print("Klucz-B: "); showByteArray(keyB.keyByte, MFRC522::MF_KEY_SIZE); println(); println(F("BARDZO WAŻNE: podczas procesu aktualizacji klucza ")); println(F("nie wyjmuj karty z czytnika, dopóki proces się nie zakończy."); } void loop() { // Jeśli nie ma karty do użycia, program nie posuwa się naprzód if (!mfrc522.PICC_IsNewCardPresent()) { return; } if (!mfrc522.PICC_ReadCardSerial()) { return; }

Następnie należy zaprogramować informacje, które mają się pojawiać na monitorze szeregowym:

print(F("UID karty:")); displayByteArray(mfrc522.uid.uidByte, mfrc522.uid.size); println(); print(F("Typ karty: ")); MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); println(mfrc522.PICC_GetTypeName(piccType)); boolean result = changeKeys(&keyA, &keyB, &newKeyA, &newKeyB, sector); if (result) { print(F("Klucze sektora ")); println(sector); print(F("Klucz-A: ")); showByteArray(newKeyA.keyByte, MFRC522::MF_KEY_SIZE); println(); print(F("Klawisz-B: ")); showByteArray(newKeyB.keyByte, MFRC522::MF_KEY_SIZE); println(); } else { print(F("Klawisz sektorowy ")); println(sektor); print(F("Klawisz-A: ")); showByteArray(keyA.keyByte, MFRC522::MF_KEY_SIZE); println(); print(F("Klawisz-B: ")); showByteArray(keyB.keyByte, MFRC522::MF_KEY_SIZE); println(); } // Uwierzytelnij przy użyciu klucza Key-A status = (MFRC522::StatusCode)mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, blockTrailer, oldKeyA, &(mfrc522.uid)); // Jeśli uwierzytelnianie się nie powiedzie, nie kontynuuj if (status != MFRC522::STATUS_OK) { print(F("Uwierzytelnianie nie powiodło się Key-A: ")); println(mfrc522.GetStatusCodeName(status)); return false; } // Wyświetl cały sektor użytkownika println(F("Informacje w sektorze:")); PICC_DumpMifareClassicSectorToSerial(&(mfrc522.uid), oldKeyA, sector); println(); // Odczyt danych bloku print(F("Odczyt danych bloku ")); Serial.print(blockTrailer); println(F(" ..."); status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(blockTrailer, buffer, &size); if (status != MFRC522::STATUS_OK) { print(F("Nie udało się odczytać bloku: ")); println(mfrc522.GetStatusCodeName(status)); return false; } print(F("Informacje w bloku ")); Serial.print(trailerBlock); Serial.println(F("":")); showByteArray(buffer, 16); Serial.println(); println(); // Uwierzytelnij przy użyciu klucza B status = (MFRC522::StatusCode)mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, trailerBlock, oldKeyB, &(mfrc522.uid)); // Jeśli uwierzytelnianie się nie powiedzie, nie kontynuuj if (status != MFRC522::STATUS_OK) { print(F("Uwierzytelnianie nie powiodło się przy użyciu klucza B: ")); println(mfrc522.GetStatusCodeName(status)); return false; } if (newKeyA != nullptr || newKeyB != nullptr) { // Aby iterować po wszystkich bajtach klucza B wybrany klucz. for (byte i = 0; i < MFRC522::MF_KEY_SIZE; i++) { if (newKeyA != nullptr) { buffer[i] = newKeyA->keyByte[i]; } if (newKeyB != nullptr) { buffer[i + 10] = newKeyB->keyByte[i]; } } } return true; }
E-booki IPAP
Ebooki IPAP

🔥DOŁĄCZ🔥 DO NOWEJ SPOŁECZNOŚCI IP@P! ZAPISZ SIĘ TUTAJ!

Tematy

Autor: Félix Albornoz

Mam ponad 20 lat doświadczenia w branży technologicznej, gdzie pomagam firmom i użytkownikom rozwijać się i szkolić w tej dziedzinie. Ciągle uczę się czegoś nowego.

Związane z