tommy писал(а):
суровые свитчи, блин. и работа с битами отправки тож бескомпромиссная
в milesI передаются сначала старшие. возможно, что и в II тож старшие вперёд.
И бессмысленные. Гораздо проще работать с индексами массивов чем с enum и потом switch
GunDamage[16] = {1,2,4,5,7,10,15,17,20,25,30,35,40,50,75,100} индекс массива определяет уровень ущерба
можно и символьные имена добавить
enum GunDamage { Damage_1, Damage_2, Damage_4, Damage_5,
Damage_7, Damage_10, Damage_15, Damage_17,
Damage_20, Damage_25, Damage_30, Damage_35,
Damage_40, Damage_50, Damage_75, Damage_100 };
и обращаться к массиву не по индексу а по нумерованному символьному имени. Тогда отпадает необходимость в длинных switch
В итоге подготовка даннах к выстрелу будет представлять из себя
unsigned char TeamColor; // Цвет команды
unsigned char id_gamer // Номер игрока в команде
unsigned char SourceDamage] // Номер индекса уровня поражения
unsigned char bufer_ir_tx[2] // Буфер данных излучателя
// Процедура подготовки данных для выстрела
void load_tx_data( void )
{
bufer_ir_tx[0] = id_gamer;
bufer_ir_tx[1] = TeamColor;
bufer_ir_tx[1] = bufer_ir_tx[1] << 4;
bufer_ir_tx[1] += GunDamage[ SourceDamage ];
bufer_ir_tx[1] = bufer_ir_tx[1] << 2;
}/*
Данные готовы можно отправлять указатель на буфер данных излучателя
и методом сдвига влево передаем сначало 8 бит даныых из масиива по индексу [0] а затем
6 байт из массива по индексу [1]
*/
Можно еще проще. Прямо ничего не формировать а при програмировании ( смене ) i_gamer и Team_Color + GunDamage просто занести в EEprom в виде двух байтов
eeprom unsigned char id_gamer = 01010101; // Игрок с номером 85 ( 0x55 )
eeprom unsigned char Team_Color + GunDamage = 10010100; // Цвет команды 2 ( желтые по твоей нумерации ) и ущерб составит 10% индекс массива [5]
как бы так.
Вы предлагаете работать на уровне бит. Я и такой вариант рассматривал, но пока не стал реализовывать, так как в прерывании придется крутить-вертеть битами, а это дополнительное процессорное время, что для прерывания не есть хорошо.
Но я и это вариант не исключаю ни коем образом. Сперва именно так и хотел сделать. Поживем - увидим. Пока делаю как проще (лично для меня).
Что касается хранения установок eeprom - разумеется! Так и будет, дайте срок.
И меняться значения будут по команде через COM-порт и/или посредством кнопок управления.
Пока нужно сделать основные вещи - обеспечить транспортный уровень (прием/передача), потом и до остального доберёмся.