asd

asd


uint8_t index = 0;

uint8_t tx_index = 0;

uint8_t TX_Buffer[] = {0x41,0x49,0x44,0x53,0x13,0,0,0,0,0,'\n'};

uint8_t RX_Buffer[] = {0,0,0,0,0};

uint8_t RV_Buffer[] = {0,0,0,0,0};

double value = 0;

double value_old = 0;

double winkel = 0;

char fnum[20];

#include <math.h>


void portconfig(){

 UBRR0H = 0;

 UBRR0L = 103;  

 DDRB |= (1<<PB5);

 DDRB |= (1<<PB3);

 UCSR0B |= (1<<RXEN0);

 UCSR0B |= (1<<RXCIE0);

 sei();

 TCCR1B = (1<<CS12)|(1<<WGM12);

 OCR1A = 62500;

 TIMSK1 = (1<<OCIE1A);

 

}


 int parseint(uint8_t number[]){

   

  int numbersize = 5;

  int result = 0;

  boolean dotoccured = false;

  int nachkomma = 0;

   

  for (int x= 0; x<numbersize; x++){

    

   //checks if the char is betwenn "0" and "9"

   if (number[x]>=0x31 && number[x] <= 0x39){

     

    result = result*10 + number[x]-0x30;

     

    if ( dotoccured)

     ++nachkomma;

     

   }

   else{

    if(number[x] == '.' || number[x] == ','){

     dotoccured = true;

    }

   }

  }

  result = result / pow(10,nachkomma);

   

  return result;

 }

  

int main(){

 value_old = value;

 portconfig();

 while(1){

  UCSR0B |= (1<<RXEN0);

  if (value_old != value){

   PORTB ^= (1<<PB3);

   UCSR0B |= (1<<TXEN0);

   tx_index = 0;

   UDR0 = TX_Buffer[tx_index++];

   UCSR0B &= ~(1<<RXCIE0);

   UCSR0B |= (1<<TXCIE0);

   value_old = value;

  }

 }

 

  

}



ISR(USART_RX_vect){

  

 uint8_t read_byte = UDR0;

 value = parseint(RV_Buffer);

 winkel = value * 90;

 PORTB = (1<<PB5);


 TX_Buffer[5] = RV_Buffer[0];

 TX_Buffer[6] = RV_Buffer[1];

 TX_Buffer[7] = RV_Buffer[2];

 TX_Buffer[8] = RV_Buffer[3];

 TX_Buffer[9] = RV_Buffer[4];

  


 if(index>5 || read_byte == 13){

  RX_Buffer[0] = 0;

  RX_Buffer[1] = 0;

  RX_Buffer[2] = 0;

  RX_Buffer[3] = 0;

  RX_Buffer[4] = 0;

  index = 0;

 }


 if(read_byte!='!'&&read_byte!=13){

  RX_Buffer[index] = read_byte;

  index++;

 }

 if(read_byte == '!'){

  PORTB ^= (1<<PB5);

  UCSR0B &= ~(1<<RXEN0);

  RV_Buffer[0] = RX_Buffer[0];

  RV_Buffer[1] = RX_Buffer[1];

  RV_Buffer[2] = RX_Buffer[2];

  RV_Buffer[3] = RX_Buffer[3];

  RV_Buffer[4] = RX_Buffer[4];

  RX_Buffer[0] = 0;

  RX_Buffer[1] = 0;

  RX_Buffer[2] = 0;

  RX_Buffer[3] = 0;

  RX_Buffer[4] = 0;

 }


}


ISR(USART_TX_vect){

  if(tx_index>10){

  UCSR0B |= (1<<RXEN0);

  UCSR0B &= ~(1<<TXEN0);

  UCSR0B |= (1<<RXCIE0);

  UCSR0B &= ~(1<<TXCIE0);

  

  }

 //UDR0 = fnum[tx_index++];

  UDR0 = TX_Buffer[tx_index++];

   

}

Report Page