Mam 2 układy 1wire: 18B20 i 2405 i chcę odczytać ich id.
Pojedynczo sobie radzę, ale z oboma na raz mam problem.
To moje pierwsze kroki z C i męczę się z tym już drugi wieczór.
Chcę skorzystać z "onewire.c" dołączonej do książki kol. Mirka, funkcja zwie się "ow_rom_search" :
Tworzę sobie tablicę 2 wymiarową "tablica[2][8]" i przekazuję ją jako id. Jako diff przekazuję zmienną ustawioną na ilość układów czyli 2.
W tablicy ląduje tylko id układu o wyższym id.
Jak wywołać tą funkcję żeby wypełniła tablicę i drugim id?
Pojedynczo sobie radzę, ale z oboma na raz mam problem.
To moje pierwsze kroki z C i męczę się z tym już drugi wieczór.
Chcę skorzystać z "onewire.c" dołączonej do książki kol. Mirka, funkcja zwie się "ow_rom_search" :
uint8_t ow_rom_search( uint8_t diff, uint8_t *id )
{
uint8_t i, j, next_diff;
uint8_t b;
if( ow_reset() ) return OW_PRESENCE_ERR; // error, no device found
ow_byte_wr( OW_SEARCH_ROM ); // ROM search command
next_diff = OW_LAST_DEVICE; // unchanged on last device
i = OW_ROMCODE_SIZE * 8; // 8 bytes
do {
j = 8; // 8 bits
do {
b = ow_bit_io( 1 ); // read bit
if( ow_bit_io( 1 ) ) { // read complement bit
if( b ) // 11
return OW_DATA_ERR; // data error
}
else {
if( !b ) { // 00 = 2 devices
if( diff > i || ((*id & 1) && diff != i) ) {
b = 1; // now 1
next_diff = i; // next pass 0
}
}
}
ow_bit_io( b ); // write bit
*id >>= 1;
if( b ) *id |= 0x80; // store bit
i--;
} while( --j );
id++; // next byte
} while( i );
return next_diff; // to continue search
}
Tworzę sobie tablicę 2 wymiarową "tablica[2][8]" i przekazuję ją jako id. Jako diff przekazuję zmienną ustawioną na ilość układów czyli 2.
W tablicy ląduje tylko id układu o wyższym id.
Jak wywołać tą funkcję żeby wypełniła tablicę i drugim id?