c++ 我有一个问题,运行一个arudino的lcd代码,代码是好的,但如果我试图启动一个串行开始的代码,它不会工作

2admgd59  于 2023-04-01  发布在  其他
关注(0)|答案(1)|浏览(118)

因此,在一个简单的代码是写得很差,因为我计划它是一个计算器的基础,但rigth现在只是一个计时器,所以这可能是问题,但一切工作,直到我试图建立一个连接与串行监视器“开始(9600)”
没有串行线的代码工作正常,如果你把它,lcd显示dosnt打开。(对比度和背光是打开的,但它们不受代码控制。)
代码:

#include <Keypad.h>
#include <LiquidCrystal.h>

// This defines the LCD wiring to the DIGITALpins
const int rs = 0, en = 1, d4 = 2, d5 = 3, d6 = 4, d7 = 5;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

// Digital LCD Constrast setting
int cs = 6;  // pin 9 for contrast PWM
const int contrast = 100;  // default contrast

// Time Set Buttons REMOVE LATER
int button1;
int button2;

// Pins definition for Time Set Buttons
int hs=0;// pin 0 for Hours Setting
int ms=2;// pin 1 for Minutes Setting

// initial Time display is 12:59:45 PM
int h = 7;
int m = 6;
int s = 45;
int flag = 1;  //PM

// Keypad
const byte ROWS = 4; // number of rows
const byte COLS = 3; // number of columns
char keys[ROWS][COLS] = {
  {'1', '2', '3'},
  {'4', '5', '6'},
  {'7', '8', '9'},
  {'*', '0', '#'}
};

byte rowPins[ROWS] = {8, 7, 6, 5}; // row pinouts of the keypad R1 = D8, R2 = D7, R3 = D6, R4 = D5
byte colPins[COLS] = {4, 3, 2};    // column pinouts of the keypad C1 = D4, C2 = D3, C3 = D2
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);

// Backlight Time Out 
const int Time_light = 150;
int bl_TO = Time_light;  // Backlight Time-Out
int bl = 9;  // Backlight pin
const int backlight = 120;  // no more than 7mA !!!

// For accurate Time reading, use Arduino Real Time Clock and not just delay()
static uint32_t last_time, now = 0;  // RTC

void setup() { 
  lcd.begin(16, 2);
  pinMode(hs,INPUT_PULLUP);// avoid external Pullup resistors for Button 1 REMOVE LATER
  pinMode(ms,INPUT_PULLUP);// and Button 2 REMOvE LATER
  analogWrite(cs, contrast);  // Adjust Contrast VO
  analogWrite(bl, backlight);  // Turn on Backlight
  now = millis();  // read RTC initial value
  Serial.begin(9600);
}

void loop()
{ 

  lcd.begin(16,2);// every second
// Update LCD Display
// Print TIME in Hour, Min, Sec + AM/PM
 lcd.setCursor(0,0);
 lcd.print("Time ");
 if(h<10)lcd.print("0");// always 2 digits
 lcd.print(h);
 lcd.print(":");
 if(m<10)lcd.print("0");
 lcd.print(m);
 lcd.print(":");
 if(s<10)lcd.print("0");
 lcd.print(s);

 if(flag==0) lcd.print(" AM");
 if(flag==1) lcd.print(" PM");
 
 lcd.setCursor(0,1);// for Line 2
 lcd.print("Precision clock");

// improved replacement of delay(1000) 
// Much better accuracy, no more dependant of loop execution time

for ( int i=0 ;i<5 ;i++)// make 5 time 200ms loop, for faster Button response
{

  while ((now-last_time)<200) //delay200ms
  { 
    now=millis();
  }
 // inner 200ms loop
 last_time=now; // prepare for next loop 

 // read Setting Buttons
 button1=digitalRead(hs);// Read Buttons
 button2=digitalRead(ms);

 //Backlight time out 
 bl_TO--;
 if(bl_TO==0)
 {
  analogWrite(bl,0);// Backlight OFF
  bl_TO++;
 }
 
 // Hit any to activate Backlight 
 if(  ((button1==0)|(button2==0)) & (bl_TO==1)  )
 {
  bl_TO=Time_light;
  analogWrite(bl,backlight);
  // wait until Button released
  while ((button1==0)|(button2==0))
  {
   button1=digitalRead(hs);// Read Buttons
   button2=digitalRead(ms);
  }
 }
 else
 // Process Button 1 or Button 2 when hit while Backlight on 
 {
  if(button1==0){
   h=h+1;
   bl_TO=Time_light;
   analogWrite(bl,backlight);
  }

 if(button2==0){
  s=0;
  m=m+1;
  bl_TO=Time_light;
  analogWrite(bl,backlight);
  }

/* ---- manage seconds, minutes, hours am/pm overflow ----*/
 if(s==60){
  s=0;
  m=m+1;
 }
 if(m==60)
 {
  m=0;
  h=h+1;
 }
 if(h==13)
 {
  h=1;
  flag=flag+1;
  if(flag==2)flag=0;
 }

 if((button1==0)|(button2==0))// Update display if time set button pressed
 {
  // Update LCD Display
  // Print TIME in Hour, Min, Sec + AM/PM
  lcd.setCursor(0,0);
  lcd.print("Time ");
  if(h<10)lcd.print("0");// always 2 digits
  lcd.print(h);
  lcd.print(":");
  if(m<10)lcd.print("0");
  lcd.print(m);
  lcd.print(":");
  if(s<10)lcd.print("0");
  lcd.print(s);

  if(flag==0) lcd.print(" AM");
  if(flag==1) lcd.print(" PM");
 
  lcd.setCursor(0,1);// for Line 2
  lcd.print("Precision clock");
 }

 } // end if else
}// end for


// outer 1000ms loop

 s=s+1; //increment sec. counting
    
    
// ---- manage seconds, minutes, hours am/pm overflow ----
 if(s==60){
  s=0;
  m=m+1;
 }
 if(m==60)
 {
  m=0;
  h=h+1;
 }
 if(h==13)
 {
  h=1;
  flag=flag+1;
  if(flag==2)flag=0;
 } 
 

 
// Loop end
}
62lalag4

62lalag41#

Arduino Uno使用引脚0和1进行串行。根据reference
在Uno、Nano、Mini和Mega上,引脚0和1用于与计算机通信。将任何东西连接到这些引脚都会干扰通信,包括导致无法上传到板。
现在,您正在为LCD使用这些引脚:

// This defines the LCD wiring to the DIGITALpins
const int rs = 0, en = 1, d4 = 2, d5 = 3, d6 = 4, d7 = 5;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

尝试使用不同的引脚连接rsen

相关问题