Светодиод по кнопке
- Войдите на сайт для отправки комментариев
Вс, 27/10/2019 - 16:35
Привет!
У меня есть вопрос. Так-как я ещё нуб. У меня есть матричная клавиатура 4х4, а также дисплей LCD 1602 I2C. Мне нужно чтобы когда на клавиатуре нажималась определённая кнопка, надпись на дисплее менялась и загорался светодиод. Помогите пожалуйста
Скетч на данный момент:
#include <Wire.h> #include <LiquidCrystal_I2C.h> #include <Keypad.h> // Подключаем библиотеку LiquidCrystal_I2C lcd(0x27,16,2); const byte ROWS = 4; // 4 строки const byte COLS = 4; // 4 столбца char keys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; byte rowPins[ROWS] = {11,10, 9, 8}; byte colPins[COLS] = {7, 6, 5, 4}; Keypad customKeypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); int k = 0; void setup(){ Serial.begin(9600); lcd.init(); // Инициализируем экран lcd.backlight(); } void loop(){ lcd.setCursor(1,0); // устанавливаем курсор на начало первой строки lcd.print("Vvedite summu"); char customKey = customKeypad.getKey(); if (customKey){ Serial.println(customKey); lcd.setCursor(k, 1); // устанавливаем курсор на начало второй строки lcd.print(customKey); k = k + 1; lcd.setCursor(5, 1); // устанавливаем курсор на начало второй строки lcd.print("RUB/DOL"); tone(12, (int)customKey*10, 300); // Издаем звуковой сигнал длиной 300 миллисекунд } }Их там 16
Кнопку пытался сделать не получилось. Вот пришёл сюда. А в коде нет. Не хотел чтобы мешала
Да. Мне надо чтобы при нажатии на кнопку D менялся текст на дисплее, и включался светодиод
Так, сами-то Вы пытались делать или просто работу заказать хотите? Пытались, так показывайте.
Вот:
#include <Wire.h> #include <LiquidCrystal_I2C.h> #include <Keypad.h> LiquidCrystal_I2C lcd(0x27,16,2); const byte ROWS = 4; // 4 строки const byte COLS = 4; // 4 столбца char keys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; byte rowPins[ROWS] = {11,10, 9, 8}; byte colPins[COLS] = {7, 6, 5, 4}; Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );// Create the Keypad Keypad customKeypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); int Relay = 13; int k=0; void setup() { Serial.begin(9600); lcd.init(); // Инициализируем экран lcd.backlight(); pinMode(Relay, OUTPUT); } void loop() { lcd.setCursor(1,0); // устанавливаем курсор на начало первой строки lcd.print("Vvedite summu"); char customKey = customKeypad.getKey(); if (customKey){ Serial.println(customKey); lcd.setCursor(k, 1); // устанавливаем курсор на начало второй строки lcd.print(customKey); k = k + 1; lcd.setCursor(5, 1); // устанавливаем курсор на начало второй строки lcd.print("RUB/DOL"); tone(12, (int)customKey*10, 300); // Издаем звуковой сигнал длиной 300 миллисекунд char key = kpd.getKey(); if(key) // Check for a valid key. { switch (key) { case 'D': digitalWrite(Relay, HIGH); break; case 'A': digitalWrite(Relay, LOW); break; } } } }Светодиод работает через раз, а с дисплеем не получилось
у вас в коде две клавиатыры, одна мешает другой. Перепишите и работу с диодом, и с дисплеем на одной и той же клаве
Что делать? Вылазиет ошибка
Что делать? Вылазиет ошибка
вы правда думаете, что не видя кода - кто-то поймет, что вы там наворотили в скетче? :)
Я скидывал. Кажется:)
Всё я уже разобрался с светодиодом. А как при нажатии на определённую кнопку на экране менялся текст?
Всё я уже разобрался.
ага-ага...
Смотрите, чтоб через пару часов или дней вы не пришли с этим вопросом снова
А как при нажатии на определённую кнопку на экране менялся текст?
Ну, нада менять текст при нажатии на определенную кнопку.
#include <Wire.h> #include <LiquidCrystal_I2C.h> #include <Keypad.h> LiquidCrystal_I2C lcd(0x27,16,2); const byte ROWS = 4; // 4 строки const byte COLS = 4; // 4 столбца char keys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; byte rowPins[ROWS] = {11,10, 9, 8}; byte colPins[COLS] = {7, 6, 5, 4}; Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );// Create the Keypad int Relay = 13; int k=0; void setup() { Serial.begin(9600); lcd.init(); // Инициализируем экран lcd.backlight(); pinMode(Relay, OUTPUT); } void loop() { lcd.setCursor(1,0); // устанавливаем курсор на начало первой строки lcd.print("Vvedite summu"); char customKey = kpd.getKey(); if (customKey){ Serial.println(customKey); lcd.setCursor(k, 1); // устанавливаем курсор на начало второй строки lcd.print(customKey); k = k + 1; lcd.setCursor(9, 1); // устанавливаем курсор на начало второй строки lcd.print("RUB/DOL"); tone(12, (int)customKey*10, 300); // Издаем звуковой сигнал длиной 300 миллисекунд if(customKey) // Check for a valid key. { switch (customKey) { case 'D': digitalWrite(Relay, HIGH); lcd.setCursor(2, 0); lcd.print('Ozhidajte'); break; case 'A': digitalWrite(Relay, LOW); break; } } } }При нажатии на кнопку "D" текст не меняется
а светодиод загорается при нажатии на D ?
а светодиод загорается при нажатии на D ?
Да.
отлично. А на дисплей что-нибудь выводится, хотя бы "Vvedite summu" ?
Да. На дисплее всё остаётся как было. Но текст не меняется
Сам текст в скетче 'Ozhidajte' чёрный, а не синий
обмотайте его синей изолентой в виде двойных кавычек.
Скетч на данный момент
#include <Wire.h> #include <LiquidCrystal_I2C.h> #include <Keypad.h> LiquidCrystal_I2C lcd(0x27,16,2); const byte ROWS = 4; // 4 строки const byte COLS = 4; // 4 столбца char keys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; byte rowPins[ROWS] = {11,10, 9, 8}; byte colPins[COLS] = {7, 6, 5, 4}; Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );// Create the Keypad int Relay = 13; int Relay2 = 2; int k=0; void setup() { Serial.begin(9600); lcd.init(); // Инициализируем экран lcd.backlight(); pinMode(Relay, OUTPUT); } void loop() { lcd.setCursor(1,0); // устанавливаем курсор на начало первой строки lcd.print("Vvedite summu"); char customKey = kpd.getKey(); if (customKey){ Serial.println(customKey); lcd.setCursor(k, 1); // устанавливаем курсор на начало второй строки lcd.print(customKey); k = k + 1; lcd.setCursor(9, 1); // устанавливаем курсор на начало второй строки lcd.print("RUB/DOL"); tone(12, (int)customKey*10, 300); // Издаем звуковой сигнал длиной 300 миллисекунд if(customKey) // Check for a valid key. { switch (customKey) { case 'D': digitalWrite(Relay, HIGH); lcd.noDisplay(); break; case 'A': digitalWrite(Relay, LOW); lcd.display(); break; case '*': lcd.clear(); k = 0; lcd.setCursor(1, 0); lcd.print("Ozhidajte"); break; case 'C': digitalWrite(Relay2, LOW); break; } } } }Текст "Vvedite summu" всё равно остаётся, а текст не меняется
Текст "Vvedite summu" всё равно остаётся
Праильна, ведь он у тебя печатается при каждом входе в loop(), примерно 10 тысяч раз в секунду
А как можно исправить?
А как можно исправить?
Не печатать так часто.