2016-03-03 44 views
1

我一直試圖從arduino鍵盤讀取多個字符串,但它似乎第一個字符串總是附加到第二個,我不知道爲什麼?當我打印studentNumber時,訪問碼加上星號被附加到studentNumber,可能是什麼原因造成的?請幫助,非常感謝。arduino小鍵盤如何獲取多個字符串

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

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

byte rowPins[ROWS] = {10, 9, 8, 7}; //connect to the row pinouts of the keypad 
byte colPins[COLS] = {13, 12, 11}; //connect to the column pinouts of the keypad 

// initialize the library with the numbers of the interface pins 
LiquidCrystal lcd(A0, A1, A2, A3, A4, A5); 
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS); 
char holdKeys[] = {}; 
int i = 0; 
int j = 0; 
char accessCode[5]; 
char holdMaskedCode[5]; 
char holdMaskedNumber[8]; 
char studentNumber[9]; 
String accessCodeString; 
Servo servo; 


void setup() { 
    // put your setup code here, to run once: 

    servo.attach(5); 
    lcd.begin(16, 4); 
    lcd.setCursor(0,0); 
    lcd.print("Welcome"); 
    lcd.setCursor(0,0); 
    pinMode(4, OUTPUT); 
    delay(2000); 

lcd.clear(); 
lcd.print("Access Code"); 
    //keypad.addEventListener(getAccessCode); 

} 

void loop() 
{ 
    char key = keypad.getKey(); 
    if(key) 
    { 
    if(i < 5) 
    { 
     accessCode[i] = key; 
     holdMaskedCode[i] = '*'; 
     lcd.setCursor(1,2); 
     lcd.print(String(holdMaskedCode)); 
     if(i == 4) 
     { 
     lcd.clear(); 
     lcd.setCursor(1,2); 
     accessCodeString = String(accessCode); 
     lcd.clear(); 
     lcd.print("Student Number"); 
     } 

     i++; 
    } 
    else 
    { 
     if(j < 9) 
     { 
     studentNumber[j] = key; 
     holdMaskedNumber[j] = '*'; 
     lcd.setCursor(0,2); 
     lcd.print(holdMaskedNumber); 

     if(j == 8) 
     { 
      lcd.clear(); 
      String number = String(studentNumber); 
      lcd.print(number); 

      delay(1000); 
      lcd.clear(); 
      for(int i =0; i<10; i++) 
      { 
      lcd.print("Please wait."); 
      delay(500); 
      lcd.clear(); 
      lcd.print("Please wait.."); 
      delay(500); 
      lcd.clear(); 
      lcd.print("Please wait..."); 
      delay(500); 
      lcd.clear(); 
      } 
      digitalWrite(4, HIGH); 
      for(int k =0; k<=180; k+=2) 
      { 
      servo.write(k); 
      delay(15); 
      } 
      setup(); 

     } 

     j++; 
     } 

    } 

    } 

} 
+0

甚至當我做了lcd.print(studentNumber) –

回答

0
char accessCode[5]; 
... 

    accessCode[i] = key; 
    .... 
    if(i == 4) 
    { 
    lcd.clear(); 
    lcd.setCursor(1,2); 
    accessCodeString = String(accessCode); 

你是不是空的結束accessCode這裏,所以當你把它轉換爲字符串,轉換運行在到內存中撿其他隨機的垃圾。

accessCode應該是字節長,並且在轉換之前,終止它,即。

accessCode[5] = 0; // terminate string 
    accessCodeString = String(accessCode); 
+0

正在嘗試是很好,但似乎沒有工作,我已經試過accessCode [5] = 0;並且accessCode [5] ='\ 0';沒有運氣 –

+0

我也試過,但似乎沒有工作,我試過accessCode [5] = 0;並且accessCode [5] ='\ 0';沒有運氣 –

+0

上午嘗試,以及似乎沒有工作,我已經嘗試accessCode [5] = 0;並且accessCode [5] ='\ 0';沒有運氣 –