Ответ в теме: D18B20, Arduino, MODBUS, Master SCADA

Главная Форумы Конструкторское бюро Автоматизация D18B20, Arduino, MODBUS, Master SCADA Ответ в теме: D18B20, Arduino, MODBUS, Master SCADA

#15812
Роман
Участник
  • Ответов: 291
@papazol

Есть проблема с созданием пользовательских функций. Никак не пойму, как передавать в функцию параметры, чтобы можно было этими параметрами заменять части текста внутри функции. Например, нужна функция, которая бы делала одно и то же, но над разными объектами. И это не просто числа, а части названий объектов.

Это очень тупо объяснять, приведу пример. Вот фрагмент моего скетча:

SteamSensor.reset(); // сброс шины OneWire
SteamSensor.select( SteamAddr ); // выбор датчика по полученному адресу
SteamSensor.write( 0xBE, POWER_MODE ); // команда считывания scratchpad
for( uint8_t i = 0; i < 9; i++ ) // scratchpad состоит из 9 байт
{ SteamBuffer = SteamSensor.read(); } // считываем и заносим в буфер
if( SteamBuffer[4] != 0x7F ) // если разрешение не 12 бит
{ Serial.println( “SteamSensor Resolution less than 12 bits. Change it…” ); // будем менять разрешение
SteamSensor.reset(); // сброс шины OneWire
SteamSensor.select( SteamAddr ); // выбор датчика по полученному адресу
SteamSensor.write( 0x4E, POWER_MODE ); // запись в scratchPad
SteamSensor.write( 0x00, POWER_MODE ); // неиспользуемый байт
SteamSensor.write( 0x00, POWER_MODE ); // тоже неиспользуемый
SteamSensor.write( 0x7F, POWER_MODE ); // разрешение 12 бит (0x7F)
SteamSensor.reset(); // сброс шины OneWire
delay ( 100 );
SteamSensor.reset(); // сброс шины OneWire
SteamSensor.select( SteamAddr ); // выбор датчика по полученному адресу
SteamSensor.write( 0x48, POWER_MODE ); // копирование данных из scratchpad в EEPROM
SteamSensor.reset(); // сброс шины OneWire
}

Видно, что в этом фрагменте очень часто повторяется “Steam”. Если “Steam” заменить на “Pipe”, то этот фрагмент уже будет относиться к другому датчику. Хотелось бы оформить подобные фрагменты в виде функций, в которые можно было бы передать в качестве параметра это самое “Pipe” или “Water”.