I tried to get it working with this year’s robot… I don’t think there is any good reason that it shouldn’t work… however I recommend applying the roboemu-specific changes to your code rather than trying to start with his files.
Two years ago, I hooked in some camera handlers to RoboEmu which basically used two of the analog or joystick sliders as center x and y coordinates of the camera blob.
void camera() {
data_rdy=0;
if (parse_mode==0) {
Serial_Char_Callback('A');
Serial_Char_Callback('C');
Serial_Char_Callback('K');
Serial_Char_Callback('\r');
} else {
Serial_Char_Callback('T');
Serial_Char_Callback((char)ana_ins[4]);
Serial_Char_Callback((char)ana_ins[5]);
Serial_Char_Callback((char)ana_ins[4]);
Serial_Char_Callback((char)ana_ins[5]);
Serial_Char_Callback((char)ana_ins[4]);
Serial_Char_Callback((char)ana_ins[5]);
Serial_Char_Callback((char)20);
Serial_Char_Callback((char)rc_dig_in18?90:0);
Serial_Char_Callback((char)ana_ins[6]);
Serial_Char_Callback((char)ana_ins[7]);
Serial_Char_Callback('\r');
}
}
all of those are analog inputs just getting fed directly back to the program, I believe, so they were easy to change in runtime and see how the code reacts…
Then, To hook up the camera, make your own copies of “Write_Serial_Port_Two” and “Read_Serial_Port_Two” to replace serial_ports.c and do some additional parsing to see whether the code expects an “ACK” after the command, or if it expects a “T” packet…
Again, this is a lot of work, but if you get it, it may be worthwhile.
For some reason, the auto box still comes greyed out… I think it works if you just enable it in the code, though he claimed “it tended to cause infinite loops.”
You might be able to think of a few other easier ways that could involve re_core and using something like the “user_display_mode” checkbox.
In addition, I added pot and encoder code by interpreting the motor output, for example:
hall_effect_add_1 = (pwm01-127)/4;
if (hall_effect_add_1<0)
hall_effect_add_1=-hall_effect_add_1;
hall_effect_add_2 = ((255-pwm02)-127)/4;
if (hall_effect_add_2<0)
hall_effect_add_2=-hall_effect_add_2;
arm_position_2+=(pwm03-127)/4;
arm_position_1+=(pwm04-127)/16;
if (arm_position_1<0)
arm_position_1=0;
if (arm_position_1>254)
arm_position_1=254;
if (arm_position_2<0)
arm_position_2=0;
if (arm_position_2>254)
arm_position_2=254;
}
/* And later in my update inputs function: */
for (i=0;i<hall_effect_add_1;++i) {
INTCON3bits.INT2IF=INTCON3bits.INT2IE=1;
InterruptHandlerLow ();
}
for (i=0;i<hall_effect_add_2;++i) {
INTCON3bits.INT3IF=INTCON3bits.INT3IE=1;
InterruptHandlerLow ();
}
ana_ins[0]=arm_position_1;
ana_ins[1]=arm_position_2;
Anyway, I really liked the idea of RoboEmu2, and it’s kind of sad that it’s just a little too hard to get working to be worthwhile in most cases.
If you get a nice and clean implementation of these features, I would be interested in seeing it (though in my case it was about as hacked up as you can get).