[稍後編輯]我有一個Arduino Uno和一個RFID-RC522,一個伺服電機和一些LED +我也做了一個鋁箔三明治/開關。下面是代碼的鋁基開關之前,一切工作完美:Arduino/C++ IF/ELSE語句
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
#define SS_PIN 10 // SLAVE SELECT la DIGITAL 10
#define RST_PIN 9 // PIN RESET la DIGITAL 9
#define LED_V 5 //LED_Verde la D5
#define LED_R 4 //LED_Rosu la D4
#define BUZZER 2 //BUZZER la D2
MFRC522 mfrc522(SS_PIN, RST_PIN); // Creaza instanta MFRC522.
Servo bariera; //defineste nume Servo
void setup()
{
Serial.begin(9600); // Incepe comunicatia seriala cu PC-ul
SPI.begin(); // Initializeaza bus-ul SPI
mfrc522.PCD_Init(); // Initializeaza MFRC522
bariera.attach(3); //servo pin
bariera.write(0); //servo pozitie start
pinMode(LED_V, OUTPUT);
pinMode(LED_R, OUTPUT);
pinMode(BUZZER, OUTPUT);
noTone(BUZZER);
Serial.println("Apropie cartela...[x][][]");
delay(2500);
Serial.println("Apropie cartela...[x][x][]");
delay(3500);
Serial.println("Apropie cartela...[x][x][x]");
delay(4500);
Serial.println("Astept raspuns utilzator!");
Serial.println();
}
void loop()
{
// Cauta cartele noi
if (! mfrc522.PICC_IsNewCardPresent())
{
return;
}
// Selecteaza una dintre cartele
if (! mfrc522.PICC_ReadCardSerial())
{
return;
}
//Arata UID pe monitorul serial
Serial.print("ID Tag/Cartela: ");
String content= "";
byte letter;
for (byte i = 0; i < mfrc522.uid.size; i++)
{
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
content.concat(String(mfrc522.uid.uidByte[i], HEX));
}
Serial.println();
Serial.print("Mesaj : ");
content.toUpperCase();
if (content.substring(1) == "A0 B9 8D 7C") //aici schimbam ID-ul (UID-ul) cartelelor autorizate, citite anterior pe monitorul serial
{
Serial.println("Acces autorizat! Bine ati venit!");
Serial.println();
delay(500);
digitalWrite(LED_V, HIGH);
tone(BUZZER, 350);
delay(300);
noTone(BUZZER);
bariera.write(120);
delay(5000);
bariera.write(0);
digitalWrite(LED_V, LOW);
}
else {
Serial.println(" Access interzis! La revedere!");
digitalWrite(LED_R, HIGH);
tone(BUZZER, 300);
delay(1000);
digitalWrite(LED_R, LOW);
noTone(BUZZER);
}
}
因此,如果RFID卡/標籤爲「A0 B9 8D 7C」,LED_V燈,短蜂鳴音,伺服(這裏命名bariera)達到120度。
如果RFID CARD/TAG不是「A0 B9 8D 7C」,LED_R點亮,蜂鳴器響一聲,伺服器什麼也不做。 (digitalRead(IESIRE)== 0),它應該:LED_V燈,短蜂鳴器音和伺服器(這裏命名爲bariera)去。120度
這是與交換機整個事情的代碼包括:(#定義IESIRE 6):
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
#define SS_PIN 10 // SLAVE SELECT la DIGITAL 10
#define RST_PIN 9 // PIN RESET la DIGITAL 9
#define LED_V 5 //LED_Verde la D5
#define LED_R 4 //LED_Rosu la D4
#define BUZZER 2 //BUZZER la D2
#define IESIRE 6 // IESIRE la D6
MFRC522 mfrc522(SS_PIN, RST_PIN); // Creaza instanta MFRC522.
Servo bariera; //defineste nume Servo
void setup()
{
Serial.begin(9600); // Incepe comunicatia seriala cu PC-ul
SPI.begin(); // Initializeaza bus-ul SPI
mfrc522.PCD_Init(); // Initializeaza MFRC522
bariera.attach(3); //servo pin
bariera.write(0); //servo pozitie start
pinMode(LED_V, OUTPUT);
pinMode(LED_R, OUTPUT);
pinMode(BUZZER, OUTPUT);
pinMode(IESIRE, INPUT);
digitalWrite(IESIRE, HIGH);
noTone(BUZZER);
Serial.println("Apropie cartela...[x][][]");
delay(2500);
Serial.println("Apropie cartela...[x][x][]");
delay(3500);
Serial.println("Apropie cartela...[x][x][x]");
delay(4500);
Serial.println("Astept raspuns utilzator!");
Serial.println();
}
void loop()
{
// Cauta cartele noi
if (! mfrc522.PICC_IsNewCardPresent())
{
return;
}
// Selecteaza una dintre cartele
if (! mfrc522.PICC_ReadCardSerial())
{
return;
}
//Arata UID pe monitorul serial
Serial.print("ID Tag/Cartela: ");
String content= "";
byte letter;
for (byte i = 0; i < mfrc522.uid.size; i++)
{
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
content.concat(String(mfrc522.uid.uidByte[i], HEX));
}
Serial.println();
Serial.print("Mesaj : ");
content.toUpperCase();
if (content.substring(1) == "A0 B9 8D 7C") //aici schimbam ID-ul (UID-ul) cartelelor autorizate, citite anterior pe monitorul serial
{
Serial.println("Acces autorizat! Bine ati venit!");
Serial.println();
delay(500);
digitalWrite(LED_V, HIGH);
tone(BUZZER, 350);
delay(300);
noTone(BUZZER);
bariera.write(120);
delay(5000);
bariera.write(0);
digitalWrite(LED_V, LOW);
}
else if (content.substring(1) != "A0 B9 8D 7C") {
Serial.println(" Access interzis! La revedere!");
digitalWrite(LED_R, HIGH);
tone(BUZZER, 300);
delay(1000);
digitalWrite(LED_R, LOW);
noTone(BUZZER);
}
else if ((content.substring(1) != "A0 B9 8D 7C") && (digitalRead(IESIRE)==0)) {
Serial.println("Drum bun!");
digitalWrite(LED_V, HIGH);
tone(BUZZER, 350);
delay(300);
bariera.write(120);
delay(5000);
bariera.write(0);
digitalWrite(LED_V, LOW);
}
}
請忽略else if語句之類的東西,我是相當新的編碼所以如果開關被按下(這轉換爲digitalRead(IESIRE)==0)
),伺服需要達到120度,而不管其他狀態NTS。
CARD/RFID TAG present > recognised > servo to 120 + led, buzzer
present > not recognised > led, buzzer
IF SWITCH is pressed > servo to 120 + led, buzzer REGARDLESS of the CARD stuff.
我希望這是有道理的,它更明確。
你的交換機上有上拉電阻嗎? –
我明白,通過使用這個'digitalWrite(IESIRE,HIGH);'激活Arduino Uno上的內部上拉電阻,我也有'pinMode(BuclaInd,INPUT_PULLUP);'的另一個代碼和println BuclaInd當開關沒有激活時爲1,當開關激活時爲0,但它什麼也沒有做。我的問題是編程時的陳述,但我並沒有真正明白我做錯了什麼。 –