Quantcast
Channel: Active questions tagged ubuntu - Stack Overflow
Viewing all articles
Browse latest Browse all 7069

Undefined reference error in multi environment Platformio project

$
0
0

OS: Ubuntu 22.04.4 LTS

PlatformIO: Core 6.1.16, Home 3.4.4

I have following src folder structure in my PlatformIO project:

-src--arduino---main.cpp--esp32---essentials.cpp---main.cpp

the content of all the three files is as follows:

arduino/main.cpp:

#include<Arduino.h>#define aggregationCount 10#define sensorPin 5#define devicePin 6#define esp Serial1String messageFromEsp, messageToEsp;void setup(){  pinMode(sensorPin,INPUT);  pinMode(devicePin,OUTPUT);  // Serial.begin(9600);  esp.begin(9600);  Serial.begin(9600);  while(!Serial){}  Serial.println("Serial began");}void loop(){  if(esp.available()){    messageFromEsp = messageToEsp = "";    messageFromEsp = esp.readStringUntil('\n');    Serial.print("esp:");    Serial.println(messageFromEsp);    if(messageFromEsp.indexOf("giveReading") == 0){      messageToEsp = "reading:" + String(digitalRead(sensorPin));      esp.println(messageToEsp);      Serial.print("sent:");      Serial.println(messageToEsp);    }    else if(messageFromEsp.indexOf("turnDeviceOn") == 0){      digitalWrite(devicePin,HIGH);      messageToEsp = "deviceIs:" + String("ON");      esp.println(messageToEsp);      Serial.print("sent:");      Serial.println(messageToEsp);    }    else if(messageFromEsp.indexOf("turnDeviceOff") == 0){      digitalWrite(devicePin,LOW);      messageToEsp = "deviceIs:" + String("OFF");      esp.println(messageToEsp);      Serial.print("sent:");      Serial.println(messageToEsp);    }    else{      esp.println("invalid command");    }    while(esp.available())esp.read();  }}

esp32/essentials.cpp

#define ssid "Gondals"#define password "GondalsRouter"#define askArdTimeout 3000#define arduino Serial2ESPTelnet telnet;IPAddress myIp(192,168,10,55);IPAddress subnet(255,255,255,0);IPAddress gateway(192,168,10,1);IPAddress dns(192,168,10,1);String message;void onTelnetConnect(String ip);void onTelnetDisconnect(String ip);void onTelnetInput(String input);void setupOTA();void setupTelnet();//helpingFunctionsvoid print(String inMessage){  Serial.println(inMessage);  telnet.println(inMessage);}String askArduino(String inMessage){  // while(arduino.available())arduino.read();  print("sent:" + inMessage);  arduino.flush();  arduino.println(inMessage);  unsigned long int start = millis();  while((!arduino.available()) && ((millis() - start) < askArdTimeout)){}  message = "";  message = arduino.readStringUntil('\n');  print("message:" + message);  // while(arduino.available())arduino.read();  return message;}void onTelnetConnect(String ip){  print("telnet connected from ip: " + ip);}void onTelnetDisconnect(String ip){  print("telnet disconnected from ip: "+ip);}void onTelnetInput(String input){  print("input received: "+input);}void setupOTA(){  ArduinoOTA.onStart([]() {    print("OTA Update started");  });  ArduinoOTA.onEnd([]() {    print("OTA Update ended");  });  ArduinoOTA.onError([](ota_error_t error){    print("OTA Error["+String(error)+"]");    if (error == OTA_AUTH_ERROR) print("Auth Failed");    else if (error == OTA_BEGIN_ERROR) print("Begin Failed");    else if (error == OTA_CONNECT_ERROR) print("Connect Failed");    else if (error == OTA_RECEIVE_ERROR) print("Receive Failed");    else if (error == OTA_END_ERROR) print("End Failed");  });  ArduinoOTA.begin();  print("OTA ready");}void setupTelnet(){  if(telnet.begin(55555)){    print("telnet began");  }  else{    print("error in telnet");  }  telnet.onConnect(onTelnetConnect);  telnet.onDisconnect(onTelnetDisconnect);  telnet.onInputReceived(onTelnetInput);}

esp32/main.cpp

#include <Arduino.h>#include<ArduinoOTA.h>#include<ESPTelnet.h>#include"essentials.h"#include<freertos/FreeRTOS.h>#include<freertos/task.h>// #include<ACS712.h>#define aggregationCount 10#define sensorPin 5#define devicePin 6enum status {OFF, ON, INVALID};status deviceStatus = OFF, reading = OFF;int result = 0, aggregation = 0;int param = 5;unsigned long int start = millis();status changeDevState(status deviceStatus){  String message = deviceStatus ? askArduino("turnDeviceOff") : askArduino("turnDeviceOn");  print(String("ardResp:" + message));  if(message.indexOf("deviceIs:" == 0)){    message = message.substring(9);    if(message.indexOf("ON") == 0)return ON;    else if(message.indexOf("OFF") == 0)return OFF;  }  else print("invalid response");  return INVALID;}void turnTheDevice(status statusIn){  if(statusIn) deviceStatus = changeDevState(ON);  else deviceStatus = changeDevState(OFF);  if(deviceStatus)print("device ON");  else print("device OFF");}status getReading(){  message = "";  message = askArduino("giveReading");  print("ardResp:" + message);  if(message.indexOf("reading:" == 0)){    message = message.substring(8);    if(message[0] == '0')return OFF;    else if(message[0] == '1')return ON;  }  else print("invalid response");  return INVALID;}void services(void *pvParamters){  while(1){    telnet.loop();ArduinoOTA.handle();  }}void setup() {  Serial.begin(9600);  arduino.begin(9600);  pinMode(2, OUTPUT);  WiFi.mode(WIFI_AP_STA);  //wireless services initializations  if(!WiFi.config(myIp,gateway,subnet,dns)){    print("static ip config failed");  }  WiFi.begin(ssid,password);  while(WiFi.status() != WL_CONNECTED){    digitalWrite(2, LOW);print(".");delay(500);    digitalWrite(2, HIGH);print(".");delay(500);    print(String(WiFi.status()));  }  setupTelnet();  setupOTA();  xTaskCreate(services,"services",4096,NULL,1,NULL);}void loop(){  while(1){    if(deviceStatus == OFF){      do{        reading = getReading();        print(String(reading));        delay(500);      }while(!(reading == 1));      turnTheDevice(ON);    }    else if(deviceStatus == ON){      print("inside deviceON");      result = 0;      for(int m=0,end=aggregationCount*2;m<end;m++){        reading = getReading();        if((reading == 0) || (reading == 1)){          result += reading;        }        delay(500);        print(String(reading));      }      aggregation = (result*100)/(aggregationCount*2);      print("aggregation:" + String(aggregation));      if(aggregation < 25){        turnTheDevice(OFF);      }    }  }}

and finally, the platformio.ini contents:

[env:megaatmega1280]platform = atmelavrboard = megaatmega1280framework = arduinobuild_src_filter =  +<arduino/*> -<esp32/*>

and the error I am being faced with is:

/tmp/ccCoYnv2.ltrans0.ltrans.o: In function `main':<artificial>:(.text.startup+0xe0): undefined reference to `setup'<artificial>:(.text.startup+0xe8): undefined reference to `loop'collect2: error: ld returned 1 exit status*** [.pio/build/megaatmega1280/firmware.elf] Error 1

What can be the issue?


Viewing all articles
Browse latest Browse all 7069

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>