19-02-2021, 22:52
(Ten post był ostatnio modyfikowany: 19-02-2021, 23:04 przez HAL_9000_PL.)
Zaczęło mi działać ! Więc to już coś. Kod z przykładu FakeDS18B20. Mam jedynie problemy z tym, że gdy robię to pomiędzy dwoma Arduino to co jakiś czas zamiast wpisanej wartości (42) wywala mi wartość -127 czyli nie czyta. Musi coś być z brakiem dokładnego "zgrania się" mastera i slava. Doszedłem do tego, że za to odpowiada ta funkcja IF, ale niestety , nie rozumiem jej:
750....to pewnie max czas reakcji DS18B20
Kod:
if (localState == DS_ConvertingTemperature && millis() > localConversionStartTime + 750)
{
float temperature = 42.0f; // here you could plug any logic you want to return the emulated temperature
int16_t raw = (int16_t)(temperature * 16.0f + 0.5f);
byte data[9];
data[0] = (byte)raw;
data[1] = (byte)(raw >> 8);
for (int i = 2; i < 8; ++i)
data[i] = 0;
data[8] = OWSlave.crc8(data, 8);
cli();
memcpy((void*)scratchpad, data, 9);
state = DS_TemperatureConverted;
OWSlave.beginWriteBit(1, true); // now that conversion is finished, start sending ones until reset
sei();
}