gpt4 book ai didi

Arduino Mega2560 ENC28J60 和 RFID 不工作

转载 作者:行者123 更新时间:2023-12-05 07:55:20 24 4
gpt4 key购买 nike

我是新来的,所以请不要为我的愚蠢而生气。我有一个项目,我必须读取 RFID UID 代码(这部分就像一个魅力),然后将它发送到连接到 C# 应用程序的数据库,然后接收响应(0 或 1)。我的问题(目前)是arduino不发送任何数据。也许有人可以帮助我?

这是我的arduino代码:

#include <EtherCard.h>

#include <SPI.h> // RC522 Module uses SPI protocol
#include <MFRC522.h> // Library for Mifare RC522 Devices
#include <DS1302RTC.h>
#include <Time.h>

static byte mymac[] = {0x74,0xDD,0xDD,0x00,0x00,0x01};
static byte server_IP[] = {192,168,0,102};
static int server_Port = 7745;
byte Ethernet::buffer[600];


// Init the DS1302 (external RTC)
// Set pins: CE, IO,CLK
DS1302RTC RTC(45, 43, 41);

// Optional connection for RTC module
#define DS1302_GND_PIN 39
#define DS1302_VCC_PIN 37

#define COMMON_ANODE
#define LED_ON HIGH
#define LED_OFF LOW

#define redLed 3
#define greenLed 5
#define blueLed 7
#define relay 4


int successRead; // Variable integer to keep if we have Successful Read from Reader

byte readCard[4]; // Stores scanned ID read from RFID Module


/* We need to define MFRC522's pins and create instance
* Pin layout should be as follows (on Arduino Mega 2560):
* MOSI: Pin 51 / ICSP-4
* MISO: Pin 50 / ICSP-1
* SCK : Pin 52 / ICSP-3
* SS : Pin 46 (Configurable)
* RST : Pin 34 (Configurable)
* look MFRC522 Library for
* pin configuration for other Arduinos.
*/

#define SS_PIN1 46
#define RST_PIN1 34
MFRC522 mfrc522(SS_PIN1, RST_PIN1); // Create MFRC522 instance.


///////////////////////////////////////// Setup ///////////////////////////////////
void setup() {
Serial.begin(9600); // Initialize serial communications with PC
Serial.print("MAC: ");
for (byte i = 0; i < 6; ++i) {
Serial.print(mymac[i], HEX);
if (i < 5)
Serial.print(':');
}
Serial.println();
if (ether.begin(sizeof Ethernet::buffer, mymac, 53)==0) {
Serial.println( "Failed to access Ethernet controller");
//while(1);
} else Serial.println("Ethernet controller initialized");

if (!ether.dhcpSetup()) {
Serial.println("Failed to get configuration from DHCP");
//while(1);
} else Serial.println("DHCP configuration done:");

ether.printIp("My IP: ", ether.myip);
ether.printIp("Netmask: ", ether.netmask);
ether.printIp("GW IP: ", ether.gwip);
ether.printIp("DNS IP: ", ether.dnsip);
Serial.println();

ether.copyIp(ether.hisip, server_IP);
ether.hisport = server_Port;

//Arduino Pin Configuration
pinMode(redLed, OUTPUT);
pinMode(greenLed, OUTPUT);
pinMode(blueLed, OUTPUT);
pinMode(relay, OUTPUT);
digitalWrite(relay, LOW); // Make sure door is locked
digitalWrite(redLed, LED_OFF); // Make sure led is off
digitalWrite(greenLed, LED_OFF); // Make sure led is off
digitalWrite(blueLed, LED_OFF); // Make sure led is off

//Protocol Configuration
SPI.begin(); // MFRC522 Hardware uses SPI protocol
mfrc522.PCD_Init(); // Initialize MFRC522 Hardware
mfrc522.PCD_SetAntennaGain(mfrc522.RxGain_max); //Set Antenna Gain to Max- this will increase reading distance

// Activate RTC module
digitalWrite(DS1302_GND_PIN, LOW);
pinMode(DS1302_GND_PIN, OUTPUT);

digitalWrite(DS1302_VCC_PIN, HIGH);
pinMode(DS1302_VCC_PIN, OUTPUT);


RTC.haltRTC(1); //clock enable (1), clock disable (0)
RTC.writeEN(0); //Write protection OFF (1), write protection ON (0)

//Time set
//setTime(1,19,0,16,12,2014);
//time_t t = now();
//RTC.set(t);

delay(200);
}

///////////////////////////////////////// Main Loop ///////////////////////////////////
void loop () {
ether.packetLoop(ether.packetReceive());
do {
successRead = getID(); // sets successRead to 1 when we get read from reader otherwise 0

normalModeOn(); // Normal mode, blue Power LED is on, all others are off

}
while (!successRead); //the program will not go further while you not get a successful read

openDoor();

}

///////////////////////////////////////// Get PICC's UID ///////////////////////////////////
int getID() {
// Getting ready for Reading PICCs
if ( ! mfrc522.PICC_IsNewCardPresent()) { //If a new PICC placed to RFID reader continue
return 0;
}
if ( ! mfrc522.PICC_ReadCardSerial()) { //Since a PICC placed get Serial and continue
return 0;
}
//Serial.println("Scanned PICC's UID:");
for (int i = 0; i < 4; i++) { //
readCard[i] = mfrc522.uid.uidByte[i];
Serial.print(readCard[i], HEX);
}
Serial.println(readCard[4],HEX);
char string_temp[7];
dtostrf (readCard[2], 4, 2, string_temp);
Stash stash;
byte sd = stash.create();
stash.print(string_temp);
stash.print('\r');
stash.save();
Stash::prepare(PSTR("$H"), sd);
ether.tcpSend();

Serial.println("Packet sent!");

Serial.println("");
mfrc522.PICC_HaltA(); // Stop reading
return 1;
}

//////////////////////////////////////// Normal Mode Leds ///////////////////////////////////
void normalModeOn () {
digitalWrite(blueLed, LED_ON); // Blue LED ON and ready to read card
digitalWrite(redLed, LED_OFF); // Make sure Red LED is off
digitalWrite(greenLed, LED_OFF); // Make sure Green LED is off
digitalWrite(relay, LOW); // Make sure Door is Locked
}


///////////////////////////////////////// Unlock Door ///////////////////////////////////
void openDoor() {
digitalWrite(blueLed, LED_OFF); // Turn off blue LED
digitalWrite(redLed, LED_OFF); // Turn off red LED
digitalWrite(greenLed, LED_ON); // Turn on green LED
digitalWrite(relay, HIGH); // Unlock door!
delay(1000); // Hold door lock open for given seconds
digitalWrite(relay, LOW); // Relock door
delay(1000); // Hold green LED on for 2 more seconds
}

///////////////////////////////////////// Failed Access ///////////////////////////////////
void failed() {
digitalWrite(greenLed, LED_OFF); // Make sure green LED is off
digitalWrite(blueLed, LED_OFF); // Make sure blue LED is off
digitalWrite(redLed, LED_ON); // Turn on red LED
delay(2000);

}

我为 arduino 使用 EtherCard.h 库和 ENC28J60 以太网模块。

最佳答案

ENC28J60 与 Arduino UNO 不兼容,当与其他 SPI 设备一起使用时很可能与 MEGA2560 兼容。

您应该改用使用 W5100 的默认 Arduino Ethernet Shield。

我在使用 ENC28J60 时遇到了同样的问题,尝试了很多设置并最终得到了一个 W5100,它开箱即用,可以使用默认的以太网库。

关于Arduino Mega2560 ENC28J60 和 RFID 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29926949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com