Arduino функция void loop () не зацикливается - PullRequest
0 голосов
/ 16 октября 2018

Я новичок в Arduino и вначале написал код, который должен играть в игры, читать истории и многое другое на ЖК-дисплее.

Вот мой код

#include <LiquidCrystal.h>

// Arduino pins number
const int SW_pin = 2; // digital pin connected to switch output
const int X_pin = 0; // analog pin connected to X output
const int Y_pin = 1; // analog pin connected to Y output
const int LCD_RS = 7;
const int LCD_Enable = 8;
const int LCD_D4 = 9;
const int LCD_D5 = 10;
const int LCD_D6 = 11;
const int LCD_D7 = 12;
LiquidCrystal lcd(LCD_RS, LCD_Enable, LCD_D4, LCD_D5, LCD_D6, LCD_D7);

// Basic vars
int none = 0;
String Apps[2] = {"App selector","Credits"};
int CurrentApp = 0;
int Yaxis = 1;
int Xaxis = 1;
int HiCh = 0;
int button;
int JXaxis;
int JYaxis;


void Credits() {  //          CREDITS
  Serial.print("- Credits app loading \n");
  lcd.clear();
  lcd.setCursor(3,0);
  lcd.print("Credits app");
  lcd.setCursor(0,1);
  Serial.print("- Credits app loaded \n");

}

void setup() {  //          SETUP
  Serial.begin(9600);
  Serial.print("[2J");
  Serial.print("  Serial Monitor opened \n \n");
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("App selector");
  Serial.print("- App selector menu \n");
  pinMode(SW_pin, INPUT);
  digitalWrite(SW_pin, HIGH);
  lcd.setCursor(0,1);
  lcd.print(Apps[0]);
}


void SelectApp() {  //          SELECTAPP
  switch (HiCh) {
    case (1):
      CurrentApp = 1;
      Credits();
      break;
    default:
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Error");
      Serial.print("- App loading error \n");
  }
}


void loop() {  //          LOOP
  while (none == 0) {
    button = digitalRead(SW_pin);
    int JYaxis = analogRead(Y_pin) / 128;
    int JXaxis = analogRead(X_pin) / 128;
    if (CurrentApp == 0) {
      for (;;) {
        if (button == 0) {
          SelectApp();
        }
        if (JYaxis <= 1) {
          if (HiCh != 0) {
            HiCh = HiCh - 1;
            delay(300);
          }
        }
        if (JYaxis >= 7) {
          HiCh = HiCh + 1;
          delay(300);
        }
      }
    }
  }
}

IЯ использую только один джойстик в качестве контроллера, и у меня есть плата Arduino UNO R3

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

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

Заранее спасибо!Если вам нужны какие-либо спецификации, спросите их у меня, и я постараюсь ответить на них.

1 Ответ

0 голосов
/ 16 октября 2018

У этого кода есть пара проблем.

  1. В функции loop () вы обычно не делаете бесконечный цикл, вы просто ставите один цикл вашего цикла.То есть удалите while.

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

...