создание цифровых игральных костей
Я пытаюсь сделать цифровые кости для игры в катан, вот что у меня пока есть
#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
@taran, 👍0
1 ответ
У вас есть
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)
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату