Передача шестнадцатеричного кода через Arduino Leonardo по USART на устройство - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь отправить шестнадцатеричную команду на устройство с Arduino Leonardo, которое также принимает команды через интерфейс Bluetooth.

В основном я пытаюсь включить и выключить лазер с помощью шестнадцатеричных команд, передаваемых наАрдуино Леонардо, но мне не повезло.Если я посылаю шестнадцатеричные коды через интерфейс USB Bluetooth, он работает в текущей конфигурации конфигурация проводки , но не тогда, когда я пытаюсь протолкнуть его через контакт TX (мне пришлось использовать делитель напряжения с 5k6 и12 кОм для снижения напряжения с 5 В до 3,3 В).

Код, который я пытаюсь использовать, показан ниже:

byte laserON[] = {0xAA,0x00, 0x01, 0xBE, 0x00, 0x01, 0x00, 0x01, 0xC1};
byte laserOFF[] = {0xAA,0x00, 0x01, 0xBE, 0x00, 0x01, 0x00, 0x00, 0xC0};

void setup() {
 Serial1.begin(19200);
}

void loop() {
for(byte i =0;isizeof(laserON);i++)(Serial1.write(laserON[i]));

delay(1000);
Serial1.write(laserON, sizeof(laserON));


for(byte i =0;isizeof(laserOFF);i++)(Serial1.write(laserOFF[i]));
delay(1000);
Serial1.write(laserOFF, sizeof(laserOFF));
}

Ответы [ 2 ]

0 голосов
/ 04 июня 2019

Решение вопроса заключается в следующем:

Вместо использования вышеупомянутой строки кода лучше всего подходит предложение Тарика: Serial.write (& laserON [0], sizeof (laserON))

Проблема заключалась в том, что делитель напряжения не работал так, как ожидалось.Преобразователь логического уровня от 5 до 3,3 В сделал свое дело.

0 голосов
/ 29 мая 2019

;isizeof(laserON); - это не какой-то обычный код C, который я знаю.Вы можете попробовать заменить его на i < sizeof(laserON), это по крайней мере исправит ваш цикл.

Serial.write(buf, len) действительно лучше, и вы, вероятно, захотите написать Serial.write(&laserON[0], sizeof(laserON))

Если выХотите подтвердить, что байты отправлены правильно: используйте область или другой адаптер UART, чтобы прочитать отправленные вами данные и подтвердить, являются ли байты отправленными вами байтами.Если с этим возникнут какие-либо проблемы, обновите ваш пост.

У Arduino Leonardo не более одного UART .Ваша проблема с тем, что вы ничего не видите при прямом подключении к pin 1:

На Uno, Nano, Mini и Mega контакты 0 и 1 используются для связи с компьютером.Подключение чего-либо к этим контактам может помешать этому общению, в том числе вызвать неудачную загрузку на плату.

То же самое, вероятно, относится к Леонардо, так как он довольно похож.Вам придется использовать другую плату Arduino или программный UART, если вы хотите общаться с другим устройством.Другой вариант - использовать шину с двойным SPI или одной шиной I2C с микросхемой расширения UART, например MAX14830 .

. Не знаю, почему Serial1 компилируется на вашей платформе, может быть, ваши настройки платы там, гденеправильно в Arduino IDE и чип достаточно похож для компиляции / прошивки / работы.В качестве меры отладки вы можете закомментировать разделы Serial и протестировать его, а затем отменить его, раскомментировав Serial и комментировав Serial1.

...