IRMP-org / IRMP

Infrared Multi Protocol Decoder
GNU General Public License v3.0
267 stars 43 forks source link

'Serial' was not declared in this scope (ATTiny) #49

Closed Ircama closed 3 years ago

Ircama commented 3 years ago

'Serial' was not declared in this scope (ATTiny)

In order to avoid the 'Serial' was not declared in this scope error when uploading to ATTiny microcontroller via programmer (I use "Arduino as ISP"), I added the following code:

#ifdef ARDUINO_attiny
class Fake_serial {
  public:
    void print(void *, int){};
    void print(const void*){};
    void print(void *){};
    void println(){};
};
Fake_serial Serial;
#endif

Is there a better way to fix this issue?

Way to reproduce the problem

Board

ATtiny85 Digispark board Arduino Nano as ISP

IDE

Arduino IDE

Version

IRMP 3.4.1

Settings

File > Preferences > Additional Board manager IRLs: https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json

Tools > Board: ATTiny25/45/85

Tools > Processor > ATTiny85

Tools > Clock (I use "Internal 8 MHz" after setting lfuse to E2 with avrdude -Cavrdude.conf -v -pattiny85 -cstk500v1 -P... -b19200 -U lfuse:w:0xE2:m)

Tools > Port (use the one connected to the Arduino Nano used as ISP)

Tools > Programmer: "Arduino as ISP"

Sketch

#define IRMP_INPUT_PIN 2
#include <irmp.c.h>
IRMP_DATA irmp_data[1];

void setup() {
  irmp_init();
}

void loop() {
  if (irmp_get_data( & irmp_data[0])) {
    digitalWrite(1, HIGH);
    delay(100);
    digitalWrite(1, LOW); 
  }
}

Error

In file included from /home/test/arduino/current/Arduino/libraries/IRMP/src/irmp.c.h:3035:0,
                 from /home/test/arduino/current/Arduino/irmp_test/irmp_test.ino:2:
/home/test/arduino/current/Arduino/libraries/IRMP/src/irmpArduinoExt.cpp.h: In function 'void irmp_result_print(IRMP_DATA*)':
/home/test/arduino/current/Arduino/libraries/IRMP/src/irmpArduinoExt.cpp.h:582:5: error: 'Serial' was not declared in this scope
     Serial.print(F("P="));
     ^~~~~~
/home/test/arduino/current/Arduino/libraries/IRMP/src/irmpArduinoExt.cpp.h:582:5: note: suggested alternative: 'Stream'
     Serial.print(F("P="));
     ^~~~~~
     Stream
exit status 1
Error compiling for board ATtiny25/45/85

Code to overcome the problem

#ifdef ARDUINO_attiny
class Fake_serial {
  public:
    void print(void *, int){};
    void print(const void*){};
    void print(void *){};
    void println(){};
};
Fake_serial Serial;
#endif

#define IRMP_INPUT_PIN 2
#include <irmp.c.h>
IRMP_DATA irmp_data[1];

void setup() {
  irmp_init();
}

void loop() {
  if (irmp_get_data( & irmp_data[0])) {
    digitalWrite(1, HIGH);
    delay(100);
    digitalWrite(1, LOW); 
  }
}

Alternative way to overcome the problem

Edit IRMP/src/irmpArduinoExt.cpp.h and add

void irmp_result_print(IRMP_DATA *aIRMPDataPtr)
{
#ifndef IRMP_NO_RESULT_PRINT
...(original code in the function)...
#endif
}

Related code

#define IRMP_NO_RESULT_PRINT

#define IRMP_INPUT_PIN 2
#include <irmp.c.h>
IRMP_DATA irmp_data[1];

void setup() {
  irmp_init();
}

void loop() {
  if (irmp_get_data( & irmp_data[0])) {
    digitalWrite(1, HIGH);
    delay(100);
    digitalWrite(1, LOW); 
  }
}
ArminJo commented 3 years ago

The simple solution is: Use a maintained ATtiny core like https://github.com/SpenceKonde/ATTinyCore.