Minggu, 21 Desember 2008
Robo_Tiko
Robo Tiko ini sudah memakai logika PID, walau terlihat laju tapi masih gagal untuk menang.
berikut adalah sebagian dari code saya:
void kond_sensor() //kondisi sensor
{
if (adc[0] > bts[0]) {sens |= 0b00000001;}
else {sens &= 0b11111110;};
if (adc[1] > bts[1]) {sens |= 0b00000010;}
else {sens &= 0b11111101;};
if (adc[2] > bts[2]) {sens |= 0b00000100;}
else {sens &= 0b11111011;};
if (adc[3] > bts[3]) {sens |= 0b00001000;}
else {sens &= 0b11110111;};
if (adc[4] > bts[4]) {sens |= 0b00010000;}
else {sens &= 0b11101111;};
if (adc[5] > bts[5]) {sens |= 0b00100000;}
else {sens &= 0b11011111;};
if (adc[6] > bts[6]) {sens |= 0b01000000;}
else {sens &= 0b10111111;};
if (adc[7] > bts[7]) {sens |= 0b10000000;}
else {sens &= 0b01111111;};
}
void nil_error() //kesetaraan nilai error
{
switch (sensor)
{
case 0b00000100: error=35; break;
case 0b00000101: error=24; break;
case 0b00000110: error=48; break;
case 0b00000111: error=35; break;
case 0b00001000: error=15; break;
case 0b00001001: error=8; break;
case 0b00001010: error=24; break;
case 0b00001011: error=15; break;
case 0b00001100: error=24; break;
case 0b00001101: error=15; break;
case 0b00001110: error=35; break;
case 0b00001111: error=24; break;
case 0b00010000: error=3; break;
case 0b00010001: error=0; break;
case 0b00010010: error=8; break;
case 0b00010011: error=3; break;
case 0b00011000: error=8; break;
case 0b00011001: error=3; break;
case 0b00011010: error=15; break;
case 0b00011011: error=8; break;
case 0b00011100: error=15; break;
case 0b00011101: error=8; break;
case 0b00011110: error=24; break;
case 0b00011111: error=15; break;
case 0b00100000: error=-3; break;
case 0b00100001: error=-8; break;
case 0b00100010: error=0; break;
case 0b00100011: error=-3; break;
case 0b00110000: error=0; break;
case 0b00110001: error=-3; break;
case 0b00110010: error=3; break;
case 0b00110011: error=0; break;
case 0b00111000: error=3; break;
case 0b00111001: error=0; break;
case 0b00111010: error=8; break;
case 0b00111011: error=3; break;
case 0b00111100: error=15; break;
case 0b00111101: error=8; break;
case 0b00111110: error=35; break;
case 0b00111111: error=15; break;
case 0b01000000: error=-15; break;
case 0b01000001: error=-24; break;
case 0b01000010: error=-8; break;
case 0b01000011: error=-15; break;
case 0b01100000: error=-8; break;
case 0b01100001: error=-15; break;
case 0b01100010: error=-3; break;
case 0b01100011: error=-8; break;
case 0b01110000: error=-3; break;
case 0b01110001: error=-8; break;
case 0b01110010: error=0; break;
case 0b01110011: error=-3; break;
case 0b01111000: error=0; break;
case 0b01111001: error=-3; break;
case 0b01111010: error=3; break;
case 0b01111011: error=0; break;
case 0b01111100: error=3; break;
case 0b01111101: error=-3; break;
case 0b01111110: error=3; break;
case 0b01111111: error=0; break;
case 0b10000000: error=-35; break;
case 0b10000001: error=-48; break;
case 0b10000010: error=-24; break;
case 0b10000011: error=-35; break;
case 0b11000000: error=-24; break;
case 0b11000001: error=-35; break;
case 0b11000010: error=-15; break;
case 0b11000011: error=-24; break;
case 0b11100000: error=-15; break;
case 0b11100001: error=-24; break;
case 0b11100010: error=-8; break;
case 0b11100011: error=-15; break;
case 0b11110000: error=-8; break;
case 0b11110001: error=-15; break;
case 0b11110010: error=-3; break;
case 0b11110011: error=-8; break;
case 0b11111000: error=-3; break;
case 0b11111001: error=-8; break;
case 0b11111010: error=0; break;
case 0b11111011: error=-3; break;
case 0b11111100: error=0; break;
case 0b11111101: error=-3; break;
case 0b11111110: error=3; break;
case 0b11111111: error=0; break;
};
}
void pid() //pengolahan PID
{
// Kp Kk Kd
nil_kan=(int)(((-error)* (((kp)))) +ts)-((error-error1)* (((kd))));
nil_kir=(int)((( error)* (((kp)))) +ts)+((error-error1)* (((kd))));
error1=error;
}
void keluarkan() //pengeluaran
{
if (nil_kan >255) {kanan =255; arah.2=0; arah.3=1; goto akhir_kan;};
if (nil_kan >=0) {kanan =nil_kan; arah.2=0; arah.3=1; goto akhir_kan;};
if (nil_kan <-255) {kanan =255; arah.2=1; arah.3=0; goto akhir_kan;};
if (nil_kan <0) {kanan =(-nil_kan); arah.2=1; arah.3=0; goto akhir_kan;};
akhir_kan:
if (nil_kir >255) {kiri =255; arah.6=1; arah.7=0; goto akhir_kir;};
if (nil_kir >=0) {kiri =nil_kir; arah.6=1; arah.7=0; goto akhir_kir;};
if (nil_kir <-255) {kiri =255; arah.6=0; arah.7=1; goto akhir_kir;};
if (nil_kir <0) {kiri =(-nil_kir); arah.6=0; arah.7=1; goto akhir_kir;};
akhir_kir:
}
Langganan:
Postingan (Atom)