usar o arduino para enviar mensagens para o coolterm

como é que eu faço de maneira a que, por exemplo ao clicar num botao, acende me um led e mostra no display o numero, e ao mesmo tempo queria que aparecesse uma mensagem no coolterm.
ao contrario já fiz num outro trabalho.

#define OE2 8  //Atribui valor do nome constante ao pino digital 8
#define OE1 7  //Atribui valor do nome constante ao pino digital 7
#define LE2 10 //Atribui valor do nome constante ao pino digital 10
#define LE1 9  //Atribui valor do nome constante ao pino digital 9
#define Clear 11   //Atribui valor do nome constante ao pino digital 11
#define SClk 12   //Atribui valor do nome constante ao pino digital 12
#define SData 13   //Atribui valor do nome constante ao pino digital 13
#define FOSC 16000000 //clock speed
#define BAUD 9600 //taxa de transmissao
#define MYUBRR FOSC/16/BAUD-1 //
#define CR 13

void USART_Init(unsigned int ubrr){ // definir taxa de transmissão
  UBRR0H = (unsigned char)(ubrr>>8);
  UBRR0L = (unsigned char) ubrr; // Ativar receptor e transmissor
  UCSR0B = (1<<RXEN0)|(1<<TXEN0); // Definir o formato do quadro: 8 dados, bit de 2 paradas
  UCSR0C = (1<<USBS0)|(3<<UCSZ00);
  }
  
byte auxiliar = 0; 
byte contagem = 0;  // Definição e inicialização a zero da variável contagem

const int LED0 = 4;
const int LED1 = 5;
const int LED2 = 6;

int LED0state = HIGH;
int LED1state = HIGH;
int LED2state = HIGH;

#define Key0 A2
byte buttonState = 0;
byte lastbuttonState = 0;

#define Key1 A3
byte buttonState1 = 0;
byte lastbuttonState1 = 0;

#define Key2 A4
byte buttonState2 = 0;
byte lastbuttonState2 = 0;


unsigned long lastDebounceTime = 0;  // the last time the output pin was toggled
unsigned long debounceDelay = 20;    // the debounce time; increase if the output flickers

unsigned long lastDebounceTime1 = 0;  // the last time the output pin was toggled
unsigned long debounceDelay1 = 20;    // the debounce time; increase if the output flickers

unsigned long lastDebounceTime2 = 0;  // the last time the output pin was toggled
unsigned long debounceDelay2 = 20;    // the debounce time; increase if the output flickers

void setup() {
  USART_Init(MYUBRR);
  
  pinMode(Key0,INPUT);
  pinMode(Key1,INPUT);
  pinMode(Key2,INPUT);
  pinMode(OE2,OUTPUT);   //configuracao do pino digital OE2 como saída
  pinMode(OE1,OUTPUT);   //configuracao do pino digital OE1 como saída
  pinMode(LE2,OUTPUT);   //configuracao do pino digital LE2 como saída
  pinMode(LE1,OUTPUT);   //configuracao do pino digital LE1 como saída
  pinMode(Clear,OUTPUT);   //configuracao do pino digital Clear como saída
  pinMode(SClk,OUTPUT);   //configuracao do pino digital SClk como saída
  pinMode(SData,OUTPUT);   //configuracao do pino digital SData como saída
  digitalWrite(LE1, LOW);
  digitalWrite(OE1,HIGH);  //Desativa o display OE1 com valor lógico 1
  digitalWrite(OE2,HIGH);
  digitalWrite(Clear, OUTPUT);
  pinMode(LED0, OUTPUT); 
  pinMode(LED1, OUTPUT); 
  pinMode(LED2, OUTPUT);
  

  noInterrupts(); //disable all interrupts
   TCCR1A = B00000000;  //registo do modo de operação - normal 
   TCCR1B = B00000011;  //registo da fonte de clk interna com div 64 
   TCCR1C = B00000000;  //registo de ativação por interrupção do Timer1 

   TCNT1 = 53036;  // tempo de configuração do Timer 1 (53ms) 

   TIMSK1 = B00000001; //registo da ativação das interrupções do timer1 
   interrupts(); //ativa todas as interrupções 
   
}
  volatile byte Counter50ms = 0; //variável qualificadora, que é usada para modificar a forma como o compilador trata a variável
  volatile byte Counter50ms1 = 0; //variável qualificadora, que é usada para modificar a forma como o compilador trata a variável
  volatile byte Counter50ms2 = 0; //variável qualificadora, que é usada para modificar a forma como o compilador trata a variável
 
  ISR(TIMER1_OVF_vect){
  TCNT1 = 53036; // tempo de configuração do Timer 1 (50ms)
  Counter50ms++; // variável de contagem
  Counter50ms1++; //variável de contagem
  Counter50ms2++; //variável de contagem
 }
  
void loop() {
   if(auxiliar == 0){
    EnviarString();
    byte auxiliar = USART_Receive(); // atribuição da variavel
    Display7Seg(auxiliar-48);
   }
   

buttonState = digitalRead(Key0);
buttonState1 = digitalRead(Key1);
buttonState2 = digitalRead(Key2);

  
if(buttonState != lastbuttonState){
    lastDebounceTime = millis();
}

  if ((millis() - lastDebounceTime) > debounceDelay) {
    
    if (buttonState != lastbuttonState) {
        lastbuttonState = buttonState;
        
        if (buttonState == HIGH) {
          contagem++;
          digitalWrite(LED0,HIGH);
          Counter50ms = 0;
          Display7Seg(contagem);                         
          }
    }
  }


if(buttonState1 != lastbuttonState1){
    lastDebounceTime1 = millis();
}   
  if ((millis() - lastDebounceTime1) > debounceDelay1) {
    
    if (buttonState1 != lastbuttonState1) {
        lastbuttonState1 = buttonState1;
      
      if (buttonState1 == HIGH) {
          contagem--;
          digitalWrite(LED1,HIGH);
          Counter50ms1 = 0;
          Display7Seg(contagem);                          
          }
    }
   }
         
if(buttonState2 != lastbuttonState2){
    lastDebounceTime2 = millis();
}
     
   if ((millis() - lastDebounceTime2) > debounceDelay2) {
    
    if (buttonState2 != lastbuttonState2) {
      lastbuttonState2 = buttonState2;
      
      if (buttonState2 == HIGH) {
        digitalWrite(OE2,HIGH);   
        digitalWrite(LE2,LOW);
        shiftOut(13, 12, MSBFIRST, 0x86);
        digitalWrite(OE2,LOW);   //Ativa output enable com valor Low
        digitalWrite(LE2,HIGH);
        digitalWrite(LED0,HIGH);
        digitalWrite(LED1,HIGH);
        delay(1000);
        digitalWrite(LED0,LOW);
        digitalWrite(LED1,LOW);
        delay(1000);
        Counter50ms2 = 0;
        }
    }
  }
lastbuttonState = buttonState;
lastbuttonState1 = buttonState1;
lastbuttonState2 = buttonState2;

if(Counter50ms == 50){ 
 digitalWrite(LED0,LOW); 
 Counter50ms = 0;}
 if(Counter50ms1 == 50){
 digitalWrite(LED1, LOW); 
 Counter50ms1 = 0;}
 if(Counter50ms2 == 20){ 
 digitalWrite(LED2, LOW); 
 Counter50ms2 = 0;}
      
}
  void USART_Transmit( unsigned char data ){
  // Aguarda o buffer de transmissão vazio
  while ( !( UCSR0A & (1<<UDRE0)) );
  // Coloca dados no buffer, envia os dados
  UDR0 = data;
  }

  unsigned char USART_Receive( void ){
  //Aguarda a data ser recebida
  while ( !(UCSR0A & (1<<RXC0)) );
  //Obter e retornar dados recebidos do buffer
  return UDR0;
  }

  void EnviarString(){
  char string1[51] = "OLA CLICA ENTRE 0 E 9 PARA APARECER NO DISPLAY"; // criação da mensagem
  byte i; // função que armazena os bytes de i
  for(i=0;i<51;i++){ // criação da rotina
    USART_Transmit(string1[i]);  // chamar a função string
    }
    USART_Transmit(13); // da reset à posiçao do texto
    USART_Transmit(10); // indica o fim de uma linha de texto e da incio a uma nova
  }

void Display7Seg(byte valor){ 

  digitalWrite(OE2,HIGH);   
  digitalWrite(LE2,LOW);
  digitalWrite(Clear, HIGH);   
  if(valor == 0) shiftOut(13, 12, MSBFIRST, 0xC0); //Mostra o número 0 no display
  if(valor == 1) shiftOut(13, 12, MSBFIRST, 0xF9); //Mostra o número 1 no display
  if(valor == 2) shiftOut(13, 12, MSBFIRST, 0xA4); //Mostra o número 2 no display
  if(valor == 3) shiftOut(13, 12, MSBFIRST, 0xB0); //Mostra o número 3 no display
  if(valor == 4) shiftOut(13, 12, MSBFIRST, 0x99); //Mostra o número 4 no display
  if(valor == 5) shiftOut(13, 12, MSBFIRST, 0x92); //Mostra o número 5 no display
  if(valor == 6) shiftOut(13, 12, MSBFIRST, 0x82); //Mostra o número 6 no display
  if(valor == 7) shiftOut(13, 12, MSBFIRST, 0xF8); //Mostra o número 7 no display
  if(valor == 8) shiftOut(13, 12, MSBFIRST, 0x80); //Mostra o número 8 no display
  if(valor >= 9) shiftOut(13, 12, MSBFIRST, 0xC7); //Mostra o número 9 no display
  digitalWrite(OE2,LOW);   //Ativa output enable com valor Low
  digitalWrite(LE2,HIGH);   //Ativa RCLK Input Com valor High
}

a parte que deve ser para alterar é na zona do void loop onde está "enviarstring" juntamente com a variavel auxiliar.

Isto compila??

Porque tu tens duas variáveis chamadas auxiliar...

Uma logo no inicio do programa e outra dentro do loop:

   if(auxiliar == 0){
    EnviarString();
    byte auxiliar = USART_Receive(); // atribuição da variavel
    Display7Seg(auxiliar-48);
   }

Já pensaste em apagar a palavra byte do excerto que coloquei em cima?