Arduino mega程序不报错上传成功但是操作没反应,无法初始化,LCD显示方块

Arduino mega程序上传成功但是操作没反应,LCD显示一排方块。

毕设上找的资料,买板子自己连线,代码通过磕磕绊绊的修改终于运行成功了,但是上传后相关元件无法使用比如:RFID,LCD1602A,密码键盘等。

相关代码如下
#include <DS3231.h>
#include <SD.h>
#include <Keypad.h>
#include <MFRC522.h> 
#include <Servo.h> 
#include <SoftwareSerial.h>
#include <LiquidCrystal.h>
SoftwareSerial mySerial(10,11); //软件初始化
DS3231 rtc(SDA,SCL);

#define SSRFID_PIN 53 
#define RSTRFID_PIN 47 
MFRC522 mfrc522(SSRFID_PIN,RSTRFID_PIN); 
#define SSSD_PIN 54
File myFile; 

//键盘
const byte ROWS = 4; //键盘行
const byte COLS = 4; //键盘列
//键盘布局
char hexaKeys[ROWS][COLS] = {
{'1' ,'2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};

byte rowPins[ROWS] = {31, 33, 35, 37}; //输出行
byte colPins[COLS] = {39, 41, 43, 45}; //输出列
Keypad keyPad=Keypad(makeKeymap(hexaKeys),rowPins,colPins, ROWS,COLS);

//LCD

LiquidCrystal lcd(22,23,24,25,26,27);     //LCD引脚
int redPin=2;     //红色引脚(无法访问)
int greenPin=3;     //绿色引脚(允许访问)
int doorPin=5;    //门锁 (高电平关闭)
int steps=0;    //计数器
int state=0;    //蓝牙状态

//舵机
Servo servo_Motor;
String password = "1234";     //键盘默认密码
int position=0;     // LCD和密码变量
int wrong=0;    // 密码错误次数

//RFID
//1A 83 57 D3 = 蓝色标签
//B3 13 C6 AD = 白色标签

void setup() 
{

Serial.begin(9600); 
rtc.begin();    //启动实时时钟
mySerial.begin(9600);     //蓝牙串行
pinMode(doorPin, INPUT_PULLUP);

//SD卡   
pinMode(46, OUTPUT);     //将引脚46更改为输出模式(SS引脚)
digitalWrite(46, HIGH);     //RFID一开始需要高电平

//RFID
pinMode(53, OUTPUT);    //将引脚53更改为输出模式(SS引脚)
digitalWrite(53, LOW);    //必须从启动时开始降低,以便使用RFID。
SPI.begin(); //启动串行外围接口
mfrc522.PCD_Init();     //启动RFID
if (!SD.begin(46))    //启动SD库和卡
{ 
while (1);
}
Serial.println("initialization done.");     //串行故障排除
lcd.begin(16,2);    //LCD尺寸
lcd.clear();
servo_Motor.attach(6);    //将舵机接到6号引脚(PWM)
setLocked(true);    //安装过程中第一次锁定
}

void loop() 
{
lcd.clear();    //清屏
lcd.print("Enter Password: ");     //LCD显示
delay(100);

//键盘
char pressed = keyPad.getKey();     //用于按键的变量
String key[4];    //变量
if (pressed)    //如果通过键盘输入密码
{
lcd.clear();    //清屏
lcd.print("Enter Password:");     //LCD显示
lcd.setCursor(position, 1);      //
lcd.print(pressed);     //LCD显示按下的键
delay(200);

if (pressed == '*' || pressed == '#')     //I如果按下*或#
{
position = 0;     //复位
setLocked(true);    //锁定
lcd.clear();    //LCD清屏
}

else if (pressed == password[position])     //如果按下的密码正确
{
key[position] = pressed;    //将按下的剑添加到变量
position++;     //
}

else if (pressed != password[position] )    //如果按下的密码不正确
{
wrong++;    //错误+1
position ++;    
}

if (position == 4)    //如果=4
{
if (wrong>0)    //如果错误计数器大于0
{
wrong=0;    //重置错误计数器
position=0;     //重置计数器
lcd.clear();    //LCD清屏
lcd.print("WRONG");     
lcd.setCursor(5,1); 
lcd.print("PASSWORD"); 
delay(1000);
setLocked(true);    //锁定
}

else if (position==4&&wrong==0)     //如果计数器等于4且错误等于0
{
position = 0;     //复位
wrong = 0;    //复位
lcd.clear();
lcd.print("PASSWORD");
lcd.setCursor(6, 1);
lcd.print("ACCEPTED");
delay(1000);
lcd.clear();
lcd.print("Door Open");
setLocked(false);     //解除锁定
steps=1;    
    }
  }
}

//蓝牙
else if (mySerial.available()>0)    // 检测是否有数据传入
{ 
state=mySerial.read();    // 读取数据
if (state == '1') 
{
lcd.clear(); 
lcd.print("Bluetooth Open"); 
setLocked(false); 
steps=1; 
mySerial.println("Unlocked");   // 发回字符串"Unlocked"
}
}

//RFID    //等待标签
else 
{
if (!mfrc522.PICC_IsNewCardPresent())
{
return;
}

//读取卡信息
if (!mfrc522.PICC_ReadCardSerial()) 
{
return;
}
String content = "";    //标签ID
for (byte i=0;i<mfrc522.uid.size;i++) 
{
content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
content.concat(String(mfrc522.uid.uidByte[i], HEX));
}

//匹配标签信息
content.toUpperCase();
content = content.substring(1);
if ((content=="1A 83 57 D3")||(content == "B3 13 C6 AD"))     //如果标签匹配成功
{ 
digitalWrite(53, HIGH); 
digitalWrite(46, LOW); 
myFile = SD.open("log.txt", FILE_WRITE);     //打开SD卡上的文件
if (content == "1A 83 57 D3")     //如果匹配
{ 
lcd.clear();
lcd.setCursor(3,0);
lcd.print("Velkommen");
lcd.setCursor(4, 1);
lcd.print("Flemming");

//SD卡
myFile.print(rtc.getDateStr());     //将日期打印到SD卡
myFile.print(" ");    
myFile.print(rtc.getTimeStr());     
myFile.print(" ");    
myFile.println("Flemming"); 
myFile.close();     //关闭SD打开的文件
digitalWrite(46, HIGH);     
digitalWrite(53, LOW); 
}

if (content == "B3 13 C6 AD") 
{
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("Velkommen");
lcd.setCursor(4, 1);
lcd.print("Mikkel");
myFile.print(rtc.getDateStr());     
myFile.print(" ");    
myFile.print(rtc.getTimeStr()); 
myFile.print(" "); 
myFile.println("Mikkel");
myFile.close(); 
digitalWrite(46, HIGH); 
digitalWrite(53, LOW); 
}
setLocked(false); 
steps = 1; 
}
else    //如果标签不匹配
{ 
lcd.clear(); 
lcd.print("Not Authorized");
delay(2000);
}
}

//检测开关状态
while (steps>0) 
{ 
if ((steps == 1)&&(digitalRead(doorPin)==HIGH))     //如果等于1,则读取状态然后继续
{ 
steps = 2; 
}

if ((steps==2)&&(digitalRead(doorPin)==LOW)) 
{ 
steps = 3; //set step 3
}

if ((steps==3)&&(digitalRead(doorPin)==HIGH)) 
{ 
setLocked(true); 
lcd.clear(); 
lcd.print("Enter Password:"); 
mySerial.println("locked"); 
steps=0; 
}
}
} 
void setLocked(int locked)    
{
if (locked)     
{
digitalWrite(redPin, HIGH);     //红灯亮
digitalWrite(greenPin, LOW);    //绿灯灭
servo_Motor.attach(6);    //将舵机链接到6号引脚
servo_Motor.write(150);     //舵机旋转150度
delay(1000);
servo_Motor.detach(); 
}
else 
{
digitalWrite(redPin, LOW); 
digitalWrite(greenPin, HIGH);
servo_Motor.attach(6); 
servo_Motor.write(0); 
delay(1000);
servo_Motor.detach();
}
}
没有报错,但就是无法使用。

如果把LCD的初始化放到set up最前面就可以实现LCD的初始化,但如果像上面代码按arduino mega的引脚顺序初始化就不行了

img


这是frtzing的链接图,图片也是网上找的,按这种方法我也连了,但依旧这样,而且两个LED都不亮。

求帮我看看,我连的线应该没问题,可能就是代码有点错,但我不清楚错在哪。

查到的资料链接https://m.elecfans.com/article/1049325.html