Not getting inside the void loop

Hey, I’m doing a project where I use rfid sensors, a remote controll, an lcd screen and arduino mega2560. The problem is that I can’t get inside the void loop. It gets inside the setup but not the loop. I tried with Seria.print but it doesn’t work.
Can anybody help me?

Thanks so much!
Here is the code:

#include <EEPROM.h>
#include <MFRC522.h>
#include <SPI.h>
#include <Servo.h>
#include <IRremote.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 20, 4);

int RECV_PIN = 41;
IRrecv ir(RECV_PIN);
decode_results results;

Servo myservo;
int value;
int int_num;
int var;
String numbers = "";

int addr;
int buzzer = 7;

int preu_client;

#define SS_PIN 53
#define RST_PIN 49
MFRC522 mfrc522(SS_PIN, RST_PIN);

bool allow = false;
static byte kpadState;

String productes[13] = {"tg1", "tg1", "tg2", "tg2", "tg2", "tg2", "tg3", "tg3" "tgJ"};

bool calc_count = true;
bool aspress = false;
unsigned long key;

String diners_client = "";
int canvi_caixer;
int int_diners_client;

void setup() {
  Serial.begin(9600);
  Serial.println("asdf");
  SPI.begin();
  value = EEPROM.read(0);
  pinMode(buzzer, OUTPUT);
  mfrc522.PCD_Init();
  allow = false;
  myservo.attach(40);
  myservo.write(0);
  ir.enableIRIn(); // Start the receiver
  lcd.begin();
  lcd.print("_");
}

void loop() {
  Serial.println("loop");
  if (mfrc522.PICC_IsNewCardPresent()) {
    String uid = getID();
    Serial.println(uid);
    if (uid == "B9 6F E4 B2" && allow == true && aspress == false) {
      register_product("tgJ", 2000);
    }

    if ((uid == "B5 55 0C 7B" || uid == "9B 52 12 7B") && allow == true && aspress == false) {
      register_product("tg1", 100);
    }

    if ((uid == "A0 22 12 7B" || uid == "27 41 0C 7B") && allow == true && aspress == false) {
      register_product("tg2", 200);
    }

    if ((uid == "D5 D0 0B 7B" || uid == "99 6D 0C 7B") && allow == true && aspress == false) {
      register_product("tg3", 300);
    }

    if (uid == "BA 00 CF 81" && allow == true ) {
      brunzidor1();
      Serial.println("Sesion closed");
      allow = false;
    }
    else if (uid == "BA 00 CF 81" && allow == false ) {
      brunzidor1();
      Serial.println("Staff member allowed");
      allow = true;
    }

  }
  Serial.println("kkkkk");

  if (aspress == true) {
    entrar_productes();
  }
  if (allow == true)
    keypadd();

}

void brunzidor() {
  digitalWrite(buzzer, HIGH);
  delay(200);
  digitalWrite(buzzer, LOW);
  delay(200);
}

void brunzidor1() {
  digitalWrite(buzzer, HIGH);
  delay(200);
  digitalWrite(buzzer, LOW);
}

void remote_num(char num) {
  numbers += num;
  Serial.print(num);
  brunzidor();
}

void tornar_canvi(char num) {
  diners_client += num;
  Serial.print(num);
  brunzidor();

}

bool comanda_oberta;
void numeros_mando() {

  while (comanda_oberta == true) {
    if (ir.decode(&results)) {
      if (results.value == 0xFFFFFFFF) {
        results.value = key;
      }
      switch (results.value) {
        case 0xFF6897:
          // 0
          tornar_canvi('0');
          break;

        case 0xFF30CF:
          // 1
          tornar_canvi('1');
          break;

        case 0xFF18E7:
          // 2
          tornar_canvi('2');
          break;

        case 0xFF7A85:
          // 3
          tornar_canvi('3');
          break;

        case 0xFF10EF:
          // 4
          tornar_canvi('4');
          break;

        case 0xFFB04F:
          // st/rept acabar comanda
          brunzidor();
          int_diners_client = diners_client.toInt();
          delay(100);
          Serial.println("Canvi: " + int_diners_client - preu_client);
          delay(100);
          lcd.clear();
          lcd.setCursor(0, 0);
          delay(1000);
          lcd.setCursor(0, 1);
          lcd.print(int_diners_client - preu_client);
          value += preu_client;
          preu_client = 0;
          comanda_oberta = false;
          key = results.value;
          ir.resume();
          break;
      }
      key = results.value;
      ir.resume();
    }
  }
}


void keypadd() {
  if (ir.decode(&results)) {
    if (results.value == 0xFFFFFFFF) {
      results.value = key;
    }

    switch (results.value) {
      case 0xFF6897:
        // 0
        remote_num('0');
        break;

      case 0xFF30CF:
        // 1
        remote_num('1');
        break;

      case 0xFF18E7:
        // 2
        remote_num('2');
        break;

      case 0xFF7A85:
        // 3
        remote_num('3');
        break;

      case 0xFF10EF:
        // 4
        remote_num('4');
        break;

      case 0xFF38C7:
        // 5
        remote_num('5');
        break;

      case 0xFF9867:
        // EQ/esbrrar
        numbers = "";
        brunzidor();
        break;

      case 0xFFA857:
        // volum menys
        Serial.println();
        Serial.println(value);
        brunzidor();
        break;

      case 0xFF906F:
        // fletxa amunt
        int_num = numbers.toInt();
        value += int_num;
        numbers = "";
        Serial.println();
        Serial.println(value);
        brunzidor();
        break;

      case 0xFFE01F:
        // restar-fletxa avall
        int_num = numbers.toInt();
        value -= int_num;
        numbers = "";
        Serial.println();
        Serial.println(value);
        brunzidor();
        break;

      case 0xFF629D:
        // volum + entrar stok
        brunzidor();
        aspress = true;
        entrar_productes();
        break;

      case 0xFFE21D:
        // func-stop mostrar stok
        brunzidor();
        Serial.println(productes[0] + ' ' + productes[1] + ' ' + productes[2] + ' ' + productes[3]);
        break;

      case 0xFF22DD:
        // fletxa esquerra
        brunzidor();
        Serial.println(preu_client);
        delay(200);
        comanda_oberta = true;
        Serial.println("Entra el que paga el client ");
        delay(100);
        key = results.value;
        ir.resume();
        numeros_mando();
        break;

      case 0xFF02FD:
        // play-pause
        break;
      case 0xFFC23D:
        // fletxa dreta
        break;

    }
    key = results.value;
    ir.resume();
  }
}

String getID() {
  String id = "";
  for (byte i = 0; i < mfrc522.uid.size; i++)
  {
    id.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
    id.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  id.toUpperCase();
  return id;
}

void entrar_productes() {
  delay(100);
  ir.resume();
  while (aspress == true) {
    int count = 1;
    if (mfrc522.PICC_IsNewCardPresent()) {
      String uid = getID();

      if (uid == "B9 6F E4 B2" && allow == true) { // producte
        brunzidor();
        int i;
        for (i = 0; i < 13; i++) {
          if (productes[i] == "" && count == 1) {
            productes[i] = "tgJ";
            Serial.println("Una tgJ més");
            count--;
          }
        }
        if (count == 1) {
          Serial.println("No queda espai al magatzem");
          aspress = false;
        }
      }
    }

    if (ir.decode(&results)) {
      if (results.value == 0xFFFFFFFF) {
        results.value = key;
      }

      switch (results.value) {
        case 0xFF629D:
          // *
          aspress = false;
          brunzidor();
          break;

      }
      key = results.value;
      ir.resume();
    }
  }
}

void register_product(String name, int value) {
  brunzidor();
  delay(100);
  int i;
  int found = 0;
  if (calc_count = true) {
    for (i = 0; i < 13; i++) { // 13 numero d'elements a la llista
      if (productes[i] == name && found == 0) {
        Serial.println(name);
        productes[i] = "";
        found ++;
        preu_client += value;
      }
    }
    if (found == 0) {
      calc_count = false;
      Serial.println("no " + name + "left");
    }
  }
}

sketch_feb17c.ino (9.54 KB)

Always put a Serial.flush after debug prints.

Trying moving your "Serial.println("asdf");" to the end of setup().

If you don't see it, move it up a line at a time until you do see it: The line following is where the processor is getting stuck. You can then focus debugging efforts there.

If the program is repeating setup() and not running any of the code in loop() then it suggests that the Arduino is continually resetting and re-starting setup()

...R

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