Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
7 / 7 / 0
Регистрация: 21.02.2011
Сообщений: 80

Не могу получить нормальное число

27.01.2014, 21:20. Показов 1027. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Имеется arduino, которая через rs232 кидает текущую температуру с датчиков. Изначально данные передавались в формате:
int:float, (0:24.31) т.е. номера датчика, двоеточие, температура, перевод строки.
Уже упростил протокол, выдавая в порт просто температуру в float.
Проблема заключается в том, что не могу получить нормальное число. То получаю завышенное, то откровенный бред.
Код:
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <stdio.h>   /* Стандартные объявления ввода/вывода */
#include <string.h>  /* Объявления строковых функций */
#include <unistd.h>  /* Объявления стандартных функций UNIX */
#include <fcntl.h>   /* Объявления управления файлами */
#include <errno.h>   /* Объявления кодов ошибок */
#include <termios.h> /* Объявления управления POSIX-терминалом */
 
/*
 * 'open_port()' - Открывает последовательный порт 1.
 *
 * Возвращает файловый дескриптор при успехе или -1 при ошибке.
 */
 
int
open_port(void)
{
  int fd; /* Файловый дескриптор для порта */
 
 
  fd = open("/dev/ttyACM0", O_RDWR | O_NOCTTY | O_NDELAY);
  if (fd == -1)
  {
   /*
    * Could not open the port.
    */
 
    perror("open_port: Unable to open /dev/ttyACM0 - ");
  }
  else{
    fcntl(fd, F_SETFL, 0);
 
    struct termios options;
    tcgetattr(fd, &options);
    cfsetispeed(&options, B9600);
    cfsetospeed(&options, B9600);
 
    options.c_cflag |= (CLOCAL | CREAD);
    options.c_cflag &= ~PARENB;
    options.c_cflag &= ~CSTOPB;
    options.c_cflag &= ~CSIZE;
    options.c_cflag |= CS8;
    tcsetattr(fd, TCSANOW, &options);
    }
  return (fd);
}
 
 
int main(){
    puts("start");
    int fd = open_port();
    if(fd==-1){
        puts("error open file");
    }
    char *buf=new char[512];
    for(;;){
        int r=read(fd,buf,4);
        if(r!=-1){
             printf("%s\n",buf);
        }
    }
    close(fd);
    fcntl(fd, F_SETFL, 0);
    return 0;
}
Где может быть косяк?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.01.2014, 21:20
Ответы с готовыми решениями:

Получить нормальное распределение
Добрый день, форумчане. Подскажите с таким вопросом: насколько знаю, стандартные функции Random.Next(); Random.NextDouble(); ...

нормальное число h1-h6
Скажитен пожалуйста, гуру, нормально ли такое на одной странице(главной): h1 - 1раз h2 - 1 раз h3 - 4 раза h4 - 4 раза просто...

Не могу сделать нормальное заполнение StringGrid
Помогите реализовать в коде эту идею:Первое число ставится рандомно. Для того, что бы компьютер принял решение, куда ставить число, нужно...

5
...
 Аватар для anmartex
1910 / 1329 / 966
Регистрация: 12.02.2013
Сообщений: 2,172
28.01.2014, 17:39
xaker1, данные вы в бинарном или ASCII-формате передаёте?
1
7 / 7 / 0
Регистрация: 21.02.2011
Сообщений: 80
28.01.2014, 17:49  [ТС]
Цитата Сообщение от anmartex Посмотреть сообщение
xaker1, данные вы в бинарном или ASCII-формате передаёте?
ASCII. Может действительно тут проблема закралась... ЕМНИП вышеприведенный код должен получать данные в бинарном формате. Спасибо за подсказку, попозже попробую посмотреть в эту сторону.
0
7 / 7 / 0
Регистрация: 21.02.2011
Сообщений: 80
01.02.2014, 14:55  [ТС]
Алсо, что-то не могу нагуглить примеров чтения ASCII. Буду рад, если предоставите
0
...
 Аватар для anmartex
1910 / 1329 / 966
Регистрация: 12.02.2013
Сообщений: 2,172
01.02.2014, 17:14
xaker1, что есть ASCII? Это тот же бинарный формат, только каждый байт есть символ из таблицы. У вас в примере, кстати, как раз работа с ASCII. Правда могут быть проблемы с завершающим нулём, да и 4-ёх символов может не хватить для передачи данных в ASCII учитывая что один байт придётся потратить на точку.

Добавлено через 1 минуту
Но если же данные у вас передаются в бинарном режиме, то естественно вы выводите их абсолютно не верно.
0
7 / 7 / 0
Регистрация: 21.02.2011
Сообщений: 80
02.02.2014, 00:11  [ТС]
Судя по справке - ASCII.
Пробовал читать и 5 и 6 символов - результат не очень красивый.
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
20.0.
94
.
20.
.
94
.
24
.
0.94.
 
94.
2
94.
0.94.
 
94.
20.4.
4.
 
4.
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
20..00
 
..00
21.000
0
000
2
000
1.0000
 
0000
210000
000
 
00
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.02.2014, 00:11
Помогаю со студенческими работами здесь

Как показать нормальное число?
Как показать нормальное число? Например: program Project2; {$APPTYPE CONSOLE} uses SysUtils;

Не могу найти нормальное объяснение, что такое замыкание(closure) в java.
Не могу найти нормальное объяснение, что такое замыкание(closure) в java. Можете привести пример? Я так понял, это когда мы можем...

Дано целое двухзначное число a. Получить наибольшее число, которое можно получить из цифр числа a
Дано целое двухзначное число a. Получить наибольшее число, которое можно получить из цифр числа a. Входные данные: Во входном потоке...

не могу понять задачку. Даны натуральное число n и символы s1, s2,., sn. Получить символы, принадлежащие последовательности s1, s2,., sn, которые
Даны натуральное число n и символы s1, s2,..., sn. Получить символы, принадлежащие последовательности s1, s2,..., sn, которые входят в нее...

Получить число, приписав к нему такое же число , а потом число в обратном порядке
Дано натуральное число. Получить новое, приписав к нему такое же число , а потом число в обратном порядке(например, число 234, результат —...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru