Buonasera,mi presento mi chiamo Mario,frequento l'ultimo anno di una scuola tecnica,con indirizzo ''automazione''. Premetto di non avere una grande capacità di programmare con arduino,ma me la cavo.
Come detto sopra,sono all'ultimo anno di scuola e per fine anno dovrei presentare un progetto, però purtroppo ho un problema. Nel mio programma sono inclusi un KEYPAD(3x4) e un RFID-RC522, il problema consiste nel funzionamento dei miei dispositivi, mi spiego meglio: in base al programma che io inserisco mi funziona solo uno dei due dispositivi, ovvero che mi funziona sempre e solo la prima cosa presente nel mio void loop. Per farvi capire,se io nel mio void loop inserisco prima il programma del KEYPAD,mi funziona esso ma non l'RFID-RC522, oppure viceversa.
Ho cercato anche su internet,ma purtroppo non sono riuscito a trovare il problema.. ho chiesto anche ai miei professori ma nemmeno loro hanno individuato l'errore,loro credono che ci sia conflitto tra le librerie.
Spero che qualcuno di voi individui il problema. (uso un arduino uno)
Grazie in anticipo.
#include "SPI.h"
#include "MFRC522.h"
#define SS_PIN 10
#define RST_PIN 9
#define LED_PIN A3
MFRC522 rfid(SS_PIN, RST_PIN);
MFRC522::MIFARE_Key key;
//pressione
int pressurePin = A5;
int force;
int LEDpin = A4;
//keypad
#include <Servo.h>
#include <Keypad.h>
Servo ServoMotor;
char* password = "456";
int position = 0;
const byte ROWS = 4;
const byte COLS = 3;
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = { 8, 7, 6, 5 };
byte colPins[COLS] = { 4, 3, 2 };
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
pinMode(LED_PIN, OUTPUT);
pinMode(LEDpin, OUTPUT);
ServoMotor.attach(A2);
LockedPosition(true);
}
void loop() {
force = analogRead(pressurePin);
if(force < 50 )
{
digitalWrite(LEDpin, HIGH);
}
else
{
digitalWrite(LEDpin, LOW);
}
Serial.println(("INSERIRE CHIAVE.."));
delay(10);
if (!rfid.PICC_IsNewCardPresent() || !rfid.PICC_ReadCardSerial())
return;
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
// Check is the PICC of Classic MIFARE type
if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
Serial.println(F("Il tuo tag non è di tipo MIFARE Classic."));
return;
}
String strID = "";
for (byte i = 0; i < 4; i++) {
strID +=
(rfid.uid.uidByte[i] < 0x10 ? "0" : "") +
String(rfid.uid.uidByte[i], HEX) +
(i!=3 ? ":" : "");
}
strID.toUpperCase();
Serial.print("Tocca il tasto della carta: ");
Serial.println(strID);
if (strID.indexOf("15:3E:25:C3") >= 0) {
digitalWrite(LED_PIN, HIGH);
delay(1700); //attendo 500 ms
digitalWrite(LED_PIN,LOW); //spengo il LED
}
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
char key = keypad.getKey();
if (key == '*' || key == '#')
{
position = 0;
LockedPosition(true);
}
if (key == password[position])
{
position ++;
}
if (position == 3)
{
LockedPosition(false);
}
delay(100);
}
void LockedPosition(int locked)
{
if (locked)
{
ServoMotor.write(42);
}
else
{
ServoMotor.write(130);
}
}