Вопрос по синтаксису

Тема в разделе "Arduino & Shields", создана пользователем Ariadna-on-Line, 17 май 2021.

  1. SergeiL

    SergeiL Оракул Модератор

    Вы так пишите, что не понятно, что вам нужно.
    Что означает доллар перед числом? Шестнадцатеричная система? если да - то в си это 0x57 или 57h
    Вы хотите вывести эти значения с устройства в монитор порта или наоборот из монитора порта отправить в устройство?
     
  2. Ariadna-on-Line

    Ariadna-on-Line Гуру

    1. Доллар означает 16-ную систему. Используется в Терминалах..
    2. Из монитора порта отправить в устройство.
     
  3. SergeiL

    SergeiL Оракул Модератор

    Про возможность из монитора порта оправки HEX значений я не знаю.
    Но наверное можно посмотреть чему это будет равно в десятеричной системе и отправить через Alt + код.
     
  4. b707

    b707 Гуру

    Монитор ардуино такого не умеет, как мне кажется. Но есть сторонние терминалы с возможностью отправки произвольных значений
     
  5. Ariadna-on-Line

    Ariadna-on-Line Гуру

    1. Спасибо, как в воду глядели. Глюк оказался известный, но не многие знают, поскольку не пользуются Протеусом -
    Ахтунг всем !!! - SoftSerial в Proteus - ной Arduino - работает только на передачу. Приема - нет !!!
    2. В скетче включен файл библиотеки Ch376msc
    В коде Ch376msc.cpp вызываются функции находящиеся в другом файле библиотеки - Comm.cpp (файла Comm.h - нет). При этом наводки использовать этот файл в коде НИГДЕ НЕТ (если проморгал - ткните носом пожалуйста).. Как компилятор нашел этот файл ? Сканировал тексты файлов в директории библиотеки ?
    3. Всем спасибо.
     
  6. b707

    b707 Гуру

    заголовки функций из Comm.cpp прописаны в файле Ch376msc.h
     
  7. Ariadna-on-Line

    Ariadna-on-Line Гуру

    mySerial.write(0x4E);
    mySerial.write(0x00); // Write Token
    mySerial.write(0x19);

    Строчка - mySerial.write(0x00);
    не компилируется. Все что кроме нуля компилится без проблем. Но нужен именно ноль. Как обойти проблему ?
     
  8. b707

    b707 Гуру

    сообщение об ошибке покажите
     
  9. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Код (C++):
    C:\Users\Alexander\Documents\Arduino\My_Hlam\My_CH376S_mouse\My_CH376S_mouse.ino: In function 'void CallMouse()':
    My_CH376S_mouse:81:25: error: call of overloaded 'write(int)' is ambiguous
          mySerial.write(0x00);  // Write Token
                             ^
    In file included from C:\Users\Alexander\Documents\Arduino\My_Hlam\My_CH376S_mouse\My_CH376S_mouse.ino:2:0:
    C:\Program Files\Arduino\hardware\arduino\avr\libraries\SoftwareSerial\src/SoftwareSerial.h:102:18: note: candidate: virtual size_t SoftwareSerial::write(uint8_t)
       virtual size_t write(uint8_t byte);
                      ^~~~~
    In file included from C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino/Stream.h:26:0,
                     from C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino/HardwareSerial.h:29,
                     from C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:233,
                     from C:\TEMP\arduino_build_850319\sketch\My_CH376S_mouse.ino.cpp:1:
    C:\Program Files\Arduino\hardware\arduino\avr\cores\arduino/Print.h:52:12: note: candidate: size_t Print::write(const char*)
         size_t write(const char *str) {
                ^~~~~
    Используем библиотеку SoftwareSerial версии 1.0 из папки: C:\Program Files\Arduino\hardware\arduino\avr\libraries\SoftwareSerial
    exit status 1
    call of overloaded 'write(int)' is ambiguous
     
    USB модуль на микре CH376S. Три интерфейса. Поддерживает УСБ-хост режимы. Изумительная примочка для Ардуины Уно. Достаточно 2 пина, а возможности расширяются на порядок. Подключил USB флешку. Захотел USB мыша. Готовых библ не обнаружил, но нашел необходимый алгоритм. Уже работает (в Протеусе ;> ))) !). На очереди USB клава и Хаб.
    ПС. Цена модулька такая же как Ардуины Уно. Логично - "спарить" их окончательно.
     
    Последнее редактирование: 18 июн 2021
  10. b707

    b707 Гуру

    вот так попробуйте
    Код (C++):
     mySerial.write((uint8_t) 0);
     
    Ariadna-on-Line нравится это.
  11. b707

    b707 Гуру

    заработало?
     
  12. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Да. заработало. Спасибо..

    Ха. В Фикспрайсах продается УСБ клавиатурка с цифрами, "NumLock" и тд. Приткнул к модульку вместо мыша. Работает - передает по нажатию и отпусканию.
     
    Последнее редактирование: 18 июн 2021
  13. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Хочу подключить внешнюю RAM (64K x 8) к ATmega128.
    Установил платформу MegaCore, плата - ATmega128.
    1. Как сказать компилятору Ардуино ИДЕ, что на процессоре в данный момент внешняя ОЗУ 64Кб ? Чтобы он не ругался на недостаток SRAM.
    2. Регистры управления внешним ОЗУ настроил вроде правильно. Тк появились сигналы #RD, #WR и ALE.
    3. Как синтаксически безупречно написать в Arduino IDE запись и чтение произвольного адреса внешнего ОЗУ ? Чтобы увидеть процесс управления регистром адреса (74HCT574) и проверить работу ячеек памяти.
    4. Пробовал создать байтовый массив 60Кб, понимая что его бОльшая часть должна будет размещаться во внешней памяти. Компилятор ругается.
    С уважением.
     

    Вложения:

    Последнее редактирование: 27 июн 2021
  14. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Уважаемые гуру. Прошу помощи. Как в Ардуиновском скетче написать команду записи / чтения байта в / из конкретный адрес ОЗУ ? Считаем, что адрес заведомо свободен.
     
    Последнее редактирование: 30 июн 2021
  15. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Код (C++):
    void  ReadModule()   {
      uint32_t oldMillis = millis();
        while ((millis()- oldMillis) < ANSWTIMEOUT)  {
      if(mySerial.available()) {            // wait until data is arrive
         RD_Byte = mySerial.read();         // read byte
         RD_Rezult = HIGH;                  // read rezult OK
      break;
    return;   }
        }
         RD_Rezult = LOW;
        }
    Уважаемые знатоки. Требуется чтобы код ждал прихода байта в течение ANSWTIMEOUT. Если байт пришел в течение интервала - читаем, взводим флаг успешности и сразу выскакиваем из ожидания. Если байт не пришел за время ANSWTIMEOUT - ставим флаг неуспешности и выходим из ожидания. Правильно ли написан этот код ?

    Сам разобрался -
    Код (C++):
    void  ReadModule()   {
      uint32_t oldMillis = millis();
        while ((millis()- oldMillis) < ANSWTIMEOUT)  {
      if(mySerial.available()) {            // wait until data is arrive
         RD_Byte = mySerial.read();         // read byte
         RD_Rezult = HIGH;                  // read rezult OK
    return;
        }
        }
         RD_Rezult = LOW;
        }
     
    Последнее редактирование: 8 июл 2021