2016-08-04 6 views
-1

Попытка создать простой сумку Arduino, но у меня возникают проблемы с программированием. Я не знаю, где я ошибся. Любая помощь приветствуется.Как запрограммировать Arduino, чтобы взять и сохранить два входа клавиатуры в отдельных переменных?

Пользователь должен ввести два номера на клавиатуре, и их сумма будет отображаться на ЖК-дисплее. Каждый из двух чисел, введенных пользователем, сохраняется соответственно в их переменных. Проблема в том, что после ввода первого номера программа автоматически подключается к 0 (поскольку в этот момент не нажата ни одна клавиша) для второй переменной. Я попробовал инструкции «if», «while» и «do while» для устранения NO_KEY, но ни один из них, похоже, не работает.

Вопрос в том, есть ли способ сохранить число, введенное пользователем в переменной, и не позволять программе переписывать его 0, потому что в этот момент не нажата ни одна клавиша. Или также, чтобы Arduino не получал больше ввода с клавиатуры после нажатия клавиши (возможно, отключите клавиатуру) ...

Если вы готовы потратить некоторое время на просмотр кода, связанный here содержит как код, так и всю настройку лаборатории.

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

LiquidCrystal lcd (7,8,9,10,11,12); 
int backLight(13); 


int Addition(int x, int y){ 
    int z; 
    z = x+y; 
    lcd.setCursor(8,0); 
    lcd.write(z); 
} 

void setup() { 

} 

const byte rows =4; 
const byte cols =3; 

char keys[rows][cols]={ 
    {'1','2','3'}, 
    {'4','5','6'}, 
    {'7','8','9'}, 
    {'*','0','#'} 
}; 

byte rowPins[rows] = {0,1,2,3}; 
byte colPins[cols] = {4,5,6}; 

Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, rows, cols); 


void loop(){ 

    int a; 
    int b; 

    a = keypad.getKey(); 
    if (a != NO_KEY){ 

     do { 
      b = keypad.getKey(); 
     }while (b == NO_KEY); 

     pinMode (backLight, OUTPUT); 
     digitalWrite(backLight, HIGH); 
     lcd.begin(16,2); 
     lcd.clear(); 

     lcd.setCursor(0,0); 
     lcd.write(a); 

     lcd.setCursor(2,0); 
     lcd.write("+"); 

     lcd.setCursor(4,0); 
     lcd.write(b); 

     lcd.setCursor(6,0); 
     lcd.write("="); 

     Addition(a,b); 
     delay(10000); 

    } 

} 
+0

схема, вероятно, не имеет значения, но код не является, поэтому, пожалуйста, измените ваш вопрос, чтобы включить фактический код. Вопросы со ссылками на код бесполезны, поскольку кто знает, когда ссылки исчезнут. Пожалуйста, уделите время и [прочитайте о том, как задавать хорошие вопросы] (http://stackoverflow.com/help/how-to-ask), и узнайте, как создать [Минимальный, Полный и Подтверждаемый пример] (http: //stackoverflow.com/help/mcve). –

ответ

1

У вас есть часть кода, как это:

do { 
    b = keypad.getKey(); 
} while (b = NO_KEY); 

В состоянии в то время как он выглядит, как вы назначая NO_KEY к b с (b = NO_KEY), вместо проверки равенства с (b == NO_KEY). Назначение возвращает true, поэтому цикл не будет завершен. Он должен выглядеть следующим образом:

do { 
    b = keypad.getKey(); 
} while (b == NO_KEY); 

Для задачи Кроме того, ваша раскладка содержит символы, а не Интс. Так и б должны быть типа полукокса, и вы можете использовать atoi() преобразовать их в Интс:

char a; 
char b; 

// ...assign values to a and b as you already do... 

Addition(atoi(a), atoi(b)); // use atoi() (ascii to int) to pass integer values to Addition 

В качестве альтернативы, вы можете изменить раскладку быть:

int keys[rows][cols]={ 
    {1, 2, 3}, 
    {4, 5, 6}, 
    {7, 8, 9}, 
    {'*',0,'#'} 
}; 

и использовали lcd.print(a, DEC) для печати ценности. Тогда вам не понадобится atoi(), и, на мой взгляд, это будет чище. Функция Дополнения:

Addition(int x, int y) { 
    int z; 
    z = x+y; // z is now the integer sum 
    lcd.setCursor(8,0); 
    lcd.print(z, DEC); // print the decimal value of z (default is ascii) 
} 
+0

Спасибо огромное! –

+0

Хорошо. Так что благодаря вам наффарн работает на полпути ... по какой-то причине он отображает буквы в виде суммы вместо цифр –

+0

Фактически она отображает сумму как букву в алфавите, которая содержит номера. - Например, 1 + 0 = a (1 - первая буква) 1 + 1 = b (две в качестве второй буквы) 2 + 2 = d и т. Д. ... –