Stap 3: De Software - analyseren
1) positie van de stok van ontvanger gelezen
3) control servo
2) controle ESC
Voor dit voorstel zullen we gebruiken test setup vermeld op pagina 2. De onderdelen zijn:
1) android IOIO met schild vanaf pagina 2.
2) ontvanger aangesloten op de digitale pennen 3-7
3) ESC verbonden met pin terminal 10
4) servo aangesloten op pin terminal 11
Mijn ESC omvat BEC, dat u kunt opgeven IOIO bestuur formulier verbonden ESC. In dit geval zwart Lemper op onze schild zal worden gelegd op de linkerzijde, VIN pin aan boord van de IOIO zal worden aangesloten op de servo terminals (ESC levert IOIO board).
Voor de ontwikkeling van de software moet u standaard Android ontwikkelomgeving installeren en IOIO bibliotheken in uw project opnemen. U vindt tutorial hier: https://www.sparkfun.com/tutorials/280 en doc umentation voor Android IOIO project hier: https://github.com/ytai/ioio/wiki
Onze test applicatie hebben eenvoudige gui, zullen we:
2 x schuifregelaar control servo en ESC (controle van de PWM pinnen 10, 11)
5 x weergegeven: labelwaarden van ontvanger (reed pulsbreedte op pennen 3-7)
Android IOIO biedt Pulse Input. Dit type van input kunt u lezen breedte van inkomende puls, zodat haar ideaal voor lezing formulier ontvanger pulsen. IOIO hebben 6 beschikbaar zijn (3 enkele precisie, dubbele precisie 3) u kunt één 6 of 6 dubbele precisie, moet u ze splitsen. PWM zullen we gebruiken voor het besturen van de sociaal-economische raden en servo's. U kunt functies vinden voor elk individu pin hier https://github.com/ytai/ioio/wiki/Getting-To-Know-The-Board
Deze test app hebben relay eenvoudige code:
openbare klasse MainActivity breidt IOIOActivity {}
privé TextView ch1, ch2, ch3, ch4, H5;
privé SeekBar seekBar1, seekBar2;
private int seekBar1_val, seekBar2_val;
beschermd nietig onCreate(Bundle savedInstanceState) {}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
CH1=(TextView)findViewById(R.id.ch1_text);
CH2=(TextView)findViewById(R.id.ch2_text);
CH3=(TextView)findViewById(R.id.ch3_text);
CH4=(TextView)findViewById(R.id.ch4_text);
CH5=(TextView)findViewById(R.id.ch5_text);
seekBar1 = (SeekBar) findViewById(R.id.seekBar1);
seekBar2 = (SeekBar) findViewById(R.id.seekBar2);
seekBar1_val = 1000;
seekBar2_val = 1500;
seekBar1.setMax(1000);
seekBar2.setMax(1000);
seekBar2.setProgress(500);
seekBar1.setOnSeekBarChangeListener (nieuwe OnSeekBarChangeListener() {}
openbare nietige onStopTrackingTouch (SeekBar seekBar) {}
}
openbare nietige onStartTrackingTouch (SeekBar seekBar) {}
}
public void onProgressChanged (int vooruitgang, SeekBar seekBar, Booleaanse fromUser) {}
seekBar1_val = vooruitgang + 1000;
}
});
seekBar2.setOnSeekBarChangeListener (nieuwe OnSeekBarChangeListener() {}
openbare nietige onStopTrackingTouch (SeekBar seekBar) {}
}
openbare nietige onStartTrackingTouch (SeekBar seekBar) {}
}
public void onProgressChanged (int vooruitgang, SeekBar seekBar, Booleaanse fromUser) {}
seekBar2_val = vooruitgang + 1000;
}
});
}
openbare Booleaanse onCreateOptionsMenu (Menu menu) {}
Opblazen van het menu; Dit items toegevoegd aan de action bar als dit aanwezig is.
getMenuInflater () .inflate (R.menu.main, menu);
return true;
}
klasse Looper breidt BaseIOIOLooper {}
privé PulseInput pulse_ch1;
privé PulseInput pulse_ch2;
privé PulseInput pulse_ch3;
privé PulseInput pulse_ch4;
privé PulseInput pulse_ch5;
privé PwmOutput M1;
privé PwmOutput Servo;
openbare Float ch1_val;
openbare Float ch2_val;
openbare Float ch3_val;
openbare Float ch4_val;
openbare Float ch5_val;
privé DigitalOutput led_;
beschermde void setup gooit ConnectionLostException {}
pulse_ch1 = ioio_.openPulseInput (3, PulseMode.POSITIVE);
pulse_ch2 = ioio_.openPulseInput (4, PulseMode.POSITIVE);
pulse_ch3 = ioio_.openPulseInput (5, PulseMode.POSITIVE);
pulse_ch4 = ioio_.openPulseInput (nieuwe DigitalInput.Spec(6),
PulseInput.ClockRate.RATE_250KHz,
PulseInput.PulseMode.POSITIVE,
False);
pulse_ch5 = ioio_.openPulseInput (nieuwe DigitalInput.Spec(7),
PulseInput.ClockRate.RATE_250KHz,
PulseInput.PulseMode.POSITIVE,
False);
M1 = ioio_.openPwmOutput (10, 50);
Servo = ioio_.openPwmOutput (11, 50);
led_ = ioio_.openDigitalOutput (0, true);
}
public void loop gooit ConnectionLostException {}
led_.write(false);
Probeer {}
ch1_val = pulse_ch1.getDuration() * 1000;
ch2_val = pulse_ch2.getDuration() * 1000;
ch3_val = pulse_ch3.getDuration() * 1000;
ch4_val = pulse_ch4.getDuration() * 1000;
ch5_val = pulse_ch5.getDuration() * 1000;
M1.setPulseWidth(seekBar1_val);
Servo.setPulseWidth(seekBar2_val);
Thread.Sleep(100);
} vangst (InterruptedException e) {}
}
runOnUiThread (nieuwe Runnable() {}
openbare nietige run() {}
CH1.SetText (String.format ("%.2f", ch1_val));
CH2.SetText (String.format ("%.2f", ch2_val));
CH3.SetText (String.format ("%.2f", ch3_val));
CH4.SetText (String.format ("%.2f", ch4_val));
CH5.SetText (String.format ("%.2f", ch5_val));
}
});
}
}
beschermde IOIOLooper createIOIOLooper() {}
retourneren van nieuwe Looper();
}
}
Onze analyse ging goed, dat we kunnen:
1) Lees stick positie van receiver via digitale ingangen
3) control servo
2) controle ESC
Test video: