С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 18.02.2020
Сообщений: 9
1

Вывод с буффера заданную часть пакета!

03.08.2020, 20:06. Показов 564. Ответов 4

Author24 — интернет-сервис помощи студентам
Ребят доброго времени суток, подскажите пожалуйста. Такая ситуация, к Ардуино подключён модуль RS485, по RS485 с сторонней программы приходит пакет и отправляет этот пакет в serial.print() на Ардуино, выглядит это вот так: 02w, 0k2, 000, 000, -1.800. В моём случае , последнее значение -1.800 это показания с датчика. Как реализовать что бы в serial.print приходил пакет только с последними цифрами т.е. -1.800.
Объясните пожалуйста, как обрезать всё что в начале и выводить через print только те значение которые в самом конце.
Выручайте, программировать недавно начал, как осуществить подобное не нашёл.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.08.2020, 20:06
Ответы с готовыми решениями:

Получить часть буффера из ByteBuffer.
Привет! Вот такая проблема, нужно из ByteBuffer выделить часть (from, to). Пробую делать так:...

При установке пакета удаляется часть установленных модулей
Здравствуйте. Устанавливаю через npm пакет node-gost. При установке он пишет , что установил 2...

Развернуть заданную часть строки
Задача такая, есть переменная:$str в которой находится произвольная строка. так же есть 2...

Как загрузить заданную часть изображения в Image?
Здравствуйте. Подскажите пожалуйста на небольшом примере: У меня есть изображение 200х200...

4
717 / 677 / 110
Регистрация: 29.05.2015
Сообщений: 4,089
04.08.2020, 07:29 2
Если этот пакет находится в строковой переменной, то несложно:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    string str1, str2;
    int i, k;
 
    str1 = "02w, 0k2, 000, 000, -1.800";
    str2 = "";
 
    k = str1.length();
 
    for(i = k-1; i > 0; i--)
    {
        if(str1.at(i) == ' ') break;
    }
 
    i++;
 
    for(; i < k; i++)
    {
        str2 += str1.at(i);
    }

Как с ардуино, я не знаю.
0
2565 / 1277 / 468
Регистрация: 08.11.2016
Сообщений: 3,525
04.08.2020, 08:55 3
Цитата Сообщение от Bryansky32 Посмотреть сообщение
по RS485 с сторонней программы приходит пакет и отправляет этот пакет в serial.print() на Ардуино, выглядит это вот так: 02w, 0k2, 000, 000, -1.800.
непонятно: в коде пакет куда приходит? serial.print() вызывает сторонняя программа?
0
0 / 0 / 0
Регистрация: 18.02.2020
Сообщений: 9
05.08.2020, 07:55  [ТС] 4
Приветствую, извините немного не корректно объяснил суть.
В коде всё что приходит по RS падает в char, а с chara выводится на дисплей.
По RS приходят данные в таком виде: 0W2,030,000,0,1260
Мне нужно что бы на экран выводились только последние значения, т.е. 1260, всё что после последней запятой.
Последние значения всегда меняются, это показания с датчика, это число может быть как от -99999 до 99999.
Вот код который использую:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей
#define SerialTxControl 10   //RS485 управляющий контакт на arduino pin 10
#define RS485Transmit    HIGH
#define RS485Receive     LOW  
char buffer[100];
void setup(void) {
  
  //LCD Setting/////////////////////////
  
  lcd.init();                     
  lcd.backlight();// Включаем подсветку дисплея
 
  //Serial Setting//////////////////////
  
   Serial.begin(9600);
   pinMode(SerialTxControl, OUTPUT);   
   delay(100); 
   digitalWrite(SerialTxControl, RS485Receive);   
}
 
void loop(void) {
   
  digitalWrite(SerialTxControl, RS485Receive);  // читаем данные с порта
   
 int i=0; if(Serial.available()){delay(100);
while( Serial.available() && i< 99) 
{ buffer[i++] = Serial.read();} buffer[i++]='\0';}
  if(i>0)
  {
  lcd.setCursor(0, 0);
  lcd.print(buffer);
  
  Serial.println(buffer); // Выводим что приняли с других устройств
  }
 
}
0
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
05.08.2020, 14:29 5
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iterator>
#include <iostream>
 
//=============================================================
int main ()
{
  char arr[] = "0W2,030,000,0,1260";
  auto it = std::find(std::reverse_iterator(std::end(arr)),
                      std::reverse_iterator(std::begin(arr)), ',');
  std::cout << it.base();   // выводит "1260"
}
0
05.08.2020, 14:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.08.2020, 14:29
Помогаю со студенческими работами здесь

Переместить заданную часть списка на новое место
Помогите, пожалуйста, с задачей по LISP! Нужно переместить заданную часть списка на новое место....

Определить, входит ли точка (X,Y) в заданную заштрихованную часть плоскости
&quot;Пусть D - заштрихованная часть плоскости и пусть задана точка своими координатами (X,Y)....

Вывод шестнадцатиричного пакета
static void Gip() { TcpListener listner = new TcpListener(new...

Инвертировать заданную часть массива, после чего найти последний максимальный элемент
Инвертировать часть массива с элемента, номер которого задан, до последнего элемента, после чего...

Перед каждым элементом, целая часть которого заканчивается на заданную цифру, вставить ноль!
Помогите пожалуйста!

За сколько месяцев Петя накопит на компьютер, откладывая заданную часть денег, получаемых на карманные расходы?
Каждую неделю Петя получает сумму в размере S рублей на личные расходы, из них он тратит X% на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru