Remove turn signal & sonar, add RFID auth

Define AUTH_UID and AUTH_UID_SIZE constants.
Introduce motor control pins IN_1‑IN_4 and set them as outputs.
Comment out turn‑signal and sonar pin definitions and related code.
Refactor Display to remove updateDirection functionality.
Extend RFIDReader with reset() and matches() methods; use them to toggle
carEnabled based on RFID authentication.
Update the main loop to operate only when the RFID tag matches the
authorized UID.
This commit is contained in:
2026-06-16 21:56:31 +02:00
parent febf1215db
commit 899212d7b9
6 changed files with 91 additions and 54 deletions
+16 -7
View File
@@ -4,13 +4,16 @@
const int SS_PIN = 10; const int SS_PIN = 10;
const int RST_PIN = 7; const int RST_PIN = 7;
// Kierunkowskazy const byte AUTH_UID[4] = {145, 136, 97, 102};
const int TS_RIGHT = 9; const byte AUTH_UID_SIZE = sizeof(AUTH_UID);
const int TS_LEFT = 8;
// Odległościomierz // // Kierunkowskazy
const int TRIG_PIN = 6; // const int TS_RIGHT = 9;
const int ECHO_PIN = 5; // const int TS_LEFT = 8;
// // Odległościomierz
// const int TRIG_PIN = 6;
// const int ECHO_PIN = 5;
const long SONAR_MAX_DIST_CM = 400; const long SONAR_MAX_DIST_CM = 400;
@@ -25,7 +28,13 @@ const int GEAR_THRESH_HIGH = 682;
const int LCD_COLS = 16; const int LCD_COLS = 16;
const int LCD_ROWS = 2; const int LCD_ROWS = 2;
// Silnik // Skrzynia biegów
const uint8_t CLUTCH_PIN = A7; const uint8_t CLUTCH_PIN = A7;
const uint8_t BRAKE_PIN = A2; const uint8_t BRAKE_PIN = A2;
const uint8_t THROTTLE_PIN = A3; const uint8_t THROTTLE_PIN = A3;
// Silniki
const int IN_1 = 9;
const int IN_2 = 8;
const int IN_3 = 4;
const int IN_4 = 3;
+16 -16
View File
@@ -45,21 +45,21 @@ void Display::updateGear(char gearChar) {
_lcd.print(' '); _lcd.print(' ');
} }
void Display::updateDirection(bool leftOn, bool rightOn) { // void Display::updateDirection(bool leftOn, bool rightOn) {
if (leftOn && rightOn) { // if (leftOn && rightOn) {
_lcd.setCursor(12, 0); // _lcd.setCursor(12, 0);
_lcd.write((uint8_t)CHAR_LEFT); // _lcd.write((uint8_t)CHAR_LEFT);
_lcd.print(' '); // _lcd.print(' ');
_lcd.write((uint8_t)CHAR_RIGHT); // _lcd.write((uint8_t)CHAR_RIGHT);
return; // return;
} // }
unsigned long now = millis(); // unsigned long now = millis();
bool leftBlink = leftOn && ((now / 1000UL) % 2 == 0); // bool leftBlink = leftOn && ((now / 1000UL) % 2 == 0);
bool rightBlink = rightOn && ((now / 1000UL) % 2 == 0); // bool rightBlink = rightOn && ((now / 1000UL) % 2 == 0);
_lcd.setCursor(12, 0); // _lcd.setCursor(12, 0);
_lcd.write((uint8_t)(leftBlink ? CHAR_LEFT_BLINK : CHAR_LEFT)); // _lcd.write((uint8_t)(leftBlink ? CHAR_LEFT_BLINK : CHAR_LEFT));
_lcd.print(' '); // _lcd.print(' ');
_lcd.write((uint8_t)(rightBlink ? CHAR_RIGHT_BLINK : CHAR_RIGHT)); // _lcd.write((uint8_t)(rightBlink ? CHAR_RIGHT_BLINK : CHAR_RIGHT));
} // }
+1 -1
View File
@@ -19,7 +19,7 @@ public:
void updateGear(char gearChar); void updateGear(char gearChar);
void updateDirection(bool leftOn, bool rightOn); // void updateDirection(bool leftOn, bool rightOn);
private: private:
rgb_lcd _lcd; rgb_lcd _lcd;
+36 -24
View File
@@ -3,26 +3,28 @@
#include "Config.h" #include "Config.h"
#include "Display.h" #include "Display.h"
#include "Gear.h" #include "Gear.h"
#include "Sonar.h" // #include "Sonar.h"
#include "RFID.h" #include "RFID.h"
#include "Engine.h" #include "Engine.h"
Display display; Display display;
GearSelector gear(GEAR_X_PIN, GEAR_Y_PIN, GEAR_THRESH_LOW, GEAR_THRESH_HIGH); GearSelector gear(GEAR_X_PIN, GEAR_Y_PIN, GEAR_THRESH_LOW, GEAR_THRESH_HIGH);
Sonar sonar(TRIG_PIN, ECHO_PIN, SONAR_MAX_DIST_CM); // Sonar sonar(TRIG_PIN, ECHO_PIN, SONAR_MAX_DIST_CM);
RFIDReader rfid(SS_PIN, RST_PIN); RFIDReader rfid(SS_PIN, RST_PIN);
Engine engine(THROTTLE_PIN, CLUTCH_PIN, BRAKE_PIN); Engine engine(THROTTLE_PIN, CLUTCH_PIN, BRAKE_PIN);
bool leftBlink = false;
bool rightBlink = false;
unsigned long prevUpdate = 0; unsigned long prevUpdate = 0;
bool carEnabled = false;
void setup() { void setup() {
Serial.begin(9600); Serial.begin(9600);
pinMode(TS_LEFT, INPUT); // pinMode(TS_LEFT, INPUT);
pinMode(TS_RIGHT, INPUT); // pinMode(TS_RIGHT, INPUT);
pinMode(IN_1, OUTPUT);
pinMode(IN_2, OUTPUT);
rfid.begin(); rfid.begin();
display.begin(LCD_COLS, LCD_ROWS); display.begin(LCD_COLS, LCD_ROWS);
@@ -30,26 +32,36 @@ void setup() {
} }
void loop() { void loop() {
if (gear.update()) bool check = rfid.check();
display.updateGear(gear.getGearChar()); bool matches = rfid.matches(AUTH_UID, AUTH_UID_SIZE);
display.updateDirection( bool rfidOk = check && matches;
digitalRead(TS_LEFT),
digitalRead(TS_RIGHT));
unsigned long now = millis(); if (rfid.check() && rfid.matches(AUTH_UID, AUTH_UID_SIZE)) {
float dt = (now - prevUpdate) / 1000.0f; delay(3000);
if (dt >= 0.02f) { carEnabled = !carEnabled;
prevUpdate = now; };
engine.update(dt, gear.getGear());
display.updateRPM(engine.getRPM());
display.updateSpeed(engine.getSpeedKmh());
}
long dist = sonar.measure(); if (carEnabled) {
// Serial.println(dist); Serial.println("Działa");
if (rfid.check()) { if (gear.update())
rfid.printUID(); display.updateGear(gear.getGearChar());
// display.updateDirection(
// digitalRead(TS_LEFT),
// digitalRead(TS_RIGHT));
unsigned long now = millis();
float dt = (now - prevUpdate) / 1000.0f;
if (dt >= 0.02f) {
prevUpdate = now;
engine.update(dt, gear.getGear());
display.updateRPM(engine.getRPM());
display.updateSpeed(engine.getSpeedKmh());
}
// long dist = sonar.measure();
// Serial.println(dist);
} }
} }
+18 -6
View File
@@ -11,18 +11,30 @@ void RFIDReader::begin() {
bool RFIDReader::check() { bool RFIDReader::check() {
if (!_rfid.PICC_IsNewCardPresent()) return false; if (!_rfid.PICC_IsNewCardPresent()) return false;
if (!_rfid.PICC_ReadCardSerial()) return false; if (!_rfid.PICC_ReadCardSerial()) return false;
// _rfid.PICC_HaltA(); // stop the tag
// _rfid.PCD_StopCrypto1(); // clear RC522 crypto
return true;
}
void RFIDReader::reset() {
_rfid.PICC_HaltA(); _rfid.PICC_HaltA();
_rfid.PCD_StopCrypto1();
}
bool RFIDReader::matches(const byte* expectedUid, byte expectedSize) const {
if (_rfid.uid.size != expectedSize) return false;
for (byte i = 0; i < expectedSize; ++i) {
if (_rfid.uid.uidByte[i] != expectedUid[i]) return false;
}
return true; return true;
} }
void RFIDReader::printUID() const { void RFIDReader::printUID() const {
Serial.print(F("RFID Tag UID:")); Serial.println(F("RFID Tag UID:"));
for (byte i = 0; i < _rfid.uid.size; i++) { // for (byte i = 0; i < _rfid.uid.size; i++) {
Serial.print(_rfid.uid.uidByte[i] < 0x10 ? " 0" : " "); // Serial.print(_rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(_rfid.uid.uidByte[i], HEX); // Serial.print(_rfid.uid.uidByte[i], HEX);
} // }
Serial.println();
} }
const byte* RFIDReader::getUID() const { const byte* RFIDReader::getUID() const {
+4
View File
@@ -10,8 +10,12 @@ public:
bool check(); bool check();
void reset();
void printUID() const; void printUID() const;
bool matches(const byte* expectedUid, byte expectedSize) const;
const byte* getUID() const; const byte* getUID() const;
byte getUIDSize() const; byte getUIDSize() const;