Jump to content
Alexandr597

Конвертер Скоростей На Ардуино Для K-Line Bluetooth Адаптера

Recommended Posts

Сделал конвертер на ардуино. т.е. использую на ардуино два serial порта. к одному подключаю блютуз модуль, к другому переходник usb-uart на ftdi. в библиотеке SoftwareSerial в файле SoftwareSerial.cpp добавлял в трех местах строчки для нестандартной скорости: { 10400, 106, 218, 218, 215, },

В терминалах обмен происходит. подключаю вместо переходника k-line адаптер, программа дианостики автомобиля его не видет. k-line адаптер работает на скорости 10400. пробовал вместо программы диагностики включать терминал. какие то данные приходят при включении зажигания.почему программа не видет адаптер?

Пробовал вместо блютуза использовать ардуино как usb-uart переходник, все работает.

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

void setup()
{
// Инициализируем последовательный интерфейс и ждем открытия порта:
Serial.begin(9600);
while (!Serial)


Serial.println("Goodnight moon!");

// устанавливаем скорость передачи данных для последовательного порта, созданного
// библиотекой SoftwareSerial
mySerial.begin(10400);
}

void loop() // выполняется циклически
{
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());
}

post-186678-0-79333400-1454169276_thumb.png

Edited by Alexandr597

Share this post


Link to post
Share on other sites

А зачем нужен переходник ? Тем более, на такой громадине.

Share this post


Link to post
Share on other sites

А зачем нужен переходник ? Тем более, на такой громадине.

Просто есть интерес сделать. А так если и применить его то с минимальными деталями к МК. Будет компактно и удобно.

Share this post


Link to post
Share on other sites

Литиевые батарейки Fanso для систем телеметрии и дистанционного контроля

Системы телеметрии находят все более широкое применение во многих отраслях на промышленных и коммунальных объектах. Требования, предъявляемые к условиям эксплуатации приборов телеметрии и, как следствие, источников питания для них, могут быть довольно жесткими. Fanso предоставляет широкую линейку продукции, рассчитанной на различные условия эксплуатации, что позволяет подобрать батарейку для каждого конкретного применения, в том числе и для устройств телеметрии.

Подробнее

Ну тогда осциллограф в руки и вперёд... Встаём на RX и TX и смотрим что там не так. Ибо угадать, из-за чего там что-то не работает, очень будет трудно.

Share this post


Link to post
Share on other sites

Ну тогда осциллограф в руки и вперёд... Встаём на RX и TX и смотрим что там не так. Ибо угадать, из-за чего там что-то не работает, очень будет трудно.

Может влияет скорость указанная в программе? Порт по блютуз открывается 9600, а в программе выбор только 10400

Share this post


Link to post
Share on other sites
                     

Приглашаем на вебинар Решения для построения ультразвуковых счетчиков жидкостей и газов на базе MSP430

Компэл совместно с Texas Instruments 23 октября 2019 приглашают на вебинар, посвященный системам-на-кристалле для построения ультразвуковых расходомеров жидкостей и газов на базе ядра MSP430. Вебинар проводит Йоханн Ципперер – эксперт по ультразвуковым технологиям, непосредственно участвовавший в создании данного решения. На вебинаре компания Texas Instruments представит однокристальное решение, позволяющее создавать точные недорогие счетчики жидкостей и газов.

Подробнее...

И ещё, не понятно, причём тут USB-UART переходник. На схеме он не нарисован.

Из Вашего поста, не понятно, что и к чему Вы подключаете через переходник.

Может влияет скорость указанная в программе?

Влиять может только из-за разности скоростей.

Share this post


Link to post
Share on other sites

И ещё, не понятно, причём тут USB-UART переходник. На схеме он не нарисован.

Из Вашего поста, не понятно, что и к чему Вы подключаете через переходник.

Может влияет скорость указанная в программе?

Влиять может только из-за разности скоростей.

usb-uart переходник использовал вместо схемы k-line адаптера на L9637D, чтобы убедиться что скетч работает.

Share this post


Link to post
Share on other sites

Ваш скетч будет работать только при передаче одного байта. Он даже передачу 2-ух байт подряд не обслужит.

Нужно делать буфер. Причём его величина должна быть максимально-возможной.

Share this post


Link to post
Share on other sites

Искал подобные скетчи для обмена данными через два uart ардуино, но ничего подходящего не нашел, а сам писать скетчи не умею.

Share this post


Link to post
Share on other sites

Поменял местами, как показано на схеме, и в скетче, заработало, но не стабильно, в программе при подключении на запрос приходят не все данные и обновляются долго.

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

void setup()
{
// Инициализируем последовательный интерфейс и ждем открытия порта:
Serial.begin(10400);
while (!Serial)


Serial.println("Goodnight moon!");

// устанавливаем скорость передачи данных для последовательного порта, созданного
// библиотекой SoftwareSerial
mySerial.begin(9600);
}

void loop() // выполняется циклически
{
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());
}

post-186678-0-90466600-1454236426_thumb.png

Edited by Alexandr597

Share this post


Link to post
Share on other sites

Не понял, что поменяли местами ?

Подключения к лайн адаптера и блютуз модуля к ардуино. По схемам видно.

Share this post


Link to post
Share on other sites

Ну этим Вы ничего и не решите. В одну сторону данные будут идти нормально, в другую - нет.

Что делать - я уже говорил выше.

Share this post


Link to post
Share on other sites

Ну этим Вы ничего и не решите. В одну сторону данные будут идти нормально, в другую - нет.

Что делать - я уже говорил выше.

Как сделать максимально возможный буфер? В файле HardwareSerial.cpp изменить значение?

Edited by Alexandr597

Share this post


Link to post
Share on other sites

Буфер - это массив данных, в который данные записываются при приёме и отправляются из него при передаче.

Ну а как сделать - зависит от программиста. Главное - это понять принцип и что делается у вас с данными.

Почитайте про кольцевой буфер.

Share this post


Link to post
Share on other sites

Alexandr597, как решили вопрос?хочу сделать k-line адаптер по блютузу, но без мк не получится

Share this post


Link to post
Share on other sites
В 03.01.2018 в 03:56, Pentium_dnk сказал:

Alexandr597, как решили вопрос?хочу сделать k-line адаптер по блютузу, но без мк не получится

5a4e0ca223908_.thumb.png.eb2e83fa51e9bd4237bab58c1f86c5ef.png

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

char s;
char incByte; // входящие данные
int iLED = 13; // LED подключен к 13 пину

void setup()
{
Serial.begin(10400); //Скорость портов
mySerial.begin(9600); // —----||-----

pinMode(iLED, OUTPUT);
Serial.print("START:");
}

void loop()
{
digitalWrite(iLED, LOW);
/* \*********************Устройство - комп*********************************/
if (mySerial.available() > 0) // прием данных от устройства
{
delay(5); // задержка перед выводом сообщений на комп
while (mySerial.available())
{
char s = mySerial.read();
Serial.write(s); // WRITE! вывод на комп
}
}
else
{
digitalWrite(iLED, HIGH);
}

/***********************Обратная связь: Комп - устройство********************/
if (Serial.available()) { // ввод данных с компа
char incByte = Serial.read();
mySerial.print(incByte); // передача на устройство
}
}

 

Share this post


Link to post
Share on other sites
Guest Александр

здравствуйте.

подскажите, пожалуйста, а почему в одну сторону мы ждем пока передаются данный, а в другую - нет?

я про это кусок кода:

if (mySerial.available() > 0) // прием данных от устройства { delay(5); // задержка перед выводом сообщений на комп

while (mySerial.available()) {

Share this post


Link to post
Share on other sites
Guest Александр
В 21.01.2018 в 18:14, Alexandr597 сказал:

я уже не помню вообще нужно править или нет

вроде для аппаратного менять ничего не нужно.

 

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By Merlok Life
      Хочу сделать монстр-машинку с двигателем rs550 с металлическим корпусом на ардуино.
      Подскажите как управлять мотором через ардуино нано? 
       
    • By Геннадий Быков
      Уважаемые электронщики и им сочувствующие!
      Хочу на даче собрать макет морского маяка в человеческий рост. Но для этого необходима схема управляющая светодиодами. Основное, схема должна иметь независимое питание(Солнечная панель) и быть слаботочной (5-9 вольт). Как вижу я. Маяк ориентировочно высотой 1,50-1,80 м. В маяке, с низу до верха 6 окошек (по одному 5мм светодиоду). И на верху сам маяк из 8-ми 0,5 ваттных светодиодов установленных по кругу. С наступлением темноты, включаются диоды на "1 этаже" и раз в 5-10 минут происходит действие. Диоды поэтажно (снизу вверх) начинают загораться (как будто кто-то поднимается вверх по ступеням) и после загорания самого верхнего окна, через пару секунд, включается маяк. Поочередно по кругу (эффект метеора), со скоростью 2-3 сек на круг, делает оборотов 10 и выключается. Потом в обратной последовательности гасятся окошки (светодиоды) сверху в низ и остаются два нижних, периодически и независимо включающиеся и выключающиеся (эффект присутствия). И вновь через 5-10 минут вышеописанное действие. Буду очень признателен любым советам, ссылкам, помощью. Немного умею паять, немного знаю Ардуино. Готов в разумных пределах спонсировать, разработку и сборку.
    • Guest ренат
      By Guest ренат
      Всем здрасти))))
      прошу помощи в написании программы
      мои знания программирования на ардуино основаны на примерах и школьного курса )))
      так вот есть программы 
      int LedPin = 8;             // Подключаем светодиод к порту 13
      int ButPin = 2;             // Подключаем кнопку к выходу 10
      int flag = 0;                // флаг состояния
      int LedPinTime = 100;
      void setup()
      {
        pinMode(LedPin, OUTPUT);   // Инициализируем порт "ledPin" как выходной
      }  
      void loop()
      {
        if(digitalRead(ButPin) == HIGH && flag == 0)      
          {                                              
            digitalWrite(LedPin, !digitalRead(LedPin));
            flag = 1;
          }
        
        if(digitalRead(ButPin) == LOW && flag == 1)
          {
            flag = 0;
          }  
      }
      собрал из кусков, работает )))))
      но не то что мне нужно 
      Мне нужно чтобы при нажатие одной кнопки(без фиксации) светодиод загорался на три секунды ( и не важно держишь ты кнопку или кратковременно нажал, он через три секунды потухнет) 
      помогите кто может))) я в благодарность могу и на телефон денег кинуть )))) спасибо
    • By pingyini
      Всем доброго времени суток. Решил я сделать "умную" электронную сигарету на arduino. Концепция заключается в кнопочном управлении мощностью посредством ШИМ, наличии экрана, и некоторыми защитами в виде ограничения максимального времени нажатия и уход камня в сон (режим пониженного энергопотребления) после N секунд простоя.
      Вводные: по нажатию кнопки запускается ШИМ и управляет полевиком, но в целях защиты я хочу ограничить время выполнения кода до 7 секунд(что бы при случайном зажатии кнопки в кармане не получить травматическую ампутацию конечностей)

      Проблема пришла откуда не ждали - обработка нажатой основной кнопки срабатывает как попало. Нажимая кнопку обработчик может сработать сразу и отработает как по маслу, а может и через 5 нажатий не сработать вовсе.  Проверял в живую на Arduino UNO, Pro Mini (328е Меги) и в Proteus'е. Симптомы одни и те же.  Проблема очевидно в коде но я в упор не вижу в чем может быть загвоздка. Уровень у меня "штота умею" поэтому не судите строго. 
       
      #define pwmPin 5 #define buttonStart 3 #define maxOnTime 7000 //максимальное время выполнения условия нажатой кнопки #define RED_LED 7 #define GREEN_LED 8 int power = 150; //boolean StartState; boolean StartStateFlag; //Флаг кнопки Старт unsigned long pressTime; void setup() { pinMode(pwmPin, OUTPUT); pinMode(buttonStart, INPUT); pinMode(RED_LED, OUTPUT); pinMode(GREEN_LED, OUTPUT); Serial.begin(9600); //чисто для отладки } void loop() { if (digitalRead(buttonStart) && StartStateFlag && ((millis() - pressTime) <= maxOnTime)) { // (1) если кнопка старт нажата И была отпущена И нажата менее 7 секунд выполняем: analogWrite(pwmPin, power); //запуск ШИМ Serial.println("PWM_ON"); digitalWrite(GREEN_LED, HIGH); digitalWrite(RED_LED, LOW); } else { // (2) иначе StartStateFlag = false; // кнопка небыла отпущена analogWrite(pwmPin, 0); digitalWrite(GREEN_LED, LOW); Serial.println("PWM_OFF"); pressTime = millis(); } if (!digitalRead(buttonStart)) { //(3) если кнопка не нажата analogWrite(pwmPin, 0); //остановка ШИМ Serial.println("PWM_OFF"); digitalWrite(RED_LED, HIGH); StartStateFlag = true; //была отпущена и можно входить в условие с нажатой кнопкой (1) } } И файлы: сам скетч, .elf и .hex для шПротеуса и проект Протеус.
      P. S. ШИМ в Протеусе не работает в принципе, в железе все ОК 
      BUTTON_TEST.ino
      BUTTON_TEST.ino.eightanaloginputs.hex
      BUTTON_TEST.ino.elf
      BUTTON_TEST.ino.with_bootloader.eightanaloginputs.hex
      ButtonTest.pdsprj
    • By dimmer
      Необходимо собрать устройство на ардуино: 
      Управление одним сервоприводом (плавная регулировка 180 градусов) по блютуз с телефона.
      Задача
      Питание для привода-аккумулятор (пока не знаю какой именно, нужно подсказать)
      Минимизировать электропотребление, сделать так что б в спящем режиме не было расхода энергии, или почти не было.  Может убрать светодиоды из платы, или ещё каким то образом.
      Устройством буду пользоваться время от времени и не хотелось бы аккумулятор часто заряжать.
      Основные комплектующие в наличии, думал сам разберусь но нет ни времени, не особого желания это изучать. 
      Территориально Москва. Привезу комплектующие куда скажете, но желательно ЗАО

×
×
  • Create New...