Светодиод по кнопке

Kreichik
Offline
Зарегистрирован: 27.10.2019

Привет!

У меня есть вопрос. Так-как я ещё нуб. У меня есть матричная клавиатура 4х4, а также дисплей LCD 1602 I2C. Мне нужно чтобы когда на клавиатуре нажималась определённая кнопка, надпись на дисплее менялась и загорался светодиод. Помогите пожалуйста

Kreichik
Offline
Зарегистрирован: 27.10.2019

Скетч на данный момент:

#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 миллисекунд
      }
}

 

mixail844
Offline
Зарегистрирован: 30.04.2012
схему подключения ? 
кнопка настолько секретная что даже не указана в скетче ? 
 
покажите что написали вы и опишите что у вас не работает ? 
если бы предоставленный скетч был написан вами,то и добавить кнопку было бы не проблемой
Komandir
Offline
Зарегистрирован: 18.08.2018

Их там 16

Kreichik
Offline
Зарегистрирован: 27.10.2019

Кнопку пытался сделать не получилось. Вот пришёл сюда. А в коде нет. Не хотел чтобы мешала

Kreichik
Offline
Зарегистрирован: 27.10.2019

Да. Мне надо чтобы при нажатии на кнопку D менялся текст на дисплее, и включался светодиод

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Так, сами-то Вы пытались делать или просто работу заказать хотите? Пытались, так показывайте.

Kreichik
Offline
Зарегистрирован: 27.10.2019

Вот:


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

Светодиод работает через раз, а с дисплеем не получилось

b707
Онлайн
Зарегистрирован: 26.05.2017

у вас в коде две клавиатыры, одна мешает другой. Перепишите и работу с диодом, и с дисплеем на одной и той же клаве

Kreichik
Offline
Зарегистрирован: 27.10.2019



could not convert 'kpd' from 'Keypad' to 'bool'

Что делать? Вылазиет ошибка

b707
Онлайн
Зарегистрирован: 26.05.2017

Kreichik пишет:

could not convert 'kpd' from 'Keypad' to 'bool'

Что делать? Вылазиет ошибка

вы правда думаете, что не видя кода - кто-то поймет, что вы там наворотили в скетче? :)

Kreichik
Offline
Зарегистрирован: 27.10.2019

Я скидывал. Кажется:)

Всё я уже разобрался с светодиодом. А как при нажатии на определённую кнопку на экране менялся текст?

b707
Онлайн
Зарегистрирован: 26.05.2017

Kreichik пишет:

Всё я уже разобрался.

ага-ага...

Смотрите, чтоб через пару часов или дней вы не пришли с этим вопросом снова

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Kreichik пишет:

А как при нажатии на определённую кнопку на экране менялся текст?

Ну, нада менять текст при нажатии на определенную кнопку. 

Kreichik
Offline
Зарегистрирован: 27.10.2019

#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" текст не меняется

b707
Онлайн
Зарегистрирован: 26.05.2017

Kreichik пишет:
При нажатии на кнопку "D" текст не меняется

а светодиод загорается при нажатии на D ?

Kreichik
Offline
Зарегистрирован: 27.10.2019

b707 пишет:

Kreichik пишет:
При нажатии на кнопку "D" текст не меняется

а светодиод загорается при нажатии на D ?

Да. 

b707
Онлайн
Зарегистрирован: 26.05.2017

отлично. А на дисплей что-нибудь выводится, хотя бы "Vvedite summu" ?

Kreichik
Offline
Зарегистрирован: 27.10.2019

Да. На дисплее всё остаётся как было. Но текст не меняется

Kreichik
Offline
Зарегистрирован: 27.10.2019

  Сам текст в скетче 'Ozhidajte' чёрный, а не синий

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

обмотайте его синей изолентой в виде двойных кавычек.

Kreichik
Offline
Зарегистрирован: 27.10.2019

Скетч на данный момент

#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" всё равно остаётся, а текст не меняется

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Kreichik пишет:

Текст "Vvedite summu" всё равно остаётся

Праильна, ведь он у тебя печатается при каждом входе в loop(), примерно 10 тысяч раз в секунду

Kreichik
Offline
Зарегистрирован: 27.10.2019

 А как можно исправить?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Kreichik пишет:

 А как можно исправить?

Не печатать так часто.