void setdeg(int8_t x1signed,uint8_t x2,uint8_t x3, uint8_t *alpha1, uint8_t *alpha2, uint8_t *alpha3){ uint8_t x1,a1,a2,a2m,a2p,a3, neg = 0; float ds,d12,d123; uint8_t os = 130, us = 150, s = 28; if(x1signed < 0){ x1 = (uint8_t)(x1signed * (-1)) * 2; neg = 1; }else{ x1 = (uint8_t)x1signed * 2; } d12 = (float)sqrt((float)((uint32_t)(uint16_t)(x1*x1) + (uint32_t)(uint16_t)(x2*x2))); a1 = arccos1024flash((uint16_t)(((x2*256)/d12)*4), arccostab1024flash); if(a1 <= 10){ a1 = arccos4096flashmini((uint16_t)(((uint32_t)x2*4096)/d12), arccostab4096flashmini); } ds = d12 - s; d123 = (float)sqrt((float)(ds*ds + (uint32_t)(uint16_t)(x3*x3))); a2m = arccos1024flash((uint16_t)((ds*128/d123)*8), arccostab1024flash); if(a2m <= 10){ a2m = arccos4096flashmini((uint16_t)(ds*4096/d123), arccostab4096flashmini); } a2p = arccos1024flash((uint16_t)(((uint16_t)(os*os)+d123*d123-(uint16_t)(us*us))*514/(os*d123)), arccostab1024flash); if(a2p <= 10){ a2p = arccos4096flashmini((uint16_t)(((uint16_t)(os*os)+d123*d123-(uint16_t)(us*us))*2048/(os*d123)), arccostab4096flashmini); } a2 = a2p - a2m; a3 = arccos1024flash((uint16_t)(((uint16_t)(us*us)+(uint16_t)(os*os)-d123*d123)*514/((uint16_t)(us*os))), arccostab1024flash); if(a3 <= 10){ a3 = arccos4096flashmini((uint16_t)(((uint16_t)(us*us)+(uint16_t)(os*os)-d123*d123)*2048/((uint16_t)(us*os))), arccostab4096flashmini); } /* char buf[7]; ultoa(d123, buf, 10); lcd_string(buf); lcd_string(" "); ltoa(((uint16_t)us*us+(uint16_t)os*os-(int32_t)d123*d123)*514u/((uint16_t)us*os), buf, 10); lcd_string(buf); lcd_string(" "); itoa(a3, buf, 10); lcd_string(buf); lcd_string(" "); */ if(neg){ a1 = 90 - a1; }else{ a1 += 90; } a2 += 90; *alpha1 = a1; *alpha2 = a2; *alpha3 = a3; }