Различия Uno и Nano. Помогите новичку

Lord_elf
Offline
Зарегистрирован: 06.05.2016

Здравствуйте, прошу помощи у уважаемого сообщества)

В общих чертах: загорелся одним проектом, приобрел китайские Uno и Nano, посмотрел код, сломал себе голову (к програмированию имею очень посредственное отношение, только в общих чертах). Вроде немного разобрался, почитал литературу, загрузил на Uno - все хорошо, код хоть и кривой, но рабочий. Проблемы начались при попытке повторить проет на Uno - пин 13 никак не хочет работать нормально, дублируется столбик 1, то есть пин А4 на клавиатуре, никак не смог разобраться в причине, пытался подключить вместо пинов 13, 12 пины А6, А7 - реакция вообще никакая( В общем голову себе сломал... Подскажите пожалуйста в чем проблема и можно ли ее как то решить? Часть кода представлена ниже

#include <Wire.h> 
#include <Keypad.h>
//#include <LiquidCrystal_I2C.h>
#include <LiquidCrystal.h>


//LiquidCrystal_I2C lcd(0x38,16,2);
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
const byte ROWS = 4; //four rows
const byte COLS = 4; //three columns
char keys[ROWS][COLS] = {
  {'1','2','3','a'}
  ,
  {'4','5','6','b'}
  ,
  {'7','8','9','c'}
  ,
  {'*','0','#','d'}
};

byte rowPins[ROWS] = {
  A0, A1, A2, A3}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {
  A4, A5, 13, 12}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

char codeInput[8];
byte time[4];
boolean refresh=true;//1 refresh one time...
char password[8];
int key=-1;
char lastKey;
char var;
boolean passwordEnable=false;

//Buttons for lcd shield
char BT_RIGHT = '4';
char BT_UP = 'a';
char BT_DOWN = 'b';
char BT_LEFT = '6';
char BT_SEL = 'd';   // Ok key  
char BT_CANCEL = 'c';
char BT_DEFUSER = 'x';   // not implemented

//leds

const int REDLED = 11;
const int GREENLED = 10;
//const int BLUELED = 12;
//RELAYPIN
boolean relayEnable = false;
const int RELAYPIN = 9;
//IS VERY IMPORTANT THAT YOU TEST THIS TIME. BY DEFAULT IS IN 1 SEC. THAT IS NOT TOO MUCH. SO TEST IT!
const int RELAY_TIME = 5000;

 

vde69
Offline
Зарегистрирован: 10.01.2016

пин 13 подключен к светодиоду на обоих... По этому его использовать нужно "осторожно"...

на сколько я помню различия у них главным образом в пределе перезаписи флеша, на UNO несколько десятков тысяч, на NANO всего несколько тысяч. в остальном вроде одно и то-же... Хотя NANO есть 2.0 и 3.0 у них вообще памяти разное количество ...

Lord_elf
Offline
Зарегистрирован: 06.05.2016

vde69 пишет:

пин 13 подключен к светодиоду на обоих... По этому его использовать нужно "осторожно"...

Это я понял, спасибо за потдержку) Но вот почему такая разная работа, на Uno клавиатура работает нормально, а на Nano отказывается в наглую... Выход вижу пока только в том, что бы поменять местами вывод одного светодиода с пина 11 на пин 13, а на его место пин с клавиатуры, пусть мигнет при запуске светодиодом, не так страшно. Больше интересно почему она себя так ведет и почему я не могу подключить А6 и А7 на клавиатуру - в наглую отказывается.

vvadim
Offline
Зарегистрирован: 23.05.2012

вообще то цифровые пины для А0-А5   14-19

Lord_elf
Offline
Зарегистрирован: 06.05.2016

vvadim пишет:

вообще то цифровые пины для А0-А5   14-19

Эм... извиняюсь, возможно я не совсем понял. Имеется ввиду что при подключении 8 контактов от клавиатуры к портам А0-А7 и исправлении кода - клавиатура вообще никак не реагирует. Вот...

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

Lord_elf пишет:

не могу подключить А6 и А7 на клавиатуру - в наглую отказывается.

На UNO никаких А6 и А7 нет.

На Nano они есть, но они чисто аналоговые - они не умеют быть цифровыми (не понимают pinMode, digitalRead/digitalWrite). Если Вы пытаетесь их так использовать - работать не будет. Задействуйте другие пины.

Кстати, про это на Вашей картинке написано: Analog exclusively

Lord_elf
Offline
Зарегистрирован: 06.05.2016

ЕвгенийП пишет:

На UNO никаких А6 и А7 нет.

На Nano они есть, но они чисто аналоговые - они не умеют быть цифровыми (не понимают pinMode, digitalRead/digitalWrite). Если Вы пытаетесь их так использовать - работать не будет. Задействуйте другие пины.

Большое спасибо, про то что их нет на UNO  я понял, просто когда я стал разбираться с Nano то был очень обрадован наличию еще двух пинов, думал подключение красивее получится. С причиной не работы пина 13 на Nano так и не разобрался... Видимо действительно придется перенести сигнализирующие диоды на 13, а освободившийся использовать как пин для клавиатуры)

vde69
Offline
Зарегистрирован: 10.01.2016

вообще-то покажи свой код и модель клавиатуры... что-то у меня сомнения в правильности кода...

Lord_elf
Offline
Зарегистрирован: 06.05.2016

vde69 пишет:

вообще-то покажи свой код и модель клавиатуры... что-то у меня сомнения в правильности кода...

Код там на несколько вкладок, видимо делалось для удобства... одним итальянским гением) Я сейчас разгребаю по немногу)

#include <Wire.h> 
#include <Keypad.h>
//#include <LiquidCrystal_I2C.h>
#include <LiquidCrystal.h>

//LiquidCrystal_I2C lcd(0x38,16,2);
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
const byte ROWS = 4; //four rows
const byte COLS = 4; //three columns
char keys[ROWS][COLS] = {
  {'1','2','3','a'}
  ,
  {'4','5','6','b'}
  ,
  {'7','8','9','c'}
  ,
  {'*','0','#','d'}
};

byte rowPins[ROWS] = {
  A0, A1, A2, A3}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {
  A4, A5, 13, 12}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

char codeInput[8];
byte time[4];
boolean refresh=true;//1 refresh one time...
char password[8];
int key=-1;
char lastKey;
char var;
boolean passwordEnable=false;

//Buttons for lcd shield
char BT_RIGHT = '4';
char BT_UP = 'a';
char BT_DOWN = 'b';
char BT_LEFT = '6';
char BT_SEL = 'd';   // Ok key  
char BT_CANCEL = 'c';
char BT_DEFUSER = 'x';   // not implemented

//leds

const int REDLED = 11;
const int GREENLED = 10;
//const int BLUELED = 12;
//RELAYPIN
boolean relayEnable = false;
const int RELAYPIN = 9;
//IS VERY IMPORTANT THAT YOU TEST THIS TIME. BY DEFAULT IS IN 1 SEC. THAT IS NOT TOO MUCH. SO TEST IT!
const int RELAY_TIME = 5000;

boolean endGame = false;

boolean sdStatus = false; 
boolean saStatus = false; 
boolean doStatus = false; 
boolean start = true;
boolean defusing;
boolean cancelando;
// SOUND TONES
boolean soundEnable = true;
int tonepin = 8; // Pin 13 for the sound
int alarmTone1 = 700;
int alarmTone2 = 2600;
int activeTone = 1330;
int errorTone = 100;

unsigned long iTime;
unsigned long timeCalcVar;
unsigned long redTime;
unsigned long greenTime;
unsigned long iZoneTime;//initial time for zone
byte team=0; // 0 = neutral, 1 = green team, 2 = red team

void setup(){
  lcd.begin(16, 2);
  Serial.begin(9600);
  lcd.setCursor(3,0);
  tone(tonepin,2400,30);
  lcd.print("ONE");// you can add your team name or someting cool
  lcd.setCursor(0,1);
  lcd.print(" AIR SYSTEM");// you can add your team name or someting cool
  keypad.setHoldTime(50);
  keypad.setDebounceTime(50);
  keypad.addEventListener(keypadEvent);

  //PinModes
  pinMode(GREENLED, OUTPUT);     
  pinMode(REDLED, OUTPUT); 
  pinMode(RELAYPIN, OUTPUT);  
  // CONFIGURE THE BARS OF PROGRESS BAR
  byte bar1[8] = {
    B10000,
    B10000,
    B10000,
    B10000,
    B10000,
    B10000,
    B10000,
    B10000,
  };
  byte bar2[8] = {
    B11000,
    B11000,
    B11000,
    B11000,
    B11000,
    B11000,
    B11000,
    B11000,
  };
  byte bar3[8] = {
    B11100,
    B11100,
    B11100,
    B11100,
    B11100,
    B11100,
    B11100,
    B11100,
  };
  byte bar4[8] = {
    B11110,
    B11110,
    B11110,
    B11110,
    B11110,
    B11110,
    B11110,
    B11110,
  };
  byte bar5[8] = {
    B11111,
    B11111,
    B11111,
    B11111,
    B11111,
    B11111,
    B11111,
    B11111,
  };
  byte up[8] = {
    B00000,
    B00100,
    B01110,
    B11111,
    B11111,
    B00000,
    B00000,
  };

  byte down[8] = {
    B00000,
    B00000,
    B11111,
    B11111,
    B01110,
    B00100,
    B00000,
  };
  lcd.createChar(0,bar1);
  lcd.createChar(1,bar2);
  lcd.createChar(2,bar3);
  lcd.createChar(3,bar4);
  lcd.createChar(4,bar5);
  lcd.createChar(5,up);
  lcd.createChar(6,down);
}

void loop(){
  menuPrincipal();
}
void keypadEvent(KeypadEvent key){
  switch (keypad.getState()){
    case RELEASED:
      switch (key){
         case 'd': defusing=false;
         break;
         case 'c': cancelando=false;
         break;
      }
    break;
    case HOLD:
      switch (key){
        case 'd': defusing= true;
        break;
        case 'c': cancelando=true;
        break;
      }
    break;
  }
}

Клавиатура стандартная, мембранная 4х4

 

Самое что интересное что на Uno то все прекрасно работает...

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

vde69 пишет:

на сколько я помню различия у них главным образом в пределе перезаписи флеша, на UNO несколько десятков тысяч, на NANO всего несколько тысяч.

Глупость. Там стоят одинаковые микроконтроллеры, только в разных корпусах. По даташиту 10000 циклов перезаписи флеш (с гарантией сохранности информации 20 лет при температуре 85 градусов или 100 лет при 25 градусах). На практике циклов перезаписи больше.

И насколько помню, такая цифра абсолютно у всех микроконтроллеров AVR.

vde69
Offline
Зарегистрирован: 10.01.2016

надо смотреть чего внутри keypad.getState() скорее всего дело вот в чем:

http://arduino.ru/Tutorial/DigitalPins

Примечание: Затруднительно использовать вывод микросхемы 13 в качестве порта ввода из-за подключенных к нему светодиода и резистора. При подключении подтягивающего к питанию резистора 20 кОм на вводе будет 1.7 В вместо 5 В, т.к. происходит падение напряжения на светодиоде и включенном последовательно резисторе. При необходимости использовать вывод микросхемы 13 как цифровой порт ввода требуется подключить между выводом и землей внешний подтягивающий резистор.

Lord_elf
Offline
Зарегистрирован: 06.05.2016

vde69 пишет:

надо смотреть чего внутри keypad.getState() скорее всего дело вот в чем:

http://arduino.ru/Tutorial/DigitalPins

Спасибо) Почитал. Теперь понятно почему не работает... однако удивляет разница тогда почему в Уно работает... может там подтяжка есть... или просто какая то конструкторская особенность.

Сейчас посидел, подумал, наверное поступлю так, перенесу индикаторные диоды (не особо важно если пару раз лишних мигнут) на пины 12 и 13, на аналоговые А0-А5 посажу дисплей, а на его место перенесу клавиатуру, так получится компактнее на плате.

Еще хотелось бы спросить немножко не по теме, так как я достаточно трудновато разбираюсь в программе (только методом научного тыка и на уровне основ) то хотелось бы узнать, дорого ли будет попросить кого то помочь мне разобрать этот код? Там много закоментено и есть лишние (видимо последствия проб и ошибок автора).

vde69
Offline
Зарегистрирован: 10.01.2016

вполне могут и бесплатно оптимизировать... а вообще у большенства это хобби а не заработок, профи сидят на других форумах :)

лично мне это будет не интересно, а финансово заинтересовать меня будет очень дорого, я человек не бедный и с высоким уровнем зп по основному месту работы....

Lord_elf
Offline
Зарегистрирован: 06.05.2016

vde69 пишет:

вполне могут и бесплатно оптимизировать... а вообще у большенства это хобби а не заработок, профи сидят на других форумах :)

Просто объяснять все новичку - дело той еще нудности)

vde69 пишет:

лично мне это будет не интересно, а финансово заинтересовать меня будет очень дорого, я человек не бедный и с высоким уровнем зп по основному месту работы....

Ситуация аналогична, и специальность никак не связана с программированием. Поэтому и заинтересовался)

Pappvich07
Offline
Зарегистрирован: 24.01.2017

Приветствую, тоже собираю данный проект и никак клавиатура не хочет работать с ардуино нано, как вы вышли из положения? Уно не вариант слишком большая

И еще вопрос нано почему то переводческих перезагружается, не могу понять в чем дело, прошивали про мини такого не замечал, но клавиатура что на мини что на нано ни бум бум

Lord_elf
Offline
Зарегистрирован: 06.05.2016

Pappvich07 пишет:
Приветствую, тоже собираю данный проект и никак клавиатура не хочет работать с ардуино нано, как вы вышли из положения? Уно не вариант слишком большая И еще вопрос нано почему то переводческих перезагружается, не могу понять в чем дело, прошивали про мини такого не замечал, но клавиатура что на мини что на нано ни бум бум

Приветствую. Хм, не наблюдал таких проблем. Я уже наладил производство таких устройств, размел плату и заказал на заводе, чтобы по максимому компактно было, бетерброд с экраном и ардуиной нано. По клавиатуре были проблемы только по моей невнимательности - перепутал порядок следования строк и строчек, поэтому она никак не хотела работать. 

Про ресет - скрорее всего где то коротит, у меня нет таких проблем, запускается нормально)

Pappvich07
Offline
Зарегистрирован: 24.01.2017

Вообще не знаю что делать, я пробовал и строки с рядами менять, и подтягиваются резисторы 10ком ставить на массу или плюс, сейчас переправил код перекинул дисплейные пины на а0-а5 а клавиатуру наоборот, так дисплей вообще ничего не показывает.
Клавиатура заведомо рабочая, ардуино тоже, есть еще несколько, все одно и тоже
Еще заметил что когда прошивали нано но в настройках платы выбрал про мини после многочисленных нажатий на клавиатуре она сработывает по всем кнопкам нормально но через 15 секунд перезагрузка и опять не работает, не знаю что и делать. Буду признателен если бы вы могли скинуть скетч главный и пины как подключали, уже неделю мучаюсь

Pappvich07
Offline
Зарегистрирован: 24.01.2017

Pappvich07 пишет:
Вообще не знаю что делать, я пробовал и строки с рядами менять, и подтягиваются резисторы 10ком ставить на массу или плюс, сейчас переправил код перекинул дисплейные пины на а0-а5 а клавиатуру наоборот, так дисплей вообще ничего не показывает.
Клавиатура заведомо рабочая, ардуино тоже, есть еще несколько, все одно и тоже
Еще заметил что когда прошивали нано но в настройках платы выбрал про мини после многочисленных нажатий на клавиатуре она сработывает по всем кнопкам нормально но через 15 секунд перезагрузка и опять не работает, не знаю что и делать. Буду признателен если бы вы могли скинуть скетч главный и пины как подключали, уже неделю мучаюсь

Вообще получилось добиться внятного срабатывания буквенного ряда и цифр 369, но при нажатии на 258 срабатывает 147 звездочка решетка и 0 не работают, видимо с пинами напутал, а заработала клавиатура посте того как перепрошили порт 13 на 11

Lord_elf
Offline
Зарегистрирован: 06.05.2016

Pappvich07 пишет:
Вообще не знаю что делать, я пробовал и строки с рядами менять, и подтягиваются резисторы 10ком ставить на массу или плюс, сейчас переправил код перекинул дисплейные пины на а0-а5 а клавиатуру наоборот, так дисплей вообще ничего не показывает.

Никаких резисторов не надо, все и так заработает) У меня дисплей какраз на а0-а5 живет, клавиатура на цифровых 3-10 вроде, точно не вспомню. Вечером могу посмотреть. 

Pappvich07 пишет:
Вообще получилось добиться внятного срабатывания буквенного ряда и цифр 369, но при нажатии на 258 срабатывает 147 звездочка решетка и 0 не работают, видимо с пинами напутал, а заработала клавиатура посте того как перепрошили порт 13 на 11 

На 13 порт нельзя вешать клавиатуру в нано, сам на это напоролся, хотя на Уно работала. При вашей ошибке какраз перепутаны строки, это все можно поправить в коде.

Pappvich07
Offline
Зарегистрирован: 24.01.2017

Кстати когда в коде перекидывать пины дисплея на а0-а5 дисплей просто квадраты показывал поэтому вернул все обратно а 13 пин на 11 перевел.
Сегодня вечером еще раз попробую строки и столбцы попеременять,
Посмотрите у себя пожалуйста.

Lord_elf
Offline
Зарегистрирован: 06.05.2016

Подключение дисплея у меня идет так:

LiquidCrystal lcd(A0, A1, A2, A3, A4, A5); //подключение дисплея на пины

По клавиатуре я ошибся, подключается на пигы 5-12. Подключение клавиатуры:

const byte ROWS = 4; //количество строк
const byte COLS = 4; //количество столбцов
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 );

При такой расположении шлейф от клавиатуры можно воткнуть сразу в разьем на ардуино в пины 5-12, если не заработает - переверните шлейф на 180 градусов)

Lord_elf
Offline
Зарегистрирован: 06.05.2016

На 13 порт можете повесить светодиод, он там спокойно приживется) Клавиатуру и экран на него нежелательно. Так же как и реле)

Pappvich07
Offline
Зарегистрирован: 24.01.2017

Спасибо большое за информацию, сегодня вечером после работы попробую

Pappvich07
Offline
Зарегистрирован: 24.01.2017

Ничего не понимаю, фигня какая то, переназначить как у вас все пины, зуммер на d2 поставил, реле на 3 , светодиоды на 4 и 13
Дисплей заработал, на а0-а5 , а вот клавиатура вообще признаков жизни не подает, переворачивать не переворачивается, пофиг, что делать...
И контроллер снова начинает переодчески перезагружатся, есть подозрение что то в коде связано с изначально заданными контактами, но что не могу разобраться, попробую другой контроллер еще подкинуть
Походу у меня сдох микроконтроллер нано который, 100500 раз все перепаивал, вообще у меня посетила мысль, а почему бы не отрезать дорожку идущую к светодиоды на плате 13 Пина? Мы получим правильное значение напряжения на 13 пинетки, значит все должно будет заработать со стандартным кодом!?
Завтра попробую реализовать

Lord_elf
Offline
Зарегистрирован: 06.05.2016

Pappvich07 пишет:
Ничего не понимаю, фигня какая то, переназначить как у вас все пины, зуммер на d2 поставил, реле на 3 , светодиоды на 4 и 13 Дисплей заработал, на а0-а5 , а вот клавиатура вообще признаков жизни не подает, переворачивать не переворачивается, пофиг, что делать...

Попробуйте загрузить библиотеку клавиатуры другую, хотя странно... у меня никаких проблем с клавиатурой не было, возможно в коде вы на пины клавиатуры что то еще посадили - отсюда и глюки)

Pappvich07 пишет:
И контроллер снова начинает переодчески перезагружатся, есть подозрение что то в коде связано с изначально заданными контактами, но что не могу разобраться, попробую другой контроллер еще подкинуть

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

Pappvich07 пишет:
Походу у меня сдох микроконтроллер нано который, 100500 раз все перепаивал, вообще у меня посетила мысль, а почему бы не отрезать дорожку идущую к светодиоды на плате 13 Пина? Мы получим правильное значение напряжения на 13 пинетки, значит все должно будет заработать со стандартным кодом!?

Тоже так думал, но не стал заморачиваться. На Уно работает с таким расположением пинов?

Pappvich07
Offline
Зарегистрирован: 24.01.2017

Библиотеки уже пробовал менять, не помогает, клавиатуры две и точно работают обе так как залил скетч с вводом таймера с клавиатуры 4х3 т все работает а в этом проекте какая то фигня.
На пины для клавиатуры точно ничего не вешал все вкладки в коде проверял, да и задаются пины там на главной вкладке .
Уно у меня нету, я всегда все поделки собирал либо на нано, либо на микро про, до сих пор проблем не было. А тут треш,сегодня вечером возьму новый контроллер, отрежут диод от 13 Пина и попробую

Lord_elf
Offline
Зарегистрирован: 06.05.2016

Покажите вашу первую страницу. Может и угляжу что то) С 13 пина точно убирайте, хоть отрезай хоть нет. Повесьте на него светодиод. Надежнее будет в любом случае.

Pappvich07
Offline
Зарегистрирован: 24.01.2017

#include
#include
//#include
#include
/*
Arduino Bomb Pro

The circuit:
* More info at : http://yin.mainstreamds.com/
If you need some help mail me to yinbot@gmail.com

created 4,Sep, 2010
Modified 24 May 2014
by Ignacio Lillo

*/

//LiquidCrystal_I2C lcd(0x38,16,2);
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
const byte ROWS = 4; //four rows
const byte COLS = 4; //three columns
char keys[ROWS][COLS] = {
{
'1','2','3','a' }
,
{
'4','5','6','b' }
,
{
'7','8','9','c' }
,
{
'*','0','#','d' }
};

byte rowPins[ROWS] = {
A4, A5, 13, 12}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {
A0, A1, A2, A3
}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

char enteredText[8];
byte time[4];
byte refresh=0;//1 if is refreshed once time...
char password[8];
int key=-1;
char lastKey;
char var;
boolean passwordEnable=false;

//Buttons for lcd shield
char BT_RIGHT = '4';
char BT_UP = 'a';
char BT_DOWN = 'b';
char BT_LEFT = '6';
char BT_SEL = 'd'; // Ok key
char BT_CANCEL = 'c';
char BT_DEFUSER = 'x'; // not implemented

//leds

const int REDLED = 11;
const int GREENLED = 10;
//const int BLUELED = 12;
//mosfet
boolean mosfetEnable = false;
const int mosfet = 9;
//IS VERY IMPORTANT THAT YOU TEST THIS TIME. BY DEFAULT IS IN 1 SEC. THAT IS NOT TOO MUCH. SO TEST IT!
const int MOSFET_TIME = 5000;

//TIME INTS
int GAMEHOURS = 0;
int GAMEMINUTES = 45;
int BOMBMINUTES = 4;
int ACTIVATESECONDS = 5;

boolean endGame = false;

boolean sdStatus = false; //search and destroy game enable used in config
boolean saStatus = false; //same but SAbotaghe
boolean doStatus = false; //for DEmolition
boolean start = true;
boolean defuseando;
boolean cancelando;
// SOUND TONES
boolean soundEnable = true;
int tonepin = 8; // Pin 13 for the sound
int tonoPitido = 3000;
int tonoAlarma1 = 700;
int tonoAlarma2 = 2600;
int tonoActivada = 1330;
int errorTone = 100;

unsigned long iTime;
unsigned long timeCalcVar;
unsigned long redTime;
unsigned long greenTime;
unsigned long iZoneTime;//initial time for zone
byte team=0; // 0 = neutral, 1 = green team, 2 = red team

void setup(){
lcd.begin(16, 2);
Serial.begin(9600);
// lcd.init(); // initialize the lcd
// lcd.backlight();
lcd.setCursor(3,0);
tone(tonepin,2400,30);
lcd.print("IGNIS ONE");// you can add your team name or someting cool
lcd.setCursor(0,1);
lcd.print(" AIRSOFT SYSTEM");// you can add your team name or someting cool
keypad.setHoldTime(50);
keypad.setDebounceTime(50);
keypad.addEventListener(keypadEvent);
delay(2000);
pinMode(GREENLED, OUTPUT);
// pinMode(8, OUTPUT);
// digitalWrite(8,HIGH);
pinMode(REDLED, OUTPUT);
pinMode(mosfet, OUTPUT);
// CONFIGURE THE BARS OF PROGRESS BAR
byte bar1[8] = {
B10000,
B10000,
B10000,
B10000,
B10000,
B10000,
B10000,
B10000,
};
byte bar2[8] = {
B11000,
B11000,
B11000,
B11000,
B11000,
B11000,
B11000,
B11000,
};
byte bar3[8] = {
B11100,
B11100,
B11100,
B11100,
B11100,
B11100,
B11100,
B11100,
};
byte bar4[8] = {
B11110,
B11110,
B11110,
B11110,
B11110,
B11110,
B11110,
B11110,
};
byte bar5[8] = {
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
};
byte up[8] = {
B00000,
B00100,
B01110,
B11111,
B11111,
B00000,
B00000,
};

byte down[8] = {
B00000,
B00000,
B11111,
B11111,
B01110,
B00100,
B00000,
};
lcd.createChar(0,bar1);
lcd.createChar(1,bar2);
lcd.createChar(2,bar3);
lcd.createChar(3,bar4);
lcd.createChar(4,bar5);
lcd.createChar(5,up);
lcd.createChar(6,down);
}

void loop(){
menuPrincipal();
}
void keypadEvent(KeypadEvent key){
switch (keypad.getState()){
case PRESSED:
switch (key){

}
break;
case RELEASED:
switch (key){
case 'd': defuseando= false;
//Serial.println("d Releases");
break;
case 'c': cancelando=false;
//Serial.println("c Releases");
break;
}
break;
case HOLD:
switch (key){
case 'd': defuseando= true;
//Serial.println("d hold");
break;
case 'c': cancelando=true;
//Serial.println("c hold");
break;
}
break;
}
}

void disarmedSplash(){
endGame = false;
digitalWrite(REDLED, LOW);
digitalWrite(GREENLED, LOW);
if(sdStatus || saStatus){
lcd.clear();
lcd.setCursor(2,0);
lcd.print("BOMB DISARMED");
lcd.setCursor(3,1);
lcd.print("GOODS WIN");
digitalWrite(GREENLED, HIGH);
delay(5000);
digitalWrite(GREENLED, LOW);
}
//end code
lcd.clear();
lcd.print("Play Again?");
lcd.setCursor(0,1);
lcd.print("A : Yes B : No");
digitalWrite(REDLED, LOW);
digitalWrite(GREENLED, LOW);
while(1)
{
var = keypad.waitForKey();
if(var == 'a' ){
tone(tonepin,2400,30);
//We have two options, search & destroy and sabotaje play again options so!
if(sdStatus){
startGameCount();
search();
}
if(saStatus){
saStatus=true;
startGameCount();
start=true; //to set iTime to actual millis() :D
sabotage();
}
}
if(var == 'b' ){
tone(tonepin,2400,30);
menuPrincipal();
break;
}
}
}

void explodeSplash(){
digitalWrite(REDLED, LOW);
digitalWrite(GREENLED, LOW);
cls();
delay(100);
endGame = false;
lcd.setCursor(1,0);
lcd.print("TERRORISTS WIN");
lcd.setCursor(4,1);
lcd.print("GAME OVER");
for(int i = 200; i>0; i--)// this is the ultra hi definition explosion sound xD
{
tone(tonepin,i);
delay(20);
}
noTone(tonepin);
if(mosfetEnable){
activateMosfet();
}
delay(5000);
cls();

//end code
lcd.print("Play Again?");
lcd.setCursor(0,1);
lcd.print("A : Yes B : No");
while(1)
{
var = keypad.waitForKey();
if(var == 'a' ){
tone(tonepin,2400,30);
//We have two options, search & destroy and sabotaje play again options so!
if(sdStatus){
startGameCount();
search();
}
if(saStatus){
saStatus=true;
startGameCount();
start=true; //to set iTime to actual millis() :D
sabotage();
}
}
if(var == 'b' ){
tone(tonepin,2400,30);
menuPrincipal();

break;
}
}
}

Pappvich07
Offline
Зарегистрирован: 24.01.2017

Это чуть другой код, там еще много вкладок но он чуть отличается от кода с сайта инстрактейблз.ком, но с тем у меня клавиатура вообще не работала а тут хоть частично

Lord_elf
Offline
Зарегистрирован: 06.05.2016

На этом коде точно нужно убрать клавиатуру с 13 пина на любой другой

Pappvich07
Offline
Зарегистрирован: 24.01.2017

Ну так я убирал, все пины без изменений а 13 на 11 перемещал, в итоге линия 147 и 258 была как бы общей, замыканий нет сто раз проверил, клавиатуру вертел итак и сяк, и нифига, блин я в расстройстве))
Может вы сможете скинуть свой код?

Lord_elf
Offline
Зарегистрирован: 06.05.2016

Pappvich07 пишет:
Ну так я убирал, все пины без изменений а 13 на 11 перемещал, в итоге линия 147 и 258 была как бы общей, замыканий нет сто раз проверил, клавиатуру вертел итак и сяк, и нифига, блин я в расстройстве))

Хм... тогда вот что попробуйте)

byte rowPins[ROWS] = {
A4, A5, 13, 11}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {
A3, A2, A1, A0
}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

То есть поменяйте порядок пинов с а0-а3 на а3-а0, должен заработать)

Pappvich07 пишет:
Может вы сможете скинуть свой код?

К сожалению не могу, она наша коллективная работа и товарищи не поймут) Мы много чего переделали там и добавили кучу плюшек) От старого кода там только принцип остался)

Pappvich07
Offline
Зарегистрирован: 24.01.2017

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

Pappvich07
Offline
Зарегистрирован: 24.01.2017

Все заработало,но при этом метод тыка как Обычно помог)
строки а4,а5,11,12 колонны а3,а2,а1,а0
Если смотреть на лицевую панель клавиатуры мембранной 4х4 то получается порядок подключения прям по порядку как я написал.
Спасибо за помощь и советы!) Буду дальше собирать надеюсь все щаработает