modbus/kraftsensor cleanup

master
Eggert Jung 3 years ago
parent 2f5f57546a
commit 4ba5a3c39f

@ -29,10 +29,7 @@ void kraftsensor_init(){
} }
void do_kraftsensor(){ void do_kraftsensor(){
static int32_t last_read;
static int32_t old_value;
uint16_t m_data[4]; uint16_t m_data[4];
int32_t kraftsensor_read;
/* read 2 16bit values and merge to 32bit signed integer */ /* read 2 16bit values and merge to 32bit signed integer */
readReg(1,0,2); readReg(1,0,2);
@ -45,31 +42,12 @@ void do_kraftsensor(){
int32_t tmp = (uint32_t)m_data[1]<<16; int32_t tmp = (uint32_t)m_data[1]<<16;
tmp |= m_data[0]; tmp |= m_data[0];
//kraftsensor_value = tmp;
/* conversion magic to milliNewton */ /* conversion magic to milliNewton */
kraftsensor_value = (((tmp /* + 539363*/)*9.81)/177.380)+kraftsensor_zero_offset; kraftsensor_value = (((tmp /* + 539363*/)*9.81)/177.380)+kraftsensor_zero_offset;
//if(abs(kraftsensor_read - old_value) > 10000){
// if(abs(last_read - kraftsensor_read) > 10000){
// kraftsensor_value = old_value;
// //printf("delta: %ld\tvalue:%ld\n", kraftsensor_read - old_value, kraftsensor_read);
// //printf("spike\n");
// }
// else{
// kraftsensor_value = kraftsensor_read;
// //printf("jump\n");
// }
//}
//else{
// kraftsensor_value = kraftsensor_read;
//}
//last_read = kraftsensor_read;
//old_value = kraftsensor_value;
} }
} }
uint8_t wait_receive(uint8_t len, uint16_t dest[], uint8_t timeout){ int8_t wait_receive(uint8_t len, uint16_t dest[], uint8_t timeout){
uint8_t breaker = timeout; uint8_t breaker = timeout;
while(!receiveOkay && breaker) { //wait for client response, time out after 1s while(!receiveOkay && breaker) { //wait for client response, time out after 1s
@ -94,6 +72,23 @@ uint8_t wait_receive(uint8_t len, uint16_t dest[], uint8_t timeout){
return 0; return 0;
} }
int8_t wait_write(uint8_t timeout){
uint8_t breaker = timeout;
while(!receiveOkay && breaker) { //wait for client response, time out after 1s
breaker--;
_delay_ms(1);
if(breaker==0)
return -1;
}
if(receiveOkay) { //if this fails, there was either no response or a crc error
if(rxbuffer[1]&0x80) { //client responded with an error code
return rxbuffer[1]&0x80;
}
}
return 0;
}
void readReg(uint8_t slaveid, uint16_t address, uint8_t amount) { void readReg(uint8_t slaveid, uint16_t address, uint8_t amount) {
_delay_ms(2); _delay_ms(2);
rxbuffer[0]=slaveid; rxbuffer[0]=slaveid;

@ -13,7 +13,7 @@ extern int32_t kraftsensor_zero_offset;
void timer2_init(); void timer2_init();
void kraftsensor_init(); void kraftsensor_init();
void do_kraftsensor(void); void do_kraftsensor(void);
uint8_t wait_receive(uint8_t len, uint16_t dest[], uint8_t timeout); int8_t wait_receive(uint8_t len, uint16_t dest[], uint8_t timeout);
void readReg(uint8_t slaveid, uint16_t address, uint8_t amount); void readReg(uint8_t slaveid, uint16_t address, uint8_t amount);
void writeReg(uint8_t slaveid, uint16_t address, uint16_t value); void writeReg(uint8_t slaveid, uint16_t address, uint16_t value);