attiny85 sleep mode e connessione rf

Salve a tutti, ultimamente mi sono imbattuto in un progetto che consisteva nel trasmettere con un attiny85 dei numeri ad un arduino uno, avendo monitorato i consumi ho deciso di usare la modalità sleep con relativo watchdog sull'attiny, solo che quando compilo il codice per trasferirlo su di esso il programma mi da un errore.
questo è il codice che cerco di caricare sull'attiny:

#include <avr/sleep.h>
#include <avr/wdt.h>
#include <VirtualWire.h>
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
const int TX_DIO_Pin = 0;
int pinLed = 1;
volatile boolean f_wdt = 1;
#include <VirtualWire.h>

void setup(){
  
  pinMode(pinLed,OUTPUT);
  setup_watchdog(8);
  void initialize_transmitter() {
      /* Initialises the DIO pin used to send data to the Tx module */
      vw_set_tx_pin(TX_DIO_Pin);
      /* Set the transmit logic level (LOW = transmit for this version of module)*/ 
      vw_set_ptt_inverted(true); 
      
      /* Transmit at 2000 bits per second */
      vw_setup(2000);    // Bits per sec
    }
    
    void transmit_integer(unsigned int Data) {
      /* The transmit buffer that will hold the data to be 
         transmitted. */
      byte TxBuffer[2];
      /* ...and store it as high and low bytes in the transmit 
         buffer */
      TxBuffer[0] = Data >> 8;
      TxBuffer[1] = Data;
      
      /* Send the data (2 bytes) */
      vw_send((byte *)TxBuffer, 2);
      /* Wait until the data has been sent */
      vw_wait_tx();
    }

   initialize_transmitter();// approximately 4 seconds sleep
}

void loop(){
  if (f_wdt==1) {  // wait for timed out watchdog / flag is set when a watchdog timeout occurs
    f_wdt=0; 
    int counter;
      for(counter=0; counter<100; counter++) {
          transmit_integer(counter);
        delay(200);// reset flag

   
    system_sleep();
    pinMode(pinLed,OUTPUT); // set all ports into state before sleep
  }
}
void initialize_transmitter() {
      /* Initialises the DIO pin used to send data to the Tx module */
      vw_set_tx_pin(TX_DIO_Pin);
      /* Set the transmit logic level (LOW = transmit for this version of module)*/ 
      vw_set_ptt_inverted(true); 
      
      /* Transmit at 2000 bits per second */
      vw_setup(2000);    // Bits per sec
    }
    
    void transmit_integer(unsigned int Data) {
      /* The transmit buffer that will hold the data to be 
         transmitted. */
      byte TxBuffer[2];
      /* ...and store it as high and low bytes in the transmit 
         buffer */
      TxBuffer[0] = Data >> 8;
      TxBuffer[1] = Data;
      
      /* Send the data (2 bytes) */
      vw_send((byte *)TxBuffer, 2);
      /* Wait until the data has been sent */
      vw_wait_tx();
    }

// set system into the sleep state 
// system wakes up when wtchdog is timed out
void system_sleep() {
  cbi(ADCSRA,ADEN);                    // switch Analog to Digitalconverter OFF

  set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here
  sleep_enable();

  sleep_mode();                        // System sleeps here

  sleep_disable();                     // System continues execution here when watchdog timed out 
  sbi(ADCSRA,ADEN);                    // switch Analog to Digitalconverter ON
}

// 0=16ms, 1=32ms,2=64ms,3=128ms,4=250ms,5=500ms
// 6=1 sec,7=2 sec, 8=4 sec, 9= 8sec
void setup_watchdog(int ii) {

  byte bb;
  int ww;
  if (ii > 9 ) ii=9;
  bb=ii & 7;
  if (ii > 7) bb|= (1<<5);
  bb|= (1<<WDCE);
  ww=bb;

  MCUSR &= ~(1<<WDRF);
  // start timed sequence
  WDTCR |= (1<<WDCE) | (1<<WDE);
  // set new watchdog timeout value
  WDTCR = bb;
  WDTCR |= _BV(WDIE);
}
  
// Watchdog Interrupt Service / is executed when watchdog timed out
ISR(WDT_vect) {
  f_wdt=1;  // set global flag
}

ci tengo a precisare che non sono un esperto in materia e che quindi di conseguenza ho unito il codice del trasmettitore ( compilato con la libreria virtalwire) a quello della modalità sleep, solo che quando compilo il codice mi da l'errore "'setup_watchdog' was not declared in this scope" riferendosi alla istruzione dichiarata nel void setup,e se cambio l'ordine della istruzione con "initialize_transmitter();" (sempre all'interno del void setup) il programma mi da l'errore "initialize_transmitter was not declared in this scope"
qualcuno puo aiutarmi? magari le due librerie vanno in conflitto, aspetto risposte, grazie ancora

Non puoi avere una funzione all'interno di un'altra !

Togli dal setup() le funzioni: "void initialize_transmitter()" e "void transmit_integer(unsigned int Data)", che sono già definite fuori, dopo il loop().

Guglielmo