0 / 0 / 0
Регистрация: 03.07.2018
Сообщений: 9
1

Кодовый замок на Arduino nano

27.10.2018, 16:33. Показов 3841. Ответов 9

Видает ошибку при компиляции данного кода, уже всё что знал перепробовал ничего не получается, не могу понять в чем проблема, ведь код верный, синтаксис в библиотеках такой же

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <Keypad.h>
#include <Password.h>
 
Password password = Password( "1234" );
const byte ROWS = 4; // 4 строки
const byte COLS = 4; // 4 столбца
const char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
}; 
//устанавливаем пины столбцов и рядов
byte rowPins[ROWS] = {12,11, 10, 9}; 
byte colPins[COLS] = {8, 7, 6, 5}; 
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
#define ledPin 13
void setup(){
 digitalWrite(ledPin, LOW);   // исполнительный пин
 Serial.begin(9600);
 keypad.addEventListener(keypadEvent); //добавляем событие
 keypad.setDebounceTime(250);
}
 
void loop(){
 keypad.getKey();
}
 
void keypadEvent(KeypadEvent eKey){
 switch (keypad.getState()){
   case PRESSED:
     Serial.print("Pressed: ");
     Serial.println(eKey);
     switch (eKey){
       case '#': guessPassword(); break;
        default:
              password.append(eKey);
 }
}}
 
void guessPassword(){
    Serial.print("Guessing password... ");
    if (password.evaluate()){
          digitalWrite(ledPin,HIGH); //активация реле на 5 секунд
            delay(5000);                
            digitalWrite(ledPin,LOW); //отключение реле
          Serial.println("VALID PASSWORD "); //
             password.reset(); //сброс переменной пароля после корректного ввода
    }else{
          digitalWrite(ledPin,LOW);
          Serial.println("INVALID PASSWORD ");
             password.reset(); //сброс переменной пароля после некорректного ввода
    }
}
Ошибка:

key_password\key_password.ino:5:38: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]

Password password = Password( "1234" );
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.10.2018, 16:33
Ответы с готовыми решениями:

Кодовый замок
Есть скетч для Arduino под кодовый замок. Скомпилировал и залил на Mega 2560. Код по умолчанию...

Один кодовый замок на две двери
добрый день всем. в загашниках есть ардуино-уно нужно сворганить кодовый замок. но не простой)...

Arduino Nano, I2C
Привет бойцы невидимого фронта. Проблема такова, у меня есть часы реального времени DS1307, и...

Arduino Nano+ Bluetooth HC-05
Здравствуйте. Есть aрдуино нано и блютуз hc 05. Мало знаю по электронике, но приходится работать ...

9
348 / 282 / 144
Регистрация: 08.04.2013
Сообщений: 1,228
27.10.2018, 19:44 2
вернее всего надо так
C++
1
2
char * a ="1234";
Password password = Password( a );
0
0 / 0 / 0
Регистрация: 03.07.2018
Сообщений: 9
27.10.2018, 19:54  [ТС] 3
marat_miaki,
та же ошибка, только теперь на строке с char * a ="1234";
0
348 / 282 / 144
Регистрация: 08.04.2013
Сообщений: 1,228
27.10.2018, 20:13 4
У нас нет библиотеки
C++
1
#include <Password.h>
Загляните в неё и посмотрите какую переменную он от вас ожидает . Вы отправляете строку "1234",
Password( параметр ) в виде параметра ожидает указатель на строку символов а не строку
Еще надо посмотреть, этот пароль может в библиотеке как константа прописана, и её менять нельзя

Добавлено через 6 минут
лучше выложите Password.h
0
0 / 0 / 0
Регистрация: 03.07.2018
Сообщений: 9
27.10.2018, 20:42  [ТС] 5
marat_miaki,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include "Password.h"
 
//construct object in memory, set all variables
Password::Password(char* pass){
    set( pass );
    reset();
}
 
//set the password
void Password::set(char* pass){
    target = pass;
}
 
//evaluate a string, is it equal to the password?
bool Password::is(char* pass){ 
    byte i=0;
    while (*pass && i<MAX_PASSWORD_LENGTH){
        guess[i] = pass[i];
        i++;
    }
    return evaluate();
}
 
//append a char to the guessed password
bool Password::append(char character){ 
    if (currentIndex+1==MAX_PASSWORD_LENGTH){
        return false;
    }else{
        guess[currentIndex++] = character;
        guess[currentIndex] = STRING_TERMINATOR; //ensure a valid c string
    }
    return true;
}
 
//reset the guessed password, one can guess again
void Password::reset(){ 
    currentIndex = 0;
    guess[currentIndex] = STRING_TERMINATOR;
}
 
//is the current guessed password equal to the target password?
bool Password::evaluate(){ 
    char pass = target[0];
    char guessed = guess[0];
    for (byte i=1; i<MAX_PASSWORD_LENGTH; i++){
        
        //check if guessed char is equal to the password char
        if (pass==STRING_TERMINATOR && guessed==STRING_TERMINATOR){
            return true; //both strings ended and all previous characters are equal 
        }else if (pass!=guessed || pass==STRING_TERMINATOR || guessed==STRING_TERMINATOR){
            return false; //difference OR end of string has been reached
        }
        
        //read next char
        pass = target[i];
        guessed = guess[i];
    }
    return false; //a 'true' condition has not been met
}
 
//set password using operator =
Password &Password::operator=(char* pass){
    set( pass );
    return *this;
}
 
//test password using ==
bool Password::operator==(char* pass){
    return is( pass );
}
 
//test password using !=
bool Password::operator!=(char* pass){
    return !is( pass );
}
 
//append to currently guessed password using operator <<
Password &Password::operator<<(char character){
    append( character );
    return *this;
}
так же в папке с библиотекой есть примеры кода с паролем, там он так же объявляется, но при компиляции этих примеров та же ошибка.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <Password.h> //http://www.arduino.cc/playground/uploads/Code/Password.zip
#include <Keypad.h> //http://www.arduino.cc/playground/uploads/Code/Keypad.zip
 
Password password = Password( "1234" );
 
const byte ROWS = 4; // Four rows
const byte COLS = 4; //  columns
// Define the Keymap
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
 
byte rowPins[ROWS] = { 9,8,7,6 };// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte colPins[COLS] = { 5,4,3,2, };// Connect keypad COL0, COL1 and COL2 to these Arduino pins.
 
 
// Create the Keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
 
void setup(){
 
  Serial.begin(9600);
  keypad.addEventListener(keypadEvent); //add an event listener for this keypad
}
 
void loop(){
  keypad.getKey();
}
 
//take care of some special events
void keypadEvent(KeypadEvent eKey){
  switch (keypad.getState()){
    case PRESSED:
    Serial.print("Pressed: ");
    Serial.println(eKey);
    switch (eKey){
      case '*': checkPassword(); break;
      case '#': password.reset(); break;
      default: password.append(eKey);
     }
  }
}
 
void checkPassword(){
  if (password.evaluate()){
    Serial.println("Success");
    //Add code to run if it works
  }else{
    Serial.println("Wrong");
    //add code to run if it did not work
  }
}
0
348 / 282 / 144
Регистрация: 08.04.2013
Сообщений: 1,228
27.10.2018, 20:46 6
а какую ошибку выдал исправление с этим кодом
C++
1
2
char * a ="1234";
Password password = Password( a );
0
0 / 0 / 0
Регистрация: 03.07.2018
Сообщений: 9
27.10.2018, 20:53  [ТС] 7
marat_miaki,
key_password\key_password.ino:4:11: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]

char * a ="1234";
0
Модератор
Эксперт по электронике
8471 / 6300 / 852
Регистрация: 14.02.2011
Сообщений: 21,847
27.10.2018, 21:15 8
Лучший ответ Сообщение было отмечено Gawain как решение

Решение

Цитата Сообщение от Gawain Посмотреть сообщение
Видает ошибку п
где?
Цитата Сообщение от Gawain Посмотреть сообщение
warning:
это предупреждение
Цитата Сообщение от Gawain Посмотреть сообщение
warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
дословно
предупреждение: ISO C ++ запрещает преобразование строковой константы в 'char *' [-Wwrite-strings]
не нравится ему строка в аргументах
попробуй привести явно
C++
1
Password password = Password( (char*)"1234" );
а можешь просто забить на это предупреждение
1
0 / 0 / 0
Регистрация: 03.07.2018
Сообщений: 9
27.10.2018, 21:50  [ТС] 9
ValeryS,
Странно, но сработало, предупреждение пропало)
спасибо огромное
0
Модератор
Эксперт по электронике
8471 / 6300 / 852
Регистрация: 14.02.2011
Сообщений: 21,847
27.10.2018, 22:36 10
Цитата Сообщение от Gawain Посмотреть сообщение
Странно, но сработало,
ничего странного С++ очень чувствителен к типам, и когда получает не тот тип что хотел, верещит:"Обрати внимание,это не то что я хотел"
Password ждал от тебя char* а ты дал const char*
вот этим (char*)"1234"(явным приведением типа) ты сказал: "Заткнись,знаю что делаю" ну вот он и заткнулся
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.10.2018, 22:36

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Тестировщик на Arduino Nano
Доброго времени, нужен элементарный скетч на тестировщик, однако по алгоритму и уточнить ряд...

Кардиодатчик + Arduino Nano
Проблема такая есть arduino nano и не то что бы кардиодатчик(его подобие своими руками) хочу...

Дисплей SSD1306 и Arduino nano
заказал с али дисплей SSD1306, подключил к ардуинке по I2C, питание 5 В кинул, включил, всё...

Arduino nano и его аналоги
Здравствуйте! Задумал я тут сделать авторизацию на компьютер через Ардуинку (эмуляция клавиатуры)....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.