Сообщение от Easyrider83
|
NikitaAKA, 0х0Е видите после инита?
|
В используемой библиотеке есть метод
printDetails(), который выводит много отладочной информации, для обоих модулей она одинакова, различия лишь в некоторых параметрах, которые отличаются в зависимости от выставленного режима (прием/передача). В статусе выводится эта инфа:
0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0. Вывод идет в самом конце инициализации программы (уже после, например,
radio.startListening()).
Проблема в том, что вся эта инфа выводится в консоль. А вот в standalone-версии с "голым" микроконроллером у меня, конечно же, нет консоли. Я попытался придумать как можно проверить статус "вслепую". Заранее прошу прощения за полный ноль в языке программирования, мне знакомы Perl, PHP и Javascript, а с
C** я никогда не сталкивался.
Покопавшись в библиотеке нашел методы
get_status() и
print_status(), которыми можно воспользоваться таким образом:
printf("Status: %lu", radio.print_status(radio.get_status()));
Я слегка "кастрировал" этот метод и сделал чтобы он выводил только
0x0e, однако есть проблема: выводится это все все равно в консоль, а присвоить это значение переменной не выходит. Мысль была в том, чтобы проверять в цикле программы что-то вроде
if (status == '0x0e') { digitalWrite(pinLED, HIGH); } - тупо включить светодиод если статус тот, что нужен.
Выглядит внутри так:
void RF24::print_status(uint8_t status)
{
printf_P(PSTR("0x%02x"), status);
}
Я пытался возвращать вот так, но выводилась сама переменная status, а не ее "преобразованная" версия (понятно почему - потому что неправильно):
char RF24::print_status(uint8_t status)
{
return PSTR("0x%02x"), status;
}
Вывод такой:
3204579342 (число меняется, если сбрасывать Arduino)
UPD: попробовал несколько раз перезагрузить устройство: стабильно
2650931214, потом вдруг опять
3204579342.. потом снова 2650931214.. при этом 0x0e в консоли при обоих значениях.. интересно, можно ли использовать эти два числа для проверки, что это статус 0x0e, или оно зависит от многих других факторов, например аппаратной части?
Не могу сообразить, как конвертировать этот uint8_t в удобоваримый вид, как это делает printf_P(PSTR("0x%02x"), status)...
Подскажите, может есть способ узнать статус там, где нет консоли?
П.С. На самом деле задача с этими nrf модулями простая - тупо передать несколько байт (включено ли реле, какая температура, работает ли датчик и т.д..)
П.П.С. Вот такой вывод идет с printDetails()
STATUS = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
RX_ADDR_P0-1 = 0xe8e8f0f0e1 0xc2c2c2c2c2
RX_ADDR_P2-5 = 0xc3 0xc4 0xc5 0xc6
TX_ADDR = 0xe8e8f0f0e1
RX_PW_P0-6 = 0x20 0x00 0x00 0x00 0x00 0x00
EN_AA = 0x3f
EN_RXADDR = 0x03
RF_CH = 0x4c
RF_SETUP = 0x07
CONFIG = 0x0c
DYNPD/FEATURE = 0x03 0x06
Data Rate = 1MBPS
Model = nRF24L01+
CRC Length = 16 bits
PA Power = PA_HIGH
П.П.П.С.
Прощупывал контакты на модуле - на некоторых раз в секунду-две скачет напряжение от 0 до 5, видимо идут какие-то сигналы, т.е. вроде бы "работает"..?
Заранее спасибо!