Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
arduino键盘如何获取多个字符串_Arduino - Fatal编程技术网

arduino键盘如何获取多个字符串

arduino键盘如何获取多个字符串,arduino,Arduino,我一直在尝试从arduino键盘读取多个字符串,但似乎第一个字符串总是附加到第二个字符串,我不知道为什么?当我打印studentNumber时,访问码加上星号会附加到studentNumber上,这是什么原因造成的?请帮忙,非常感谢 #include <Keypad.h> #include <LiquidCrystal.h> #include <Servo.h> const byte ROWS = 4; //four rows const byte COLS

我一直在尝试从arduino键盘读取多个字符串,但似乎第一个字符串总是附加到第二个字符串,我不知道为什么?当我打印studentNumber时,访问码加上星号会附加到studentNumber上,这是什么原因造成的?请帮忙,非常感谢

#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++;
      }

    }

  }

}
#包括
#包括
#包括
常量字节行=4//四排
常量字节COLS=3//三列
字符键[行][列]={
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
字节rowPins[行]={10,9,8,7}//连接至键盘的世界其他地区引脚
字节colPins[COLS]={13,12,11}//连接至小键盘的列引脚
//使用接口引脚的编号初始化库
液晶显示器(A0、A1、A2、A3、A4、A5);
小键盘=小键盘(makeyMap(键)、行PIN、列PIN、行、列);
字符保持键[]={};
int i=0;
int j=0;
字符访问码[5];
char-holdMaskedCode[5];
char-holdMaskedNumber[8];
char studentNumber[9];
字符串accessCodeString;
伺服;
无效设置(){
//将安装代码放在此处,以便运行一次:
伺服。连接(5);
lcd.begin(16,4);
lcd.setCursor(0,0);
lcd.打印(“欢迎”);
lcd.setCursor(0,0);
pinMode(4,输出);
延迟(2000年);
lcd.clear();
lcd.打印(“访问代码”);
//键盘。addEventListener(getAccessCode);
}
void循环()
{
char key=keypad.getKey();
如果(关键)
{   
如果(i<5)
{
accessCode[i]=密钥;
holdMaskedCode[i]='*';
lcd.setCursor(1,2);
打印(字符串(holdMaskedCode));
如果(i==4)
{
lcd.clear();
lcd.setCursor(1,2);
accessCodeString=字符串(accessCode);
lcd.clear();
lcd.打印(“学号”);
}
i++;
}
其他的
{
if(j<9)
{
学生编号[j]=钥匙;
holdMaskedNumber[j]='*';
lcd.setCursor(0,2);
lcd.打印(holdMaskedNumber);
如果(j==8)
{
lcd.clear();
字符串编号=字符串(studentNumber);
lcd.打印(数字);
延迟(1000);
lcd.clear();
对于(int i=0;i
您在这里不是空的,因此当您将其转换为字符串时,转换将继续运行到内存中,并拾取其他随机垃圾

accessCode
的长度应为6字节,在进行转换之前,请终止它,即

    accessCode[5] = 0;  // terminate string
    accessCodeString = String(accessCode);
您在这里不是空的,因此当您将其转换为字符串时,转换将继续运行到内存中,并拾取其他随机垃圾

accessCode
的长度应为6字节,在进行转换之前,请终止它,即

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

即使我做了一个lcd.print(studentNumber)即使我做了一个lcd.print(studentNumber)也在尝试,但似乎不起作用,我尝试了accessCode[5]=0;也尝试了accessCode[5]='\0';没有luckAm尝试,但似乎不起作用,我尝试了accessCode[5]=0;还有accessCode[5]='\0';由于没有luckAm也尝试过,但似乎不起作用,我尝试了accessCode[5]=0;还有accessCode[5]='\0';没有太多的幸运因素Nick,似乎我试图在错误的索引而不是最后一个索引处插入空终止符。非常感谢,现在一切正常。我也在尝试,但似乎不起作用,我尝试了accessCode[5]=0;还有accessCode[5]='\0';没有luckAm也尝试了,但似乎不起作用,我尝试了accessCode[5]=0;还有accessCode[5]='\0';没有luckAm也尝试了,但似乎不起作用,我尝试了accessCode[5]=0;还有accessCode[5]='\0';没有太多的幸运因素Nick,似乎我试图在错误的索引处插入空终止符,而不是最后一个。非常感谢,现在一切正常。我很高兴