ошибка при компиляции рабочего скетча

Denis95
Offline
Зарегистрирован: 07.07.2015
/*************************************************************************************************************
 * Universal USB to I2S Interface Indicator
 *
 * Project Page: http://www.dimdim.gr/arduino/universal-usb-to-i2s-interface-indicator/
 *
 * v1.34    26/06/2015 : - Added support for SH1106-based OLED displays.
 *
 * v1.33    26/06/2015 : - Added code to send any non-recognized IR codes to the serial port. 
 *
 * v1.28    07/06/2015 : - JLsounds code is fully tested and working OK.
 *
 * v1.23    01/06/2015 : - Remote power on/off implemented.
 *                       - JLsounds code is not working! To be fixed soon..
 *
 * v1.03    29/05/2015 : - Signal type is now displayed (for 3 seconds).
 *                       - IR remote control supported for changing sources.
 *                       - Source name is displayed (in case of USB for 3 seconds).
 *
 * v0.36    25/05/2015 : - Updated WaveIO code to also display 352.8K & 384K. It is now fully tested.
 *                       - Fixed decimal point display bug.
 *                       - Amanero code is fully tested and working OK.
 *
 * v0.34    26/04/2015 : - Sampling Rate now displayed as float (with decimal point). Slightly smaller font.
 *
 * v0.33    24/04/2015 : - Debugged Amanero code. Should be fine now. Still not tested.
 *
 * v0.32    22/04/2015 : - Added DSD detection for the JLSounds interface (not properly documented, 
 *                         so not sure if it works OK).
 *                       - Added support for WaveIO interface (not tested).
 *
 * v0.3     21/04/2015 : - Initial version. Shows only the sampling rate (type INT for now).
 *                       - Compatible with 0.96" OLED display (SSD1306, 128 x 64)
 *                       - Compatible with Amanero Combo384 (not tested), DIYINHK XMOS & 
 *                         JLSounds interfaces (not tested).
 *
 **************************************************************************************************************/


#include "U8glib.h"
#include <stdlib.h>
#include <IRremote.h>

// Remove comment slashes ("//") from your USB interface. Keep all other interfaces commented out.
#define Amanero
// #define DIYINHK_XMOS
// #define JLSounds
// #define WaveIO

// Set the operation of the U2 isolator. If you have a 4-input part (Si8045AA), comment out the TWOOUTPUTS. 
// If you have a 2-input/2-output part (Si8642ΒΑ), comment out the ALLINPUTS.
//#define ALLINPUTS
#define TWOOUTPUTS

// Comment out when using the IR control functionality.
#define IRCONTROL

// setup u8g object - select according to your specific OLED
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK);	                // 0.96" OLED Display using I2C which does not send ACK
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE);                   // I2C / TWI 
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST); // Dev 0, Fast I2C / TWI
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK);                 // Display which does not send ACK

#define POWER_CODE 0xFF48B7          // Code for power on/off
#define SOURCE1_CODE 0xFF827D        // Code for source 1
#define SOURCE2_CODE 0xFFB24D        // Code for source 2

int x_dim;                           // Display resolution
int y_dim;                           // Display resolution

int str_height;
int str_width;
int source = 1;                      // Variable to hold the Input number. 0 for s/pdif, 1 for USB.
int sourceold = 3;                   // Variable to hold the old Input number. 0 for s/pdif, 1 for USB.
int type;                            // Variable to hold the signal type. 0 for PCM, 1 for DSD.
int typeold = 3;                     // Variable to hold the old signal type. 0 for PCM, 1 for DSD.
bool poweron = true;                 // Variable to hold the poweron condition.
bool newSR;                          // Tell if the SR has changed.
bool newSource;                      // Tell if the source has changed.
bool display_SR;
bool display_type;
bool display_power;
bool display_source;
float SR;                            // Variable to hold the detected sampling rate (or DSD type) as float.
float SRold = 1.1;                   // Variable to hold the old detected sampling rate (or DSD type) as float.
int SRint;                           // Variable to hold the detected sampling rate (or DSD type) as int.
int SRintold;                        // Variable to hold the old detected sampling rate (or DSD type) as int.
char stringSR[10];                   // Variable to hold the detected sampling rate (or DSD type) as string.
unsigned long previousMillis = 0;
long power_disp_interval = 3000;
long source_disp_interval = 3000;

const int I1 = 2;          // I1 is Digital 2 Pin.
const int I2 = 3;          // I2 is Digital 3 Pin.
const int I3 = 4;          // I3 is Digital 4 Pin.
const int I4 = 5;          // I4 is Digital 5 Pin.
const int I5 = 6;          // I5 is Digital 6 Pin.
const int I6 = 7;          // I6 is Digital 7 Pin.
const int I7 = 8;          // I7 is Digital 8 Pin.
const int I8 = 9;          // I8 is Digital 9 Pin.
const int I9 = 10;         // I9 is Digital 10 Pin.
const int I10 = 11;        // I10 is Digital 11 Pin.

int RECV_PIN = 12;         // IR Receiver input pin.

#define POWERPIN 13        // Power Relay pin.

#ifdef IRCONTROL
IRrecv irrecv(RECV_PIN);
decode_results results;
#endif IRCONTROL

void disp_SR(void) {
  
  u8g.setFont(u8g_font_fur35n);
  if ((SR-(int)SR) > 0)
  {
    str_height = u8g.getFontAscent()-u8g.getFontDescent();
    str_width = u8g.getStrWidth(dtostrf(SR, 0, 1, stringSR));
    
    u8g.setPrintPos((x_dim-str_width)/2, (y_dim/2+str_height/2));
    u8g.print(SR, 1);
  }
  else if ((SR-(int)SR) == 0)
  {
    SRint = (int)SR;
    str_height = u8g.getFontAscent()-u8g.getFontDescent();
    str_width = u8g.getStrWidth(itoa(SRint, stringSR, 10));
    
    u8g.setPrintPos((x_dim-str_width)/2, (y_dim/2+str_height/2));
    u8g.print(SRint, 1);
  }
}

void disp_source(void)
  {
    u8g.setFont(u8g_font_fub20);
    str_height = u8g.getFontAscent()-u8g.getFontDescent();

    if (source == 0)
    {
      str_width = u8g.getStrWidth("S/PDIF");
      u8g.setPrintPos((x_dim-str_width)/2, (y_dim/2+str_height/2));
      u8g.print("S/PDIF");
      //Serial.println("S/PDIF");
    }
    else
    {
      str_width = u8g.getStrWidth("USB");
      u8g.setPrintPos((x_dim-str_width)/2, (y_dim/2+str_height/2));
      u8g.print("USB");
      //Serial.println("USB");
    }
   
  }

void disp_type(void)
  {
    u8g.setFont(u8g_font_fub20);
    str_height = u8g.getFontAscent()-u8g.getFontDescent();
   
    if (type == 0)
    {
      str_width = u8g.getStrWidth("PCM");
      u8g.setPrintPos((x_dim-str_width)/2, (y_dim/2+str_height/2));
      u8g.print("PCM");
    }
    else
    {
      str_width = u8g.getStrWidth("DSD");
      u8g.setPrintPos((x_dim-str_width)/2, (y_dim/2+str_height/2));
      u8g.print("DSD");
    }
  }
  

void disp_power(void)
  {
    u8g.setFont(u8g_font_fub20);
    str_height = u8g.getFontAscent()-u8g.getFontDescent();
   
    if (poweron == false)
    {
      str_width = u8g.getStrWidth("OFF");
      u8g.setPrintPos((x_dim-str_width)/2, (y_dim/2+str_height/2));
      u8g.print(" ");
    }
    else
    {
      str_width = u8g.getStrWidth("ON");
      u8g.setPrintPos((x_dim-str_width)/2, (y_dim/2+str_height/2));
      u8g.print("ON");
    }
  }
  
void read_input() {

  // ---------------------------- Amanero ------------------------------------------------------------------------------
  #ifdef Amanero
  // Check for PCM or DSD
  if (digitalRead(I5) == false)    // PCM detected
  {  
  type = 0;
  if (digitalRead(I1) == false && digitalRead(I2) == false && digitalRead(I3) == false && digitalRead(I4) == false)
    {
      SR = 32;
    }
    else if (digitalRead(I1) == true && digitalRead(I2) == false && digitalRead(I3) == false && digitalRead(I4) == false)
      {
        SR = 44.1;
      }
      else if (digitalRead(I1) == false && digitalRead(I2) == true && digitalRead(I3) == false && digitalRead(I4) == false)
        {
          SR = 48;
        }
        else if (digitalRead(I1) == true && digitalRead(I2) == true && digitalRead(I3) == false && digitalRead(I4) == false)
          {
            SR = 88.2;
          }
          else if (digitalRead(I1) == false && digitalRead(I2) == false && digitalRead(I3) == true && digitalRead(I4) == false)
            {
              SR = 96;
            }
            else if (digitalRead(I1) == true && digitalRead(I2) == false && digitalRead(I3) == true && digitalRead(I4) == false)
              {
                SR = 176.4;
              }
              else if (digitalRead(I1) == false && digitalRead(I2) == true && digitalRead(I3) == true && digitalRead(I4) == false)
                {
                  SR = 192;
                }
                else if (digitalRead(I1) == true && digitalRead(I2) == true && digitalRead(I3) == true && digitalRead(I4) == false)
                  {
                    SR = 352.8;
                  }
                  else if (digitalRead(I1) == false && digitalRead(I2) == false && digitalRead(I3) == false && digitalRead(I4) == true)
                    {
                      SR = 384;
                    }
  }
  else if (digitalRead(I5) == true)    // DSD detected
    {
      type = 1;
      if (digitalRead(I6) == false)
        {
          SR = 64;
        }
          else if (digitalRead(I6) == true)
            {
              SR = 128;
            }
    }
  #endif Amanero

  // ---------------------------- DIYINHK_XMOS ------------------------------------------------------------------------------
  #ifdef DIYINHK_XMOS
  if (digitalRead(I1) == false && digitalRead(I2) == false && digitalRead(I3) == false && digitalRead(I4) == false)
      {
        type = 0;
        SR = 44.1;
      }
      else if (digitalRead(I1) == true && digitalRead(I2) == false && digitalRead(I3) == false && digitalRead(I4) == false)
        {
          type = 0;
          SR = 48;
        }
        else if (digitalRead(I1) == false && digitalRead(I2) == true && digitalRead(I3) == false && digitalRead(I4) == false)
          {
            type = 0;
            SR = 88.2;
          }
          else if (digitalRead(I1) == true && digitalRead(I2) == true && digitalRead(I3) == false && digitalRead(I4) == false)
            {
              type = 0;
              SR = 96;
            }
            else if (digitalRead(I1) == false && digitalRead(I2) == false && digitalRead(I3) == true && digitalRead(I4) == false)
              {
                type = 0;
                SR = 176.4;
              }
              else if (digitalRead(I1) == true && digitalRead(I2) == false && digitalRead(I3) == true && digitalRead(I4) == false)
                {
                  type = 0;
                  SR = 192;
                }
                else if (digitalRead(I1) == false && digitalRead(I2) == true && digitalRead(I3) == true && digitalRead(I4) == false)
                  {
                    type = 0;
                    SR = 352.8;
                  }
                  else if (digitalRead(I1) == true && digitalRead(I2) == true && digitalRead(I3) == true && digitalRead(I4) == false)
                    {
                      type = 0;
                      SR = 384;
                    }
                    else if (digitalRead(I1) == false && digitalRead(I2) == false && digitalRead(I3) == true && digitalRead(I4) == true)
                      {
                        type = 1;
                        SR = 64;
                      }
                      else if (digitalRead(I1) == true && digitalRead(I2) == false && digitalRead(I3) == true && digitalRead(I4) == true)
                        {
                          type = 1;
                          SR = 128;
                        }
  #endif DIYINHK_XMOS
  
  // ---------------------------- JLsounds ------------------------------------------------------------------------------
  #ifdef JLSounds
  // Check for PCM or DSD
  if (digitalRead(I4) == false)    // PCM detected
  {  
    type = 0;
    if (digitalRead(I1) == false && digitalRead(I2) == false && digitalRead(I3) == false)
      {
        SR = 44.1;
      }
      else if (digitalRead(I1) == true && digitalRead(I2) == false && digitalRead(I3) == false)
        {
          SR = 48;
        }
        else if (digitalRead(I1) == false && digitalRead(I2) == true && digitalRead(I3) == false)
          {
            SR = 88.2;
          }
          else if (digitalRead(I1) == true && digitalRead(I2) == true && digitalRead(I3) == false)
            {
              SR = 96;
            }
            else if (digitalRead(I1) == false && digitalRead(I2) == false && digitalRead(I3) == true)
              {
                SR = 176.4;
              }
              else if (digitalRead(I1) == true && digitalRead(I2) == false && digitalRead(I3) == true)
                {
                  SR = 192;
                }
                else if (digitalRead(I1) == false && digitalRead(I2) == true && digitalRead(I3) == true)
                  {
                    SR = 352.8;
                  }
                  else if (digitalRead(I1) == true && digitalRead(I2) == true && digitalRead(I3) == true)
                    {
                      SR = 384;
                    }
  }
  else if (digitalRead(I4) == true)    // DSD detected
    {
      type = 1;
      if (digitalRead(I1) == false && digitalRead(I2) == false && digitalRead(I3) == true)
        {
          SR = 64;
        }
          else if (digitalRead(I1) == false && digitalRead(I2) == true && digitalRead(I3) == true)
            {
              SR = 128;
            }
    }
 
  #endif JLSounds

  // ---------------------------- WaveIO ------------------------------------------------------------------------------
  #ifdef WaveIO
  type = 0;
  if (digitalRead(I1) == true && digitalRead(I2) == false && digitalRead(I3) == false && digitalRead(I4) == false && digitalRead(I5) == false && digitalRead(I6) == false)
      {
        SR = 44.1;
      }
      else if (digitalRead(I1) == false && digitalRead(I2) == true && digitalRead(I3) == false && digitalRead(I4) == false && digitalRead(I5) == false && digitalRead(I6) == false)
        {
          SR = 48;
        }
        else if (digitalRead(I1) == false && digitalRead(I2) == false && digitalRead(I3) == true && digitalRead(I4) == false && digitalRead(I5) == false && digitalRead(I6) == false)
          {
            SR = 88.2;
          }
          else if (digitalRead(I1) == false && digitalRead(I2) == false && digitalRead(I3) == false && digitalRead(I4) == true && digitalRead(I5) == false && digitalRead(I6) == false)
            {
              SR = 96;
            }
            else if (digitalRead(I1) == false && digitalRead(I2) == false && digitalRead(I3) == false && digitalRead(I4) == false && digitalRead(I5) == true && digitalRead(I6) == false)
              {
                SR = 176.4;
              }
              else if (digitalRead(I1) == false && digitalRead(I2) == false && digitalRead(I3) == false && digitalRead(I4) == false && digitalRead(I5) == false && digitalRead(I6) == true)
                {
                  SR = 192;
                }
                else if (digitalRead(I1) == false && digitalRead(I2) == false && digitalRead(I3) == true && digitalRead(I4) == false && digitalRead(I5) == true && digitalRead(I6) == false)
                  {
                    SR = 352.8;
                  }
                  else if (digitalRead(I1) == false && digitalRead(I2) == false && digitalRead(I3) == false && digitalRead(I4) == true && digitalRead(I5) == false && digitalRead(I6) == true)
                    {
                      SR = 384;
                    }
  #endif WaveIO
}

void setup(void) {

  pinMode(I1, INPUT);
  digitalWrite(I1, LOW);
  pinMode(I2, INPUT);
  digitalWrite(I2, LOW);
  pinMode(I3, INPUT);
  digitalWrite(I3, LOW);
  pinMode(I4, INPUT);
  digitalWrite(I4, LOW);
  pinMode(I5, INPUT);
  digitalWrite(I5, LOW);
  pinMode(I6, INPUT);
  digitalWrite(I6, LOW);
  
  #ifdef ALLINPUTS
  pinMode(I7, INPUT);
  digitalWrite(I7, LOW);
  pinMode(I8, INPUT);
  digitalWrite(I8, LOW);
  pinMode(I9, INPUT);
  digitalWrite(I9, LOW);
  pinMode(I10, INPUT);
  digitalWrite(I10, LOW);
  #endif ALLINPUTS
  
  #ifdef TWOOUTPUTS
  pinMode(I7, INPUT);
  digitalWrite(I7, LOW);
  pinMode(I8, INPUT);
  digitalWrite(I8, LOW);
  pinMode(I9, OUTPUT);
  digitalWrite(I9, LOW);
  pinMode(I10, OUTPUT);
  digitalWrite(I10, LOW);
  #endif TWOOUTPUTS
  
  pinMode(POWERPIN, OUTPUT);
  digitalWrite(POWERPIN, LOW);
  
  x_dim = u8g.getWidth();
  y_dim = u8g.getHeight();
    
  Serial.begin(9600);
  
  #ifdef IRCONTROL
  irrecv.enableIRIn();                       // Start the IR receiver
  //Serial.println("IR on");
  poweron = false;
  #endif IRCONTROL
}

void loop()
{
  #ifdef IRCONTROL
  if (irrecv.decode(&results)) {            // If IR code is received, get the IR code.
    if (results.value == POWER_CODE) {      // What to do if the Power button is pressed
        //Serial.write("Power\n");
        if (poweron == false)                 // Check if already powered on
          {
            digitalWrite(POWERPIN, HIGH);
            poweron = true;
            display_power = true;
            unsigned long currentMillis = millis();
            if ((currentMillis - previousMillis) > source_disp_interval)
              {
                previousMillis = currentMillis;

                u8g.firstPage();                          // picture loop
                do {
                    disp_source();
                    } while(u8g.nextPage());
                display_SR = false;
                display_type = false;
                //Serial.println("displaying source");
                delay(2000);
              }
            else 
              {
                sourceold = source;
                display_SR = false;
              }  
          }
          else 
          {
            digitalWrite(POWERPIN, LOW);
            poweron = false;
            
            u8g.firstPage();                          // picture loop
              do {
                disp_power();
              } while(u8g.nextPage());
          }
    } 
    else if ((results.value == SOURCE1_CODE) && (poweron == true)) {      // What to do if the Source 1 button is pressed
        //Serial.write("Input 1\n");
        digitalWrite(I9, LOW);
        digitalWrite(I10, LOW);
        source = 0;
    }
    
    else if ((results.value == SOURCE2_CODE) && (poweron == true)) {      // What to do if the Source 2 button is pressed
        //Serial.write("Input 2\n");
        digitalWrite(I9, HIGH);
        digitalWrite(I10, HIGH);
        source = 1;
    }
       
    else {
      Serial.print("unexpected value: ");
      Serial.println(results.value, HEX);
   }
  irrecv.resume();                                 // Resume decoding (necessary!)
  }
  #endif IRCONTROL
  
  read_input();                              // Scan the USB Interface Module for changes in SR and/or format
     
  unsigned long currentMillis = millis();

      if ((source != sourceold) && ((currentMillis - previousMillis) > source_disp_interval) && (poweron == true))
        {
          previousMillis = currentMillis;

          u8g.firstPage();                          // picture loop
            do {
              disp_source();
            } while(u8g.nextPage());
          display_SR = false;
          display_type = false;
          //Serial.println("displaying source");
          delay(2000);
        }
      else 
      {
        sourceold = source;
        if ((source == 1) && (poweron == true))
        {
          display_SR = true;
        }
     }

      if ((type != typeold) && ((currentMillis - previousMillis) > source_disp_interval) && (poweron == true) && (source == 1))
        {
          previousMillis = currentMillis;

          u8g.firstPage();                          // picture loop
          do {
               disp_type();
             } while(u8g.nextPage());
             
          display_SR = false;
          //Serial.println("displaying type");
          delay(2000);
        }
      else 
      {
        typeold = type;
        if ((source == 1) && (poweron == true))
        {
          display_SR = true;
        }
     }
  
  if ((display_SR == true) && (poweron == true))
    {
      u8g.firstPage();                          // picture loop
      do {
        disp_SR();
      } while(u8g.nextPage());
    }
}

 

Denis95
Offline
Зарегистрирован: 07.07.2015
Помогите новичку. Рабочий код (по крайней мере так пишут в отзывах)
подсоединил две библиотеки
При компиляции выдает ошибку.
Что я делаю неправильно ?
Заранее спасибо.
 
Denis95
Offline
Зарегистрирован: 07.07.2015
 
 
Univ_USB2I2S_Indicator_v1.34.ino: In function 'void setup()':
Univ_USB2I2S_Indicator_v1.34:400: error: redefinition of 'void setup()'
sketch_jul07a:1: error: 'void setup()' previously defined here
Univ_USB2I2S_Indicator_v1.34.ino: In function 'void loop()':
Univ_USB2I2S_Indicator_v1.34:452: error: redefinition of 'void loop()'
sketch_jul07a:6: error: 'void loop()' previously defined here
Multiple libraries were found for "IRremote.h"
 
 Used: C:\Users\asus\Documents\Arduino\libraries\IRremote
 
 Not used: C:\Program Files (x86)\Arduino\libraries\RobotIRremote
 
redefinition of 'void setup()'
 
  
 
Arhat109
Offline
Зарегистрирован: 26.05.2015

Переопределение функции setup() в вашем скетче и библиотеке IRremote.

Встречал уже либы, в которых эта функция уже реализована и её втыкание в ваш скетч - не предусмотрено. Читайте чем заменена или как обходится без неё в инструкциях к этой библиотеке. Там всё должно быть.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

На RobotIRremote народ давно уже бочку катит.
Некоторые советуют её просто удалить

https://www.google.ru/?gws_rd=ssl#newwindow=1&q=C:\Program+Files+%28x86%29\Arduino\libraries\RobotIRremote

Клапауций 999
Offline
Зарегистрирован: 06.06.2015

trembo пишет:

На RobotIRremote народ давно уже бочку катит.

да, это не проблема библиотеки, а проблема метода, с помощью которого Ардуино ИДЕ ищет библиотеки:

казалось бы - нашли в папке IRremote библиотеку IRremote.h

Multiple libraries were found for "IRremote.h"
 
 Used: C:\Users\asus\Documents\Arduino\libraries\IRremote
 
НО!, какого хрена лезть во все папки *IRremote? ну, да! потому, что там есть ещё один экземпляр IRremote.h!
 
 Not used: C:\Program Files (x86)\Arduino\libraries\RobotIRremote
 
redefinition of 'void setup()'
Denis95
Offline
Зарегистрирован: 07.07.2015

Arduino: 1.6.5 (Windows 7), Board: "Arduino Nano, ATmega328"

 

Univ_USB2I2S_Indicator_v1.34.ino: In function 'void setup()':

Univ_USB2I2S_Indicator_v1.34:400: error: redefinition of 'void setup()'

sketch_jul07a:1: error: 'void setup()' previously defined here

Univ_USB2I2S_Indicator_v1.34.ino: In function 'void loop()':

Univ_USB2I2S_Indicator_v1.34:452: error: redefinition of 'void loop()'

sketch_jul07a:6: error: 'void loop()' previously defined here

redefinition of 'void setup()'

 

  This report would have more information with

  "Show verbose output during compilation"

  enabled in File > Preferences

убрал лишнюю библиотеку на IR, теперь ругается на библиотеку индикатора.
дубликата не обнаружил такой библиотеки
Denis95
Offline
Зарегистрирован: 07.07.2015

Все заработало, всем спасибо:)

Клапауций 999
Offline
Зарегистрирован: 06.06.2015

Denis95 пишет:

Все заработало, всем спасибо:)

и, шо было кроме ИРРемоте?

Denis95
Offline
Зарегистрирован: 07.07.2015

Клапауций 999 пишет:

Denis95 пишет:

Все заработало, всем спасибо:)

и, шо было кроме ИРРемоте?

при открытии редактора ардуино там были уже несколько строчек. оказывается нельзя было перетаскивать туда скетч, а сначала удалить эти две строчки, а потом открыть скетч командой открыть файл ,перетаскиванием скетч не работал

Arhat109
Offline
Зарегистрирован: 26.05.2015

Цитата:

sketch_jul07a:1: error: 'void setup()' previously defined here
Univ_USB2I2S_Indicator_v1.34.ino: In function 'void loop()':

Именно об этои и было в этих строчках, что я вам и написал в #3. Первая строка: "в СКЕТЧЕ есть оперделение функции setup(), которая уже была определена в либе ... а то что там две библиотеки -оно ваще-то не ругалось ни разу. :)