A function-definition is not allowed here before ‘{’ token

I have a problem with my code. Below is my main code and the other functions. However, I always get an error from every function.

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
#include "OLED.h";
#include "Multiplexer.h";
#include "RTC.h";
#include "SD.h";

const char* ssid = "Pochie_5G";
const char* password = "notchkalugo747@";
const char* host = "192.168.254.100";
const uint16_t port = 80;

void setup()
{

  Serial.begin(115200);

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  Serial.println("Connecting");

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to WiFi network with IP Address: ");
  Serial.println(WiFi.localIP());

  multiplexer_init();
  oled_init();
  rtc_init();
  sd_loop();

}

void loop()
{

  if (WiFi.isConnected()) {
    WIFI_connect();
  }
  multiplexer_loop();
  oled_loop();
  rtc_loop();
  sd_loop();
}

void WIFI_connect() {

  WiFi.mode(WIFI_OFF);        //Prevents reconnection issue (taking too long to connect)
  delay(1000);
  WiFi.mode(WIFI_STA);
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);


  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  
  Serial.println("");
  Serial.println("Connected");

  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

}
#define S0 D0
#define S1 D1
#define S2 D2
#define S3 D3
#define SIG A0

int BT = 0;

void multiplexer_init()
{

  pinMode(S0, OUTPUT);
  pinMode(S1, OUTPUT);
  pinMode(S2, OUTPUT);
  pinMode(S3, OUTPUT);
  pinMode(SIG, INPUT);

  Serial.begin(9600);
}

void multiplexer_loop()
{

  switch (BT) {

    case 1:  {

        int aboRes;
        char *abo[] = {"A positive", "A negative", "B positive", "B negative", "AB positive", "AB negative", "O positive", "O negative"};

        digitalWrite(S0, LOW);
        digitalWrite(S1, LOW);
        digitalWrite(S2, LOW);
        digitalWrite(S3, LOW);
        int sensor0 = analogRead(SIG);
        float voltage0 = sensor0 * (5.0 / 1023.0);

        Serial.println(voltage0);
        delay(2000);


        digitalWrite(S0, HIGH);
        digitalWrite(S1, LOW);
        digitalWrite(S2, LOW);
        digitalWrite(S3, LOW);
        int sensor1 = analogRead(SIG);
        float voltage1 = sensor1 * (5.0 / 1023.0);

        Serial.println(voltage1);
        delay(2000);


        digitalWrite(S0, LOW);
        digitalWrite(S1, HIGH);
        digitalWrite(S2, LOW);
        digitalWrite(S3, LOW);
        int sensor2 = analogRead(SIG);
        float voltage2 = sensor2 * (5.0 / 1023.0);

        Serial.println(voltage2);
        delay(2000);


        digitalWrite(S0, HIGH);
        digitalWrite(S1, HIGH);
        digitalWrite(S2, LOW);
        digitalWrite(S3, LOW);
        int sensor3 = analogRead(SIG);
        float voltage3 = sensor3 * (5.0 / 1023.0);

        Serial.println(voltage3);
        delay(2000);


        digitalWrite(S0, LOW);
        digitalWrite(S1, LOW);
        digitalWrite(S2, HIGH);
        digitalWrite(S3, LOW);
        int sensor4 = analogRead(SIG);


        digitalWrite(S0, HIGH);
        digitalWrite(S1, LOW);
        digitalWrite(S2, HIGH);
        digitalWrite(S3, LOW);
        int sensor5 = analogRead(SIG);


        digitalWrite(S0, LOW);
        digitalWrite(S1, HIGH);
        digitalWrite(S2, HIGH);
        digitalWrite(S3, LOW);
        int sensor6 = analogRead(SIG);


        digitalWrite(S0, HIGH);
        digitalWrite(S1, HIGH);
        digitalWrite(S2, HIGH);
        digitalWrite(S3, LOW);
        int sensor7 = analogRead(SIG);

        if (voltage0 > 3.0 && voltage1 < 3.0 && voltage2 > 3.0 && voltage3 > 3.0)
          int aboRes = 1;
        else if (voltage0 > 3.0 && voltage1 < 3.0 && voltage2 > 3.0 && voltage3 < 3.0)
          int aboRes = 2;
        else if (voltage0 < 3.0 && voltage1 > 3.0 && voltage2 > 3.0 && voltage3 > 3.0)
          int aboRes = 3;
        else if (voltage0 < 3.0 && voltage1 > 3.0 && voltage2 > 3.0 && voltage3 < 3.0)
          int aboRes = 4;
        else if (voltage0 > 3.0 && voltage1 > 3.0 && voltage2 > 3.0 && voltage3 > 3.0)
          int aboRes = 5;
        else if (voltage0 > 3.0 && voltage1 > 3.0 && voltage2 > 3.0 && voltage3 < 3.0)
          int aboRes = 6;
        else if (voltage0 < 3.0 && voltage1 < 3.0 && voltage2 < 3.0 && voltage3 > 3.0)
          int aboRes = 7;
        else if (voltage0 < 3.0 && voltage1 < 3.0 && voltage2 < 3.0 && voltage3 < 3.0)
          int aboRes = 8;

        Serial.print(abo[aboRes]);

      } break;

    case 2:  {
        int rhpRes;
        char *rhp[] = {"CcEe", "CcE", "Cce", "CEe", "cEe", "CE", "Ce", "cE", "ce"};

        digitalWrite(S0, LOW);
        digitalWrite(S1, LOW);
        digitalWrite(S2, LOW);
        digitalWrite(S3, LOW);
        int sensor0 = analogRead(SIG);
        float voltage0 = sensor0 * (5.0 / 1023.0);

        Serial.println(voltage0);
        delay(2000);


        digitalWrite(S0, HIGH);
        digitalWrite(S1, LOW);
        digitalWrite(S2, LOW);
        digitalWrite(S3, LOW);
        int sensor1 = analogRead(SIG);
        float voltage1 = sensor1 * (5.0 / 1023.0);

        Serial.println(voltage1);
        delay(2000);


        digitalWrite(S0, LOW);
        digitalWrite(S1, HIGH);
        digitalWrite(S2, LOW);
        digitalWrite(S3, LOW);
        int sensor2 = analogRead(SIG);
        float voltage2 = sensor2 * (5.0 / 1023.0);

        Serial.println(voltage2);
        delay(2000);


        digitalWrite(S0, HIGH);
        digitalWrite(S1, HIGH);
        digitalWrite(S2, LOW);
        digitalWrite(S3, LOW);
        int sensor3 = analogRead(SIG);
        float voltage3 = sensor3 * (5.0 / 1023.0);

        Serial.println(voltage3);
        delay(2000);

        digitalWrite(S0, LOW);
        digitalWrite(S1, LOW);
        digitalWrite(S2, HIGH);
        digitalWrite(S3, LOW);
        int sensor4 = analogRead(SIG);


        digitalWrite(S0, HIGH);
        digitalWrite(S1, LOW);
        digitalWrite(S2, HIGH);
        digitalWrite(S3, LOW);
        int sensor5 = analogRead(SIG);


        digitalWrite(S0, LOW);
        digitalWrite(S1, HIGH);
        digitalWrite(S2, HIGH);
        digitalWrite(S3, LOW);
        int sensor6 = analogRead(SIG);


        digitalWrite(S0, HIGH);
        digitalWrite(S1, HIGH);
        digitalWrite(S2, HIGH);
        digitalWrite(S3, LOW);
        int sensor7 = analogRead(SIG);

        if (voltage0 > 3.0 && voltage1 > 3.0 && voltage2 > 3.0 && voltage3 > 3.0)
          int rhpRes = 1;
        else if (voltage0 > 3.0 && voltage1 > 3.0 && voltage2 > 3.0 && voltage3 < 3.0)
          int rhpRes = 2;
        else if (voltage0 > 3.0 && voltage1 > 3.0 && voltage2 < 3.0 && voltage3 > 3.0)
          int rhpRes = 3;
        else if (voltage0 > 3.0 && voltage1 < 3.0 && voltage2 > 3.0 && voltage3 > 3.0)
          int rhpRes = 4;
        else if (voltage0 < 3.0 && voltage1 > 3.0 && voltage2 > 3.0 && voltage3 > 3.0)
          int rhpRes = 5;
        else if (voltage0 > 3.0 && voltage1 < 3.0 && voltage2 > 3.0 && voltage3 < 3.0)
          int rhpRes = 6;
        else if (voltage0 > 3.0 && voltage1 < 3.0 && voltage2 < 3.0 && voltage3 > 3.0)
          int rhpRes = 7;
        else if (voltage0 < 3.0 && voltage1 > 3.0 && voltage2 > 3.0 && voltage3 < 3.0)
          int rhpRes = 8;
        else if (voltage0 < 3.0 && voltage1 > 3.0 && voltage2 < 3.0 && voltage3 > 3.0)
          int rhpRes = 9;


        Serial.print(rhp[rhpRes]);


      } break;

    case 3:  {
        int reverseRes;
        char *reverse[] = {"A", "B", "AB", "O"};

        digitalWrite(S0, LOW);
        digitalWrite(S1, LOW);
        digitalWrite(S2, LOW);
        digitalWrite(S3, LOW);
        int sensor0 = analogRead(SIG);
        float voltage0 = sensor0 * (5.0 / 1023.0);

        Serial.println(voltage0);
        delay(2000);


        digitalWrite(S0, HIGH);
        digitalWrite(S1, LOW);
        digitalWrite(S2, LOW);
        digitalWrite(S3, LOW);
        int sensor1 = analogRead(SIG);
        float voltage1 = sensor1 * (5.0 / 1023.0);

        Serial.println(voltage1);
        delay(2000);


        digitalWrite(S0, LOW);
        digitalWrite(S1, HIGH);
        digitalWrite(S2, LOW);
        digitalWrite(S3, LOW);
        int sensor2 = analogRead(SIG);
        float voltage2 = sensor2 * (5.0 / 1023.0);

        Serial.println(voltage2);
        delay(2000);

        digitalWrite(S0, LOW);
        digitalWrite(S1, LOW);
        digitalWrite(S2, HIGH);
        digitalWrite(S3, LOW);
        int sensor4 = analogRead(SIG);


        digitalWrite(S0, HIGH);
        digitalWrite(S1, LOW);
        digitalWrite(S2, HIGH);
        digitalWrite(S3, LOW);
        int sensor5 = analogRead(SIG);


        digitalWrite(S0, LOW);
        digitalWrite(S1, HIGH);
        digitalWrite(S2, HIGH);
        digitalWrite(S3, LOW);
        int sensor6 = analogRead(SIG);


        digitalWrite(S0, HIGH);
        digitalWrite(S1, HIGH);
        digitalWrite(S2, HIGH);
        digitalWrite(S3, LOW);
        int sensor7 = analogRead(SIG);

        if (voltage0 < 3.0 && voltage1 > 3.0 && voltage2 < 3.0)
          int reverseRes = 1;
        else if (voltage0 > 3.0 && voltage1 < 3.0 && voltage2 < 3.0)
          int reverseRes = 2;
        else if (voltage0 < 3.0 && voltage1 < 3.0 && voltage2 < 3.0)
          int reverseRes = 3;
        else if (voltage0 > 3.0 && voltage1 > 3.0 && voltage2 < 3.0)
          int reverseRes = 4;

        Serial.print(reverse[reverseRes]);

      } break;

    case 4:  {
        int crossRes;
        char *cross[crossRes] = {"Compatible", "Not Compatible"};

        digitalWrite(S0, LOW);
        digitalWrite(S1, LOW);
        digitalWrite(S2, LOW);
        digitalWrite(S3, LOW);
        int sensor0 = analogRead(SIG);
        float voltage0 = sensor0 * (5.0 / 1023.0);

        Serial.println(voltage0);
        delay(2000);


        digitalWrite(S0, HIGH);
        digitalWrite(S1, LOW);
        digitalWrite(S2, LOW);
        digitalWrite(S3, LOW);
        int sensor1 = analogRead(SIG);
        float voltage1 = sensor1 * (5.0 / 1023.0);

        Serial.println(voltage1);
        delay(2000);


        digitalWrite(S0, LOW);
        digitalWrite(S1, LOW);
        digitalWrite(S2, HIGH);
        digitalWrite(S3, LOW);
        int sensor4 = analogRead(SIG);


        digitalWrite(S0, HIGH);
        digitalWrite(S1, LOW);
        digitalWrite(S2, HIGH);
        digitalWrite(S3, LOW);
        int sensor5 = analogRead(SIG);


        digitalWrite(S0, LOW);
        digitalWrite(S1, HIGH);
        digitalWrite(S2, HIGH);
        digitalWrite(S3, LOW);
        int sensor6 = analogRead(SIG);


        digitalWrite(S0, HIGH);
        digitalWrite(S1, HIGH);
        digitalWrite(S2, HIGH);
        digitalWrite(S3, LOW);
        int sensor7 = analogRead(SIG);

        if (voltage0 < 3.0)
          int crossRes = 1;
        else
          int crossRes = 2;


        Serial.print(cross[crossRes]);
      } break;


  }
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "Multiplexer.h"

Adafruit_SSD1306 display(-1);

void oled_init()
{
  // initialize with the I2C addr 0x3C
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

  Serial.begin(115200);

  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for (;;);
  }
  delay(2000);
  display.clearDisplay();
  display.setTextColor(WHITE);
}

void oled_loop()
{
  delay(5000);
  display.clearDisplay();

  //display ABO result
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.print("ABO/RhD: ");
  display.setTextSize(2);
  display.setCursor(0, 10);
  display.print(abo[aboRes]);

  //display Rh result
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.print("Rh: ");
  display.setTextSize(2);
  display.setCursor(0, 10);
  display.print(rhp[rhpRes]);

  //display Reverse result
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.print("Reverse Type: ");
  display.setTextSize(2);
  display.setCursor(0, 10);
  display.print(reverse[reverseRes]);

  //display Crossmatch result
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.print("Crossmatching: ");
  display.setTextSize(2);
  display.setCursor(0, 10);
  display.print(cross[crossRes]);

  display.display();
}

I need help. The error is:
In file included from C:\Users\PC\Documents\Blood Typing\Yopak_besh\Yopak_besh.ino:4:
C:\Users\PC\Documents\Blood Typing\Yopak_besh\OLED.h: In function 'void multiplexer_loop()':
OLED.h:10:1: error: a function-definition is not allowed here before '{' token
10 | {
| ^
OLED.h:26:1: error: a function-definition is not allowed here before '{' token
26 | {
| ^
In file included from C:\Users\PC\Documents\Blood Typing\Yopak_besh\Yopak_besh.ino:5:
Multiplexer.h:10:1: error: a function-definition is not allowed here before '{' token
10 | {
| ^
Multiplexer.h:22:1: error: a function-definition is not allowed here before '{' token
22 | {
| ^
Yopak_besh:71:1: error: expected '}' at end of input
71 | }
| ^
In file included from C:\Users\PC\Documents\Blood Typing\Yopak_besh\OLED.h:5,
from C:\Users\PC\Documents\Blood Typing\Yopak_besh\Yopak_besh.ino:4:
C:\Users\PC\Documents\Blood Typing\Yopak_besh\Multiplexer.h:22:1: note: to match this '{'
22 | {
| ^

The installation and troubleshooting section is about getting the Arduino system going, it specifically says not for your project. As this is specifically about your project I have moved your post here.
Please take more chair where you post in future.

Because you have miss counted your braces { and }
That is they don't match.

Also you can not define a function inside a function, that is what the first message is telling you.

Pleas post your code in one section, no not split it up like you have done.

What this for?

void oled_init()
{
  // initialize with the I2C addr 0x3C
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

  Serial.begin(115200);

  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for (;;); <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<????????????????????????????
  }
  delay(2000);
  display.clearDisplay();
  display.setTextColor(WHITE);
}

Its for the initialization of the oled module but somehow Im not finish yet. However, back to my concern. Still error in the function. Ive checked the braces. I have missed a brace in the multiplexer header but still same error

Why not comment out large swatches of your code till the error disappears. Then uncomment, logically, a small section of code and see if it verifies. If it does go on to the next small section, if not then do the other thing.

You are missing a '}' at the end of this function:

void multiplexer_loop()

I could have found that if the code was presented intelligently

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