从一堆单线设备中,我想将设备的rom地址写入数组。我尝试了很多选择,但显然我不知道如何正确地做到这一点。
在下面的代码中,在设备搜索循环中,我得到了打印在串行线上的地址,正如我所期望的那样。但主循环的打印输出表明,在我的方法中,我可以将这个地址存储在数组中。。。。
#include <OneWire.h>
// http://www.pjrc.com/teensy/td_libs_OneWire.html
OneWire ds(2);
void setup(void) {
Serial.begin(9600);
while (!Serial) {
}
}
unsigned char UIDs[12];
int indx=0;
void getDeviceAddresses(void)
{
int i=0;
byte present = 0;
byte done = 0;
byte data[12];
byte addr[8];
while ( !done )
{
if ( ds.search(addr) != 1)
{
Serial.print("No more addresses.n");
ds.reset_search();
done = 1;
delay(1000);
indx=0;
return;
}
else
{
Serial.print("Sensors");
Serial.print(indx);
Serial.print(" address is:t");
indx++;
//read each byte in the address array
for( i = 0; i < 8; i++) {
//Serial.print("0x");
if (addr[i] < 16) {
Serial.print('0');
}
// print each byte in the address array in hex format
UIDs[indx]=(UIDs[indx]+(addr[i], HEX)); // I guess this is not how to do it....
Serial.print(addr[i], HEX);
}
}
Serial.println();
}
}
void loop (){
getDeviceAddresses();
int i=0;
while (true) {
for ( indx = 0; indx < 13; indx++) {
Serial.println(UIDs[indx]);
}
delay(4000);
}
}
Sensors0 address is: 106C402502080064
Sensors1 address is: 101E3C25020800DE
Sensors2 address is: 10614C250208000F
Sensors3 address is: 10513325020800E0
Sensors4 address is: 10094B250208003C
Sensors5 address is: 104D342502080097
Sensors6 address is: 10FD4025020800E2
Sensors7 address is: 10534025020800AD
Sensors8 address is: 1047672502080083
No more addresses.
0
128
128
128
128
128
128
128
128
128
0
0
12
看起来addr是一个包含8个字节的数组,用来存放您的地址。
如果您定义为:
unsigned char UIDs[12][8];
然后,在每次通过您的功能时,您都有:
{
Serial.print("Sensors");
Serial.print(indx);
Serial.print(" address is:t");
indx++;
//read each byte in the address array
for( i = 0; i < 8; i++) {
//Serial.print("0x");
if (addr[i] < 16) {
Serial.print('0');
}
// print each byte in the address array in hex format
UIDs[indx][i] = addr[i];
Serial.print(addr[i], HEX);
}
}
最后在你的循环中打印它们:
for ( indx = 0; indx < 13; indx++) {
for (int i=0; i<8; i++){
if(UIDs[indx][i] < 16){
Serial.print('0');
}
Serial.print(UIDs[indx][i], HEX);
}
@Delta_G-谢谢!
我先尝试了二维数组,但没能把它做好。我想我把第二次打印程序搞砸了。为了将来参考,如果有人需要,这是一个完整的工作测试代码。
unsigned char UIDs[12][8];
byte indx=0;
byte nr_of_devices=0;
#include <OneWire.h>
// http://www.pjrc.com/teensy/td_libs_OneWire.html
OneWire ds(2);
void setup(void) {
Serial.begin(9600);
while (!Serial) {
}
}
void getDeviceAddresses(void)
{
int i=0;
byte present = 0;
byte done = 0;
byte data[12];
byte addr[8];
while ( !done )
{
if ( ds.search(addr) != 1)
{
Serial.print("No more addresses.n");
ds.reset_search();
done = 1;
delay(1000);
nr_of_devices=indx;
indx=0;
return;
}
else
{
Serial.print("Sensors");
Serial.print(indx);
Serial.print(" address is:t");
indx++;
//read each byte in the address array
for( i = 0; i < 8; i++) {
//Serial.print("0x");
if (addr[i] < 16) {
Serial.print('0');
}
// print each byte in the address array in hex format
UIDs[indx][i] = addr[i];
Serial.print(addr[i], HEX);
if (!i >= 1) {
Serial.print("-");
}
}
}
Serial.println();
}
}
void loop (){
getDeviceAddresses();
int i=0;
while (true) {
Serial.println("Sensors found:");
for ( indx = 1; indx < nr_of_devices; indx++) {
Serial.print(indx);Serial.print(": ");
for (int i=0; i<8; i++){
if(UIDs[indx][i] < 16){
Serial.print('0');
}
Serial.print(UIDs[indx][i], HEX);
}
Serial.println("");
}
delay(4000);
}
}