0

こんにちは、私の問題は、変数「var」の値を入力してから出力するときです。全く違う価値を与えてくれる。たとえば、「5」と入力すると、10 進数の値 ( 53 ) が出力されます。これは、ある数値を別の数値と一致させようとしていることがわかり、これが問題を引き起こしていることがわかります。

注: if (Serial.available() > 0) を while 条件に変更しようとしましたが、うまくいきませんでした。また、16x2 液晶ディスプレイも使用しています。

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);

int backLight = 13;
int var=0;
int password=5320;
void setup()
{
  Serial.begin(9600);
  pinMode(backLight, OUTPUT);
  digitalWrite(backLight, HIGH);
  lcd.begin(16,2);              
  lcd.clear();                  
  Serial.println("Enter password");
}

void loop()
{
  if (Serial.available() > 0) {
    var = Serial.read();
    Serial.println(var);
    if (var==password)
    {
      lcd.clear();                  
      lcd.setCursor(0,0);
      lcd.print("Access granted");
    }    
    else
    {
      lcd.clear();                  
      lcd.setCursor(0,0);
      lcd.print("Access denied");
    }
    delay(100);
  }
}
4

1 に答える 1

0

文字列入力を int に変換する必要があります。関数の使用。また、int だけでなく、文字を配列に読み込む必要があります。たとえば、次のようになります。

char var[10];
int i = 0; // index
while (Serial.Available() > 0){
    char readval = Serial.Read();
    var[i++] = readval;
}
var[i] = 0;  // null terminate string
int int_of_var = atoi(var);

5320 は単一の整数に収まる可能性がありますが、文字 '5'、'3'、'2'、'0' はそれらを保持するために 4 バイトが必要であることに注意してください (プラス NULL 終端用のバイト)。

于 2014-05-26T17:44:01.660 に答える