Вообще-м, использую arduino 2.2.1, если скетч загружать через stlink, код работает корректно, передача по onewire.h идет, но если загружать скетч через bootloader(maple dfu bootloader 2.0) передача не идет, скетч точно загрузился в компорте появл “start” см.скетч, что это может быть? Очень хочется иметь для отладки компорт.
#include <OneWire.h>
#define pin PA12
OneWire ds(pin); // пин протокола
byte addr1[8] = {0x22, 0xFF, 0x5E, 0x10, 0x00, 0x00, 0x80, 0x5A}; // адрес слейва
byte addr2[8] = {0x22, 0xFF, 0x5E, 0x10, 0x00, 0x00, 0x80, 0x3A};
byte slave[8]; // сравниваем адреса из эфира
bool flag_send1 = false;
bool flag_send2 = false;
uint32_t numberToSend1 = 121314;
uint32_t numberToSend2 = 909090;
void setup() {
Serial.begin(9600);
Serial.println("Start");
ds.reset_search();
}
void sendNumber(byte addr[8], uint32_t number) {
ds.select(addr); // выбираем адрес слейва
byte bytesToSend[4]; // сдвигаем побайтово число
bytesToSend[0] = number & 0xFF;
bytesToSend[1] = (number >> 8) & 0xFF;
bytesToSend[2] = (number >> 16) & 0xFF;
bytesToSend[3] = (number >> 24) & 0xFF;
for (int i = 0; i < sizeof(bytesToSend); i++) {
ds.write(bytesToSend[i]); // отправляем каждый байт числа
}
delay(300);
}
void loop() {
Serial.println("Start");
if (!ds.search(slave)) { // ищем в эфире адрес и записываем в массив для сравнивания адресов, если нет в эфире возвр - false
ds.reset_search(); // ресетим поиск и начинаем поиск с 1 устройства
delay(250);
return; // возвращаемся к началу
}
ds.reset(); // ресетим шину протокола, чтобы багов не было, фиг знает зачем в доки написано =)
if (memcmp(addr1, slave, 8) == 0) { // сравниваем два байтовых массива адресов, если адрес совпал отправляем значение
sendNumber(addr1, numberToSend1);
// flag_send1 = true;
// } else if (memcmp(addr2, slave, 8) == 0) {
// sendNumber(addr2, numberToSend2);
// flag_send2 = true;
}
}
Если программировать через Стлинк то передача на слейв идёт, слейв видит его сообщения. Если программировать через бутлоадер передачи нет, но он точно сует туда код…