создание цифровых игральных костей

Я пытаюсь сделать цифровые кости для игры в катан, вот что у меня пока есть

#include <LiquidCrystal.h>
#include <DFR_LCD_Keypad.h>

// это инициализация щита заводской конфигурации
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

// инициализируем клавиатуру
DFR_LCD_Keypad keypad(A0, &lcd);
int lcd_key     = 0;
int abc_key_in;
int read_LCD_buttons;
int  diceOne;
int  diceTwo;
#define btnSELECT 4
int read_LCD_buttons()
{
  abc_key_in = analogRead(0);
if (abc_key_in < 790) return btnSELECT;}
const int button = 4;
const int BUTTON4LOW = 400;
const int BUTTON4HIGH = 650;

void setup() {
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print("Press to dice");
  pinMode (A0, INPUT);
  i
}

void loop() {
  int reading =  analogRead (A0);

  lcd_key = read_LCD_buttons();

 if (reading<BUTTON4LOW && reading<BUTTON4HIGH) {
    diceOne = random(1, 7);
    diceTwo = random(1, 7);


  if (diceOne + diceTwo == 7) {
    lcd.clear();
    lcd.setCursor(7, 0);
    lcd.print("7");
    lcd.setCursor(3, 1);
    lcd.print("The pirate");



      if (diceOne + diceTwo == 3,2,1,5,4,6) {
          lcd.clear();
          lcd.setCursor(7, 0);
          lcd.print("fish");
      }
      }
  }
}
}

и я сталкиваюсь с кодом ошибки, говорящим

Arduino: 1.8.5 (Windows Store 1.8.10.0) (Windows 10), Board: "Arduino/Genuino Uno"

demo_simple:15: error: 'int read_LCD_buttons()' redeclared as different kind of symbol
 int read_LCD_buttons()
                      ^
C:\Users\taran\Desktop\arduino\demo_simple\demo_simple.ino:11:5: note: previous declaration 'int read_LCD_buttons'
 int read_LCD_buttons;
     ^
C:\Users\taran\Desktop\arduino\demo_simple\demo_simple.ino: In function 'int read_LCD_buttons()':
demo_simple:15: error: 'int read_LCD_buttons()' redeclared as different kind of symbol
 int read_LCD_buttons()
                      ^
C:\Users\taran\Desktop\arduino\demo_simple\demo_simple.ino:11:5: note: previous declaration 'int read_LCD_buttons
 int read_LCD_buttons;
     ^
C:\Users\taran\Desktop\arduino\demo_simple\demo_simple.ino: In function 'void setup()':
demo_simple:28: error: 'i' was not declared in this scope
   i
   ^
C:\Users\taran\Desktop\arduino\demo_simple\demo_simple.ino: In function 'void loop()':
demo_simple:34: error: 'read_LCD_buttons' cannot be used as a function
   lcd_key = read_LCD_buttons();
                              ^
C:\Users\taran\Desktop\arduino\demo_simple\demo_simple.ino: At global scope:
demo_simple:58: error: expected declaration before '}' token
 }
 ^
exit status 1
'int read_LCD_buttons()' redeclared as different kind of symbol

, 👍0


1 ответ


2

У вас есть

int read_LCD_buttons;

int read_LCD_buttons()
{
//..
}

Вы не можете иметь переменную int read_LCD_buttons одновременно с функцией, называемой read_LCD_buttons — этот идентификатор уже занят. Однако похоже, что вы ничего не присваиваете и не считываете из этой переменной, так что, вероятно, она изначально не должна была существовать — удаление — вот решение.

В случае, если вы хотите написать прототип функции (который, кстати, вам не обязательно писать в Arduino IDE, поскольку он генерирует их автоматически), правильной формой будет

int read_LCD_buttons();

т.е. точно такой же прототип, заканчивающийся на ;.

В setup() у вас есть случайный i, который там не должен быть.

void setup() {
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print("Press to dice");
  pinMode (A0, INPUT);
  i //удаляю эту строку
}

Наконец, у вас несоответствие открывающих и закрывающих фигурных скобок. Всегда правильно форматируйте код, чтобы эти ошибки было легче обнаружить! У вас есть один лишний }.

void loop() {
  int reading = analogRead(A0);

  lcd_key = read_LCD_buttons();

  if (reading < BUTTON4LOW && reading < BUTTON4HIGH) {
    diceOne = random(1, 7);
    diceTwo = random(1, 7);

    if (diceOne + diceTwo == 7) {
      lcd.clear();
      lcd.setCursor(7, 0);
      lcd.print("7");
      lcd.setCursor(3, 1);
      lcd.print("The pirate");

      if (diceOne + diceTwo == 3, 2, 1, 5, 4, 6) {
        lcd.clear();
        lcd.setCursor(7, 0);
        lcd.print("fish");
      }
    }
  }
}
} //Это } слишком много!

Затем вы также увидите, что третий оператор if, который проверяет сумму, на самом деле находится внутри другого выражения, где утверждается, что сумма уже равна 7. Тогда внутренний if никогда не может стать истинным. Вероятно, вы имели в виду переместить if во внешнюю часть, т. е. написать

void loop() {
  int reading = analogRead(A0);

  lcd_key = read_LCD_buttons();

  if (reading < BUTTON4LOW && reading < BUTTON4HIGH) {
    diceOne = random(1, 7);
    diceTwo = random(1, 7);

    if (diceOne + diceTwo == 7) {
      lcd.clear();
      lcd.setCursor(7, 0);
      lcd.print("7");
      lcd.setCursor(3, 1);
      lcd.print("The pirate");
    }
    //строка ниже все еще неверна
    if (diceOne + diceTwo == 3, 2, 1, 5, 4, 6) {
      lcd.clear();
      lcd.setCursor(7, 0);
      lcd.print("fish");
    }
  }
}

Далее, это выражение не имеет смысла.

if (diceOne + diceTwo == 3,2,1,5,4,6)

Я думаю, вы имели в виду, что «если сумма diceOne и diceTwo равна 3, 2, 1, 5, 4 или 6 (т.е. в пределах от 1 до 6 включительно), то сделайте что-нибудь».

Использование нескольких операторов or будет выражаться как

if ((diceOne + diceTwo == 3) || (diceOne + diceTwo == 2) || (diceOne + diceTwo == 1) || (diceOne + diceTwo == 5) ||(diceOne + diceTwo == 4) || (diceOne + diceTwo == 6))

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

if( diceOne + diceTwo <= 6)

Также это выражение подозрительно

if (reading<BUTTON4LOW && reading<BUTTON4HIGH)

Когда у вас есть нижняя и верхняя границы и вы хотите проверить, находится ли показание между ними, вы бы записали это как «если показание больше нижней границы и меньше верхней границы», т. е.

if (reading > BUTTON4LOW && reading < BUTTON4HIGH)
,