Jump to content
motoalex

Получение данных с UART и сравнение данных с массивом.

Recommended Posts

Здравствуйте, написал код для приема данных по UART. Записываю данные в буфер и сравниваю его с массивом. Если все данные совпадают увеличиваю значение j до 13. И вывожу данные j ком порт. Пожалуйста помогите исправить код, а то в UART хлам сыпется. 

unsigned char Buff[250];
unsigned char BuffIndex;
unsigned char src[]= {'+','7','9','1','7','6','3','0','0','0','0','0','0'};
char * pch;
int f2=0,i,j=0;
void setup() { 
    Serial.begin(9600);   
     memset(Buff, '\0', 250);    // Initialize the string
     BuffIndex=0;
}

void loop() {
   while(1)
      { 
      //BuffIndex=0;   
  // put your main code here, to run repeatedly:
 if(Serial.available()>0)
    {     
      Buff[BuffIndex] = Serial.read();    
              BuffIndex++;
              if(BuffIndex>250) 
              {
                  BuffIndex=0;
              }
              
         for(i=0;i<=13;i++)
         {
          if(Buff[i]==src[i])
            {
            j++;
            f2=10;
            }
          }
        if(j>13 && f2==10)
        {              
        Serial.print(j);
        j=0;
        f2=0;
        }
     } 
     }
}
  

 

Share this post


Link to post
Share on other sites

А что за хлам сыплется?

Интересно, что вы ожидаете там увидеть?

 


Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Share this post


Link to post
Share on other sites

Изготовление 2-х слойных плат от 2$, а 4-х слойных от 5$!

Быстрое изготовление прототипа платы всего за 24 часа! Прямая доставка с нашей фабрики!

Смотрите видео о фабрике JLCPCB: https://youtu.be/_XCznQFV-Mw

Посетите первую электронную выставку JLCPCB https://jlcpcb.com/E-exhibition чтобы получить купоны и выиграть iPhone 12, 3D-принтер и так далее...

Благодаря Вас за внимание. Смотрите, Я посылаю с терминала номер +79171234567899, на ардуино принимаю, если буфер больше 0, обрабатываю данные. Записываю их в новый буфер (Buff). Потом создаю цикл. В котором сравниваю массив src и Buff. Если данные совпадают, вывожу значение переменной int. Заметил одну ошибку. Исправлю, попробую запустить.

Share this post


Link to post
Share on other sites

Вебинар "Новый BlueNRG-LP с Bluetooth 5.2 и Long Range — волшебная палочка разработчика IoT" (04/02/2021)

Приглашаем 4 февраля на бесплатный вебинар о BlueNRG-LP - новой системе-на-кристалле (SoC) STMicroelectronics. На вебинаре будут детально рассмотрены функциональные блоки, особенности подключения, аппаратные и программные средства для разработки, настройка сценариев с помощью BlueNRG-GUI, практические примеры работы с микросхемой, а также примеры применения BlueNRG-LP в устройствах интернета вещей.

Подробнее

6 минут назад, motoalex сказал:

Благодаря Вас за внимание.

А я вас не благодаря, ибо вы невнимательны: я задал два конкретных вопроса, а вместо ответов получил краткое изложение алгоритма, который и так понятен из кода и, дополнительно, был объяснен в предыдущем посте.


Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Share this post


Link to post
Share on other sites

Новые компактные конденсаторы Panasonic серии TPS. Закаленный характер.

Panasonic представил новую серию TPS твердотельных танталовых конденсаторов с проводящим полимером для поверхностного монтажа. Конденсаторы серии TPS обладают уникальными особенностями, что делает их отличным выбором для использования в приложениях с высокими требованиями.

Подробнее

Прошу прощения, Я ожидаю увидеть значение 13. Т.е. количество совпадений. А в терминале получаю "1418181815"

 

Share this post


Link to post
Share on other sites

SiC MOSFET на 1200 В для схем флайбэк до 500 Вт!

Компания Wolfspeed выпустила новые карбид-кремниевые транзисторы C3M0350120D/J на 1200 В, предназначенные для маломощных устройств мощностью до 500 Вт. Карбид-кремниевые транзисторы в сравнении с кремниевыми демонстрируют меньший на 75% уровень потерь на переключение и меньшее на 50% значение потерь проводимости в рабочем режиме при температуре кристалла 100…150°С.

Подробнее

Для начала проверьте, что у вас USART настроен верно: в setup перед выходом добавьте что-то типа serial.print(125) и посмотрите, что придет в терминал. Если придет 125 - начнем думать над остальным, если не придет - думайте над тем, что у вас не так настроено...


Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Share this post


Link to post
Share on other sites

Через serial print данные выводятся, без проблем. Пробовал объявить переменную int j; j=125; serial.print(125) . Выводит в терминале значение переменной. Т. е. 125

Share this post


Link to post
Share on other sites

Не надо проверять весь буфер после приема одного символа.

void loop() {
  // +791763000000
 if( Serial.available() > 0 )
    {
      hh =  Serial.read();
      Buff[BuffIndex] = hh;
      BuffIndex++;
      Serial.print("BuffIndex = ");
      Serial.print(BuffIndex);
      Serial.print( ";  Symbol = ");
      Serial.println(hh);
      
      if( BuffIndex > 250 ) 
      {
        BuffIndex = 0;
      }
    }

    if ( BuffIndex > 12 ) 
    {
         for(i=0;i<=13;i++)
         {
          if(Buff[i]==src[i])
            {
            j++;
            f2=10;
            }
          }
        if((j>=13) && (f2==10))
        {
        Serial.println(j);
        j=0;
        f2=0;
        }
        BuffIndex = 0;
    }
}

Для наглядности вставил вывод каждого принятого символа. Можно проверку на совпадения делать при приеме каждого символа.

Share this post


Link to post
Share on other sites
В 26.12.2017 в 17:46, motoalex сказал:

if(Serial.available()>0) { Buff[BuffIndex] = Serial.read();

1. здесь проверяете кол-во принятых байт, но в буфер записываете только один.

На момент проверки данного условия может прийти ни один байт.

В связи с этим в буфер вы должны положить кол-во принятых байт

2. Сравнивайте строки по приходу всех символов или по указателю в буфере. Как привели выше пример

В 26.12.2017 в 17:46, motoalex сказал:

if(Buff==src)

буфер на 250 символов а здесь проверяете всегда сначала.

В общем, в коде "полная какафония"

исправляйте и думайте

Edited by hasl

Share this post


Link to post
Share on other sites

Благодарю Вас ребята за помощь. Я не совсем понимал момент копирования из буфера данных UART и помещение его  в массив. Т.к. пытался изменить код на другой в итоге значение j увеличивалось на 4, но никак не на 13. Также думал, что пока  if(Serial.available()>0), он будет записывать в буфер данные, и когда прием будет закончен, тогда и выйдет из цикла. Спасибо ребята Вам!!! С Новым Годом, здоровья, счастья и всех благ в 2018 году. С праздником))))

Edited by motoalex

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

    • Guest NickL
      By Guest NickL
      Всем привет.
      Имеется датчик давления под управлением микрухи MLX90308. Микруха сия собирает показания с 4-х включенных мостом тензометрических датчиков, и отдает обработанное значение в виде аналогового сигнала. Так же есть пин для получения данных в цифре и калибровки/прошивки этой микрухи. Производитель микрухи предлагает бесплатный софт и свою отладочно-прошивочную плату (EVB90308) за 250 бакинских (дорого), которую ждать 8 недель (долго)
      Судя по докам, там обычный UART, но с другими уровнями. Логический 0 = 0.3*Uвх, т.е. 1.5в, Логическая 1 = 0.7*Uвх, т.е. 3,5в. И всё это засунуто в единственный пин и на прием и на передачу.
      Универ был давно, да и учился я плохо, подскажите пожалуйста пример схемы чтобы 1) свести tx и rx на одну ногу 2)согласовать уровни для чтения/записи сей микрухи доступными средствами. Например, FTDI.
      Даташит микрухи:
      https://www.melexis.com/-/media/files/documents/datasheets/mlx90308-datasheet-melexis.pdf
      Спасибо заранее! Это датчик из блока АБС мотоцикла, замены нет, б/у запчастей нет, а новый блок стоит как сам мотоцикл.
    • By Дмитрий -
      На примере GSM/GPRS Goouuu Tech IOT-GA6-B и ATtiny85.
      Программа «Звонилка». 
      Программа на BASCOM-AVR. 
      Источник https://178654.blogspot.com/p/uart.html
       

    • By Viktor Golubov
      Почему может неправильно работать uart? Подключил 1 uart к пк через usb/uart переходник, а второй к gsm модему. В первый уарт вывожу инфу для дебага, а во второй AT команды. Суть в том, что сообщения для 2 уарта выводятся в 1 уарт

      и выводятся как то странно

      не полностью

      Вот такой вывод постоянно:

      Begin
      End
      AT+CNMI=2,2,0,0,0
      AT+CMGEnd
      AT+CNMI=2,2,0,0,0

      а должно быть просто

      begin

      end

      и все

      полный код https://pastebin.com/zBBZmZue
    • By IgnatiusF
      Появилась надобность в микроконтрллере STM32 для проектирования устройства. И вопрос вот в чем - в программировании этих стм-ов. Прочитал несколько статей по их программированию - что вообще для этого нужно. Выяснил, что в них (во всех?) есть вшитый bootloader, который может сам прошить МК.
      То есть для этого необходимо подключить какой-либо ...to UART преобразователь, а именно TX, RX, VCC и gnd к соответсвующим ногам микроконтроллера и все? Или надо еще куда-то подавать управляющий сигнал?
      Еще вопрос по поводу бутлоадера - если он занимает 8 КБ (или по разному?), то МК с 16 КБ памяти, по сути, будет иметь 8 КБ для программ?
      Datasheet я только начинаю читать и пока еще не нашел точной информации, так что за помощь буду очень признателен
    • Guest Proton
      By Guest Proton
      Здравствуйте.
      Имеется сигнальный трансформатор 1:1, которому нужно работать на пару сотнях кГц. Одна его обмотка идёт на линию, вторая служит для приёма и передачи сигнала, например с UART. Но как это реализовать? Выходной каскад, скорее всего, на биполярном транзисторе, входной - на ОУ, но имею малые представления о совмещении этого воедино.
      Прошу объяснить и направить на необходимую литературу.
      Спасибо.
×
×
  • Create New...