ожидаемый неквалифицированный-id перед "while"
programming
error
Привет У меня есть проблема на коде im пытается потопить 2 кода, но я получаю этот код ошибки
PIGGYBANK_CODE:75:1: error: expected unqualified-id before 'while'
while (coinInserted) {
^~~~~
PIGGYBANK_CODE:82:1: error: expected unqualified-id before 'if'
if (coinCount >= requiredCoins) {
^~
PIGGYBANK_CODE:112:1: error: 'lcd' does not name a type
lcd.print("Welcome"); { //Printing a message for the recognized template
^~~
PIGGYBANK_CODE:112:23: error: expected unqualified-id before '{' token
lcd.print("Welcome"); { //Printing a message for the recognized template
^
exit status 1
expected unqualified-id before 'while'
а вот полный код
#include <Adafruit_Fingerprint.h> //Libraries needed
#include <SoftwareSerial.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <EEPROM.h>
#define I2C_ADDR 0x27 //LCD i2c stuff
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
#define coinSlot 6
int coinValue = 0;
int coinCount = 0;
int coinSlotSignal;
int requiredCoins = 1;
boolean coinInserted = false;
int in2 = 4;
int But1 = 8; // In order to add a push button I got the 5v from the pin 8 instead of "5v" arduino pin
int But2 = 9;
String Names[] = { "RAVEN", "Surtr", "Tech",}; //Those are the names affected to the fingertemplates IDs
//The first on which is Names[0] : Yassine has the ID 1 in the fingerprint sensor
SoftwareSerial mySerial(2, 3); //Fingerprint sensor wiring RX 3, TX 2
LiquidCrystal_I2C lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin, D7_pin); //LCD declaring
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial); //Fingerprint sensor declaring
void setup()
{
pinMode(in2, OUTPUT);
digitalWrite(in2, HIGH);
digitalWrite(But1, LOW);
pinMode(coinSlot, INPUT_PULLUP);
Serial.begin(9600);
finger.begin(57600);
lcd.begin (16, 2);
lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
lcd.setBacklight(HIGH);
lcd.home();
lcd.write(EEPROM.read(5));
finger.getTemplateCount(); //Counts the number of templates stored in the sensor flash memory
delay(2000);
introScreen();
}
void loop()
{
int result = getFingerprintIDez(); //This function keeps looping and waiting for a fingerprint to be put on the sensor
OpenDoor();
introScreen();
while (!coinInserted) {
coinSlotSignal = digitalRead(coinSlot);
if (coinSlotSignal < 1) {
coinCount += 1;
coinInserted = true;
EEPROM.write(0, coinCount);
Serial.println(EEPROM.read(0));
lcd.setCursor(0, 0);
lcd.print("TOTAL:");
lcd.setCursor(0, 1);
lcd.print(coinCount);
}
}
}
while (coinInserted) {
coinSlotSignal = digitalRead(coinSlot);
if (coinSlotSignal > 0) {
coinInserted = false;
}
}
if (coinCount >= requiredCoins) {
delay(1500);
}
void introScreen()
{
lcd.clear();
lcd.print("Place finger");
}
//Main function taken from the "fingerprint" example and modified
//Only the modifications are commented
int getFingerprintIDez() {
uint8_t p = finger.getImage(); //Image scanning
if (p != FINGERPRINT_OK) return -1;
p = finger.image2Tz(); //Converting
if (p != FINGERPRINT_OK) return -1;
lcd.clear(); //And here we write a message or take an action for the denied template
p = finger.fingerFastSearch(); //Looking for matches in the internal memory
if (p != FINGERPRINT_OK) { //if the searching fails it means that the template isn't registered
lcd.print("Access denied");
delay(2000);
introScreen();
return -1;
}
}
//If we found a match we proceed in the function
lcd.print("Welcome"); { //Printing a message for the recognized template
lcd.setCursor(2, 1);
lcd.print(Names[finger.fingerID - 1]); //Then print the name we gave it and the -1 is to remove the shift as the ID starts from "1" but the array from "0"
return finger.fingerID;
}
/*The two following functions depends on your locking system
mine has a DC motor that should turn in both ways for opening and closing
that's why I'm using H bridge, you could have a solenoid with a transistor
then you'll need only opening sequence but controlling the transistor
as the closing is spring loaded...
*/
void OpenDoor()
{
digitalWrite(in2, LOW); // turn on motor
delay(5000);
digitalWrite(in2, HIGH); // turn off motor
}
@Raven Tenepre, 👍1
Обсуждение0
Смотрите также:
- Ошибка переменной does not name a type!
- Цвета RGB LED рандомизируются, а LDR затухает одновременно
- Как объявить массив переменного размера (глобально)
- Программирование Arduino с использованием Python, а не C/C ++
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Как справиться с rollover millis()?
- Является ли использование malloc() и free() действительно плохой идеей для Arduino?
- Можно ли сделать несколько функций loop() с помощью Arduino Uno?
Поскольку он каким-то образом правильно отформатирован, любой код, который начинается без каких-либо отступов, вероятно, находится вне какой-либо функции, и в C++ это невозможно, @KIIV
привет, сэр, не могли бы вы подробнее рассказать о том, что вам трудно понять концепцию, @Raven Tenepre
Код входит в функции. Код, которого нет в функции, - это не код, а синтаксическая ошибка. Проверьте свою { и } балансировку., @Majenko
Я проверяю, не пропустил ли я какую-нибудь скобку, сэр ., @Raven Tenepre
Вы не упускаете его, вы просто не туда его положили. Вы закрыли скобку для функции "loop ()" перед циклом "while", куда она должна идти после него, потому что в противном случае цикл "while" не находится внутри какой-либо функции., @chrisl
Дело в том, что мы можем *видеть*, что у вас *отсутствуют скобки. Вы открываете фигурные скобки для функции " loop ()", для ее " while (!coinInserted)", а затем для ее " if (coinSlotSignal < 1)
, а затем вы закрываете все три один за другим. Таким образом, у вас есть " while (coinInserted)
**за пределами** фигурных скобок* любого определения функции., @timemageитак, проблема, сэр, заключалась не в расположении кода, а просто в балансировке скобок?, @Raven Tenepre
да , теперь я понял это, потому что, возможно, длина моего кода так сильно не хватает моим глазам. не единственная проблема
`lcd.print("Добро пожаловать"); {
`, @Raven TenepreОпять же, lcd.print-это код, он не может быть вне функции. И есть также неуместный блок кода сразу после его окончания { ..., @KIIV
После добавления некоторых отсутствующих скобок и некоторых пропущенных, ошибка теперь находится в
`OpenDoor();
, @Raven Tenepre