Processorn jag använder är en 16F628A. såhär ser koden i uC'n ut:
Kod: Markera allt
//Variabler för datapaket
unsigned short pak_action = 0b00000001;
unsigned short pak_value = 0xb6; //oxb6(59) - 0xb6(182)
unsigned short pak_reday = 0x00;
//Variabler för servo vinklar
unsigned short J0_angle = 0x6b;
unsigned short J1_angle = 0xb6;
unsigned short J2_angle = 0xb6;
unsigned short J3_angle = 0xb6;
unsigned short J4_angle = 0xb6;
//Övriga variabler
unsigned int cnt = 0;
void main(void)
{
//I/O settings
TRISA = 0x00;
PORTA = 0x00;
Usart_Init(2400); //Init usart
while(1)
{
//Hämta data
while(Usart_Data_Ready() == 0); //Vänta på data
J0_angle = Usart_Read(); //Tilldela värde
while(Usart_Data_Ready() == 0); //Vänta på data
J1_angle = Usart_Read(); //Tilldela värde
while(Usart_Data_Ready() == 0); //Vänta på data
J2_angle = Usart_Read(); //Tilldela värde
while(Usart_Data_Ready() == 0); //Vänta på data
J3_angle = Usart_Read(); //Tilldela värde
while(Usart_Data_Ready() == 0); //Vänta på data
J4_angle = Usart_Read(); //Tilldela värde/
while(Usart_Data_Ready() == 0)
{
//Starta motorerna
while(J0_angle >= cnt) {
PORTA |= 0b00000001;
cnt++;
}
PORTA = 0;
cnt = 0;
while(J1_angle >= cnt) {
PORTA |= 0b00000010;
cnt++;
}
PORTA = 0;
cnt = 0;
while(J2_angle >= cnt) {
PORTA |= 0b00000100;
cnt++;
}
PORTA = 0;
cnt = 0;
while(J3_angle >= cnt) {
PORTA |= 0b00001000;
cnt++;
}
PORTA = 0;
cnt = 0;
while(J4_angle >= cnt) {
PORTA |= 0b10000000;
cnt++;
}
PORTA = 0;
cnt = 0;
delay_ms(10);
}
}
}
Kod: Markera allt
...
void EnterPosition(void)
{
int J0_angle = 0;
int J1_angle = 0;
int J2_angle = 0;
int J3_angle = 0;
int J4_angle = 0;
system("CLS");
cout<<"All values 0-100"<<endl;
cout<<"Enter angle for J0: ";
cin>>J0_angle;
while((J0_angle > 10000) || (J0_angle < 0))
{
cout<<"You have enterd an invaild number."<<endl<<"Enter a new one: ";
cin>>J0_angle;
}
cout<<"Enter angle for J1: ";
cin>>J1_angle;
while((J1_angle > 10000) || (J1_angle < 0))
{
cout<<"You have enterd an invaild number."<<endl<<"Enter a new one: ";
cin>>J1_angle;
}
cout<<"Enter angle for J2: ";
cin>>J2_angle;
while((J2_angle > 10000) || (J2_angle < 0))
{
cout<<"You have enterd an invaild number."<<endl<<"Enter a new one: ";
cin>>J2_angle;
}
cout<<"Enter angle for J3: ";
cin>>J3_angle;
while((J3_angle > 10000) || (J3_angle < 0))
{
cout<<"You have enterd an invaild number."<<endl<<"Enter a new one: ";
cin>>J3_angle;
}
cout<<"Enter angle for J4: ";
cin>>J4_angle;
while((J4_angle > 10000) || (J4_angle < 0))
{
cout<<"You have enterd an invaild number."<<endl<<"Enter a new one: ";
cin>>J4_angle;
}
COMPort aPort ("COM1");
aPort.setBitRate (COMPort::br2400);
aPort.setParity (COMPort::None);
aPort.setDataBits (COMPort::db8);
aPort.setStopBits (COMPort::sb1);
aPort.write(J0_angle);
Sleep(1);
aPort.write(J1_angle);
Sleep(1);
aPort.write(J2_angle);
Sleep(1);
aPort.write(J3_angle);
Sleep(1);
aPort.write(J4_angle);
system("CLS");
}
...
Kod: Markera allt
//Rad 36
while(Usart_Data_Ready() == 0)
{
Kan man byta ut det villkoret mot något annat, någon som har något förslag?
MVH
Kalf