Помогите исправить одну ошибку в скетче
- Войдите на сайт для отправки комментариев
Втр, 14/06/2016 - 00:16
Скачал с инета скетч кодового замка. Почему то при проверке он выдовал много ошибок. Я немного поисправлял в меру своих ограниченных знаний ардуино и почти все ошибки убрались, но одна осталась и я не могу найти. Кто сможет подскажите где она, желательно поподробней. Заранее спасибо
001 | #include <Servo.h>//Подключение библиотеки для сервопривода |
002 |
003 | #include <SPI.h>//Библиотека SPI |
004 | #include <LiquidCrystal.h>//Подключаем библиотеку для дисплея. |
005 | LiquidCrystal lcd(22, 23, 24, 25, 26, 27); //Указываем пины куда подключен дисплей. |
006 |
007 | Servo MyServo; //Называем сервопривод. |
008 |
009 | char * password = "258A" ; //Здесь вы можете указать свой пароль. Я сделал на 4 знака, но можно и больше, изменив несколько строк ниже. |
010 | int position = 0; //Данная переменная указывает на какой позиции при вводе пароля находится курсор |
011 | char key; //Здесь временно хранятся знаки, которые мы считали. |
012 |
013 | void setup () |
014 | { |
015 | MyServo.attach(11); //Указываем, к какому пину подключен сервопривод. |
016 | |
017 | lcd.begin(16, 2); //Инициализация дисплея. |
018 | |
019 | pinMode(2, INPUT); //Здесь и ниже мы указываем пины выходом. К этим пинам подключена клавиатура. |
020 | pinMode(3, INPUT); |
021 | pinMode(4, INPUT); |
022 | pinMode(10, INPUT); |
023 | pinMode(6, OUTPUT); |
024 | pinMode(7, OUTPUT); |
025 | pinMode(8, OUTPUT); |
026 | pinMode(9, OUTPUT); |
027 | pinMode(13, OUTPUT); |
028 | |
029 | lcd.print( " Enter Password " ); //Пишем "Введите пароль" |
030 | lcd.setCursor(0, 1); //Переводим курсор на 2 строку. |
031 | lcd.print( "Pass: " ); //Пишем "Пароль: " |
032 | } |
033 | int rows[]={9,8,7,6}; //Здесь указываем пины рядов нашей клавиатуры. |
034 | int cols[]={10,4,3,2}; //А здесь строк. |
035 |
036 | char simbols[][2]= //Массив с знаками. |
037 | { |
038 | {0, '1' }, |
039 | {1, '2' }, |
040 | {2, '3' }, |
041 | {3, 'A' }, |
042 | {4, '4' }, |
043 | {5, '5' }, |
044 | {6, '6' }, |
045 | {7, 'B' }, |
046 | {8, '7' }, |
047 | {9, '8' }, |
048 | {10, '9' }, |
049 | {11, 'C' }, |
050 | {12, '*' }, |
051 | {13, '0' }, |
052 | {14, '#' }, |
053 | {15, 'D' } |
054 | }; |
055 |
056 | void loop () |
057 | if (key != password[position]) //Если вы ошиблись во время ввода пароля хотя бы на один знак, все сбросится. |
058 | { |
059 | { |
060 | position=0; //Сбрасываем позицию пароля. |
061 | lcd.clear(); //Чистим дисплей |
062 | lcd.print( " Enter Password " ); |
063 | lcd.setCursor(0, 1); |
064 | lcd.print( "Pass: " ); |
065 | delay(200); |
066 | } |
067 | |
068 | if (key == password[position]) //А если ввели знак правильно, то... |
069 | { |
070 | position++; //То переходите к следующему. |
071 | } |
072 | |
073 | if (position == 4) //Если вы достигли последнего знака, то... |
074 | { |
075 | MyServo.write(180); //Поворачиваем серво. |
076 | |
077 | position=0; //Сбрасиваем позицию пароля, т.к мы его ввели. |
078 | delay(100); |
079 | lcd.clear(); //Чистим дисплей |
080 | lcd.setCursor(0, 0); |
081 | lcd.print( " Password Ok! " ); //И пишем что пароль правильный. |
082 | delay(1000); |
083 | lcd.clear(); |
084 | lcd.print( " Enter Password " ); |
085 | lcd.setCursor(0, 1); |
086 | lcd.print( "Pass: " ); |
087 | delay(200); |
088 | } |
089 | delay(200); |
090 | } |
091 |
092 | digitalWrite(rows[i], LOW); //выключаем высокий уровень для пройденной строки. |
093 |
094 | } |
095 | |
096 | //функция возвращающая код нажатой кнопки |
097 |
098 | char FindKey(unsigned int keyCode){ |
099 |
100 | for ( int i=0;i<16;i++){ |
101 |
102 | if (simbols[i][0]==keyCode){ |
103 |
104 | return simbols[i][1]; |
105 |
106 | } |
107 | } |
108 | { |
109 | { return '-' ; //если код на найден возвращаем ‘-‘ |
110 |
111 | } |
Строка 108 лишняя, в строке 109 открывающая скобка лишняя. В строке 56 не хватает открывающей скобки. Строка 59 лишняя. Строка 90 лишняя.
Это то, что заметил навскидку.
Мне кажется, что каждому знаку из пароля нужно присваивать свою переменную, это если хотите, чтобы при неверном выборе хотя бы одного знака пароль сбрасывался. Но при такой тактике подбор пароля любой сложности будет очень простым делом.
Нужно чтобы пароль проверялся весь полностью уже после его полного набора.
но одна осталась и я не могу найти. Кто сможет подскажите где она, желательно поподробней.
А тескт сообщения об ошибке секретен? Или это игра такая - "попробуй найди без текста, с текстоми дурак найдёт"? :)))))))