Problemas arduino nano,sketch y teclado matricial

buenas a todos os comento mi problema.
antes que nada para evitar respuestas erróneas y demás decir que el sketch funciona a la perfección en un arduino uno y en un mega.....solo me falla en el nano.
pues a lo que vamos....
conecto el arduino nano hace la introducción del sketch y entra al menú principal...una vez ahí no funciona el teclado para navegar por el menú..decir que no se si se bloquea una vez llegado al menú o que le pasa...
quiero intentar utilizar el nano por tema de espacio...
puede ser el mismo sketch que en el nano no funcione y el los demás si??
gracias a todos

A ver entiendo que el problema no sea el código pero necesitamos verlo y ademas como cableas todo.

Si corre en el Uno corre en el Nano.
Seleccionaste Arduino Nano en la IDE antes de compilar?

Y coincido con @Surbyte en cuanto a que podría ayudar ver el código.

vale...una pregunta...el programa se compone de distintos sketch...he de subirlos todos aqui o paso enlace directamente de donde esta el codigo al completo??

Sube todo pero tmb es importante conocer que tienes conectado al NANO, UNO o MEGA.
Es muy curioso tu problema.

aqui os dejo el codigo...espero haberlo colocado bien...
por cierto por ahora conectado solo esta el teclado...los demas componentes no los he puesto hasta que no funcione el tema del teclado en el nano


#include <Wire.h> 
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
//#include <LiquidCrystal.h>
/*
 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(0x3F,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] = {
  2, 3, 12, 13}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {
  4, 5, 6, 7
}; //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("FORCE RECON");// 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;
    }  
  } 
}

Faltan muchas rutinas

void menuPrincipal() {}
void sabotage() {};
void startGameCount(){};
void activateMosfet(){};
void search(){};
void cls(){};

Y esto es luego de editarlo. Primero puse menuPrincipal y ahora que intento compilar sigue dando faltantes de rutinas. De modo que ese código tampoco te compila a ti.
No se como pudes probar en un Arduino algo que no compila.
Tomate el tiempo de revisarlo para que podamos aconsejarte correctamente.

El programa compila y sabemos que eso no significa nada, la pregunta es si estas rutinas las tienes o no, supongo que si.

"C:\\Program Files (x86)\\Arduino\\hardware\\tools\\avr/bin/avr-size" -A "D:\\Documents\\Arduino\\MyProyect/borrar.ino.elf"
El Sketch usa 5774 bytes (18%) del espacio de almacenamiento de programa. El máximo es 30720 bytes.
Las variables Globales usan 664 bytes (32%) de la memoria dinámica, dejando 1384 bytes para las variables locales. El máximo es 2048 bytes.

la verdad que no se si faltaran o no...si tu dices que faltan es asi...te hablo del desconocimiento ya que yo no he hecho ese código. ese código esta sacado de internet...no te compilara puesto que le faltan todos los demás códigos. en total son 8 códigos diferentes que forman todo el programa.
al completo compila puesto que lo tengo funcionando y funciona en un mega y en un uno...pero en el nano no va el teclado

Ok @yeyo_gato pero te pedimos un código para observar su funcionamiento, intento compilarlo y no funciona en UNO, MEGA, o NANO.
O sea.. lo que tu tienes no es lo que nos has posteado aquí.
Si dices que funciona te creo, pero esto NO FUNCIONA.

Ahh por cierto, entiendes que hice para que compile no? Cree funciones nulas que no hacen nada pero solo para que sean llamadas y no me den error.

te debo de postear el codigo completo para que puedas compilar....
como lo hago.
inserto el codigo uno por uno o pongo el enlace directo de donde esta el codigo, el cual esta entero y con diagramas de como va conectado y los componentes que se les conecta al arduino.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.