Форум РадиоКот • Просмотр темы - Вопросы по С/С++ (СИ)
Сообщения без ответов | Активные темы
Страница 257 из 384
[ Сообщений: 7669 ]
... , , , , , , ...
Автор
Сообщение
victors60
Заголовок сообщения: Re: Ардуино часы
Добавлено: Пт ноя 17, 2017 19:35:12
Зарегистрирован: Ср сен 20, 2017 16:02:20Сообщений: 31
Рейтинг сообщения: 0
Ребята, добрый вечер, может кто окажет помощь в правке скетча, сам не могу врубиться (ни в зуб ногой!). Понравились одни из часиков( именно простой анимацией), слепил, все работает кроме измерения температуры, видно в скетче, что нет мат описания измерения, нашел в другом скетче, а как вставить...? что бы измерялась температура
Вложения:
Комментарий к файлу: сам скетч
Moi_Czasy-1.txt [118.92 KiB]
Скачиваний: 233
Вернуться наверх
Реклама
Аlex
Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
Добавлено: Пт ноя 17, 2017 19:57:30
Модератор
Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57Сообщений: 4565Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
1. Зачем в часах температура ?
На сколько мне известно, часы показывают время
2. Как тут что то можно подправить ? :
Спойлер Вложение:
2017-11-17_20-57-01.png [154.91 KiB]
Скачиваний: 72
Вернуться наверх
Реклама
arkhnchul
Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
Добавлено: Пт ноя 17, 2017 20:53:42
Карма: 38
Рейтинг сообщений: 618
Зарегистрирован: Пн апр 06, 2015 11:01:53Сообщений: 3092Откуда: москва, уфа
Рейтинг сообщения: 0
что и откуда вставить?
чем вы собрались температуру мерять и когда показывать?
телепатов нет, пишите подробно.
2. Как тут что то можно подправить ?
*nix- овые окончания строк, ничего вроде необычного. Код типично ардуинский, это да)
Вернуться наверх
victors60
Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
Добавлено: Пт ноя 17, 2017 20:56:10
Зарегистрирован: Ср сен 20, 2017 16:02:20Сообщений: 31
Рейтинг сообщения: 0
Если можно температуру показывать, почему нет? (Ардуино НАНО+MAX7219)Температура измеряется термистором на А0. Есть библиотечка "math.h" , я ее нашел#include <math.h> // библиотека для выполнения простых математических операций
double Thermister(int RawADC) {
double Temp;
Temp = log(((10240000/RawADC) - 10000));
Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp ))* Temp );
Temp = Temp - 273.15; // Kelvin to Celcius
//Temp = (Temp * 9.0)/ 5.0 + 32.0; // 1 способ Convert Celcius to Fahrenheit
//Temp = (Temp * 1.
+ 32.0; // 2 способ Convert Celcius to Fahrenheit
return Temp;
}
void setup() {
Serial.begin(9600); // открывает последовательный порт, на скорости 9600 бит/c
}
void loop() {
Serial.print("Sensor_1: ");
Serial.println(float(Thermister(analogRead(0))), 1); // выводим показание 1 датчика
//Serial.print("Sensor_2: ");
//Serial.println(float(Thermister(analogRead(1))), 1); // выводим показание 2 датчика
//Serial.println(int(Thermister((analogRead(0))* 1.
+ 32.0)); // выводим показание 1 датчика в фаренгейтах
delay(1000); // ждем 1 секунду
}(, и ее надо вставить в скетч.С расширением ino. файл не передать, изменить расширение(txt-ino) и ... получится скетч. Как то так.
Вернуться наверх
victors60
Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
Добавлено: Вс ноя 19, 2017 09:24:26
Зарегистрирован: Ср сен 20, 2017 16:02:20Сообщений: 31
Рейтинг сообщения: 0
Так понимаю, грамотных много, а помочь...?
Вернуться наверх
Реклама
Аlex
Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
Добавлено: Вс ноя 19, 2017 10:26:14
Модератор
Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57Сообщений: 4565Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
А самому попробовать ? Нужно же всего-лишь "её вставить в сетч". Вставить то мы тоже сможем, но что получится после этого ? Как проверять ? Как отлаживать, если что-то не заработает ? У Вас в руках железо, так что пробуйте, вставляйте, меняйте, ... Появятся вопросы (именно вопросы, а не просьбы сделать всё за Вас) - обращайтесь, тут всегда помогут тем, кто делает сам и на чём-то конкретном затыкается.
Вернуться наверх
Реклама
victors60
Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
Добавлено: Вс ноя 19, 2017 13:07:35
Зарегистрирован: Ср сен 20, 2017 16:02:20Сообщений: 31
Рейтинг сообщения: 0
Спасибо, что не отказали, смог бы-не обращался. А что надо вставить и куда я и сам как-то допер, что-то не хочет только.
Вернуться наверх
pokk
Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
Добавлено: Чт ноя 23, 2017 03:46:54
Зарегистрирован: Вт ноя 02, 2010 17:46:37Сообщений: 574
Рейтинг сообщения: 0
Добрый день подскажите в С как нибудь можно в цикле по полям структуры пройтись? и проверить их скажем на больше меньше числа. А в C ++ ?
Допустим как-то так, и надо выявить какая именно авария произошла.
Код:
typedef struct{ uint8_t error1; uint8_t error2; uint8_t error3; uint8_t error4; }Type_error;
Или перекопировать из одной переменной Type_error в другую с таким же типом , только несколько полей скажем все кроме одного.
Код:
Type_error Err1; Type_error Err2; Err1.error1=Err2.error1; // Вот это как сделать по феншую ? Err1.error2=Err2.error2; Err1.error3=Err2.error3;
Вернуться наверх
ARV
Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
Добавлено: Чт ноя 23, 2017 07:07:46
Ум, честь и совесть. И скромность.
Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56Сообщений: 18403Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
pokk писал(а):
в С как нибудь можно в цикле по полям структуры пройтись?
нельзя
pokk писал(а):
// Вот это как сделать по феншую ?
вот так и делать
в цикле можно пройтись только по массиву
_________________если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...Мой уютный бложик ... заходите!
Вернуться наверх
Реклама
WiseLord
Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
Добавлено: Чт ноя 23, 2017 08:16:46
Друг Кота
Карма: 86
Рейтинг сообщений: 1035
Зарегистрирован: Чт апр 11, 2013 11:19:59Сообщений: 4884Откуда: Минск
Рейтинг сообщения: 1
pokk: Если все поля одного типа, как у Вас в примере, можно для такого дела завести:
Код:
typedef union { struct { uint8_t error1; uint8_t error2; uint8_t error3; uint8_t error4; }; uint8_t error[4]; } Type_error; ... Type_error te; for (uint8_t i = 0; i < sizeof(Type_error); i++) { te.error[i] = 3; }
Тогда можно и по полям обращаться, как раньше, и по индексам массива.
В принципе, можно и как в оригинале было, без union:
Код:
struct { uint8_t error1; uint8_t error2; uint8_t error3; uint8_t error4; } Type_error ; ... Type_error te; for (uint8_t i = 0; i < sizeof(Type_error); i++) { *(uint8_t*)(&te + i) = 3; }
, но это, опять же, только если все элементы структуры одного размера.
Вернуться наверх
pokk
Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
Добавлено: Чт ноя 23, 2017 08:52:54
Зарегистрирован: Вт ноя 02, 2010 17:46:37Сообщений: 574
Рейтинг сообщения: 0
WiseLord: О за вариант с union спасибо, я примерно так же работал с массивом, только приходилось define элементы обзывать что бы не запутаться, а теперь как-то это надоело. А про вариант, без union я уже думал, но как-то страшно, фиг его знает как компилятор структуру упакует. И при портретировании такого когда сложности могут возникать.
Вернуться наверх
ARV
Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
Добавлено: Чт ноя 23, 2017 08:58:13
Ум, честь и совесть. И скромность.
Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56Сообщений: 18403Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
pokk писал(а):
фиг его знает как компилятор структуру упакует. И при портретировании такого когда сложности могут возникать
ну и зачем вам эти грабли? ну нельзя в Си перебирать поля структуры в цикле... смиритесь. все костыли вам боком выйдут.
_________________если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...Мой уютный бложик ... заходите!
Вернуться наверх
arkhnchul
Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
Добавлено: Чт ноя 23, 2017 14:07:30
Карма: 38
Рейтинг сообщений: 618
Зарегистрирован: Пн апр 06, 2015 11:01:53Сообщений: 3092Откуда: москва, уфа
Рейтинг сообщения: 0
на всякий случай, не касаясь собственно структур
Допустим как-то так, и надо выявить какая именно авария произошла.
не надо так делать
если нужно регистрировать множество различных и возможно одновременных ошибок, удобнее битовые маски
Код:
uint32_t errors; typedef enum { ERR_FOO = (uint32_t) 0x000001, ERR_BAR = (uint32_t) 0x000002, ERR_AAAAAAAAA = (uint32_t) 0x000004, ERR_ZOMBIEAPOCALYPSE = (uint32_t) 0x000008 } error_event_t; .... errors = 0; .... errors |= ERR_FOO; .... if(errors){ if(errors & ERR_FOO){ ..... } }
Вернуться наверх
pokk
Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
Добавлено: Пт ноя 24, 2017 06:33:24
Зарегистрирован: Вт ноя 02, 2010 17:46:37Сообщений: 574
Рейтинг сообщения: 0
arkhnchul , да я сделал похоже, но в лоб(про умножение на 2), некоторые флаги достигают трех состояний.
Код:
//========================== /* * @Описание: Устанавливаем статусные биты(норма,предупреждение,авария). * @Параметр: * @Возврат: Нету */ void SetStatus(uint8_t data,uint32_t Var){ MatchVall.StatusAll&=(~(3<<Var*2)); //очистить место под установку битов(стереть предыдушее значение) MatchVall.StatusAll|= (data<<(Var*2)); } //========================== /* * @Описание: Функция возврашает статус запрашиваемого параметра. * @Параметр: * @Возврат: Нету */ uint8_t GetStatus(uint32_t Var){ uint32_t temp; temp=MatchVall.StatusAll&(3<<Var*2); temp=temp>>(Var*2); return temp; }
Вернуться наверх
ARV
Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
Добавлено: Пт ноя 24, 2017 07:36:52
Ум, честь и совесть. И скромность.
Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56Сообщений: 18403Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
pokk писал(а):
да я сделал похоже, но в лоб
как с моей точки зрения, так вы сделали плохо, я бы даже сказал недопустимо, если бы мне не было все равно
кто вам помешал сделать нормально?
Код:
typedef enum{ STATUS_OK, STATUS_FAIL, STATUS_ALARM }status_t;
и затем в структуре объявить поле этого типа, в функциях сравнивать значение этого поля с константами, задавать константами его значение и т.п.? ну то есть как обычно все делают?
_________________если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...Мой уютный бложик ... заходите!
Вернуться наверх
pokk
Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
Добавлено: Пт ноя 24, 2017 11:49:15
Зарегистрирован: Вт ноя 02, 2010 17:46:37Сообщений: 574
Рейтинг сообщения: 0
ARV, имеете ввиду как-то так ?Да выглядит красивее, но мне дальше надо было проверять, какой либо из параметров в аварии, и не охото было условий 6-7 ставить.
Код:
typedef enum{ STATUS_OK, STATUS_FAIL, STATUS_ALARM }status_t; typedef struct{ status_t T; status_t AC; status_t Erorr3; status_t Erorr4; }T_error_t; T_error_t Error; void SetStatus123(status_t data,status_t Var){ if(data==STATUS_OK){Var=STATUS_OK;} if(data==STATUS_FAIL){Var=STATUS_OK;} if(data==STATUS_ALARM){Var=STATUS_OK;} } SetStatus123(STATUS_ALARM,Error.AC);
Вернуться наверх
ARV
Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
Добавлено: Пт ноя 24, 2017 12:01:13
Ум, честь и совесть. И скромность.
Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56Сообщений: 18403Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
я конечно, не профессиональный программист, и всех тонкостей не знаю... но вот это меня удивило:
Код:
void SetStatus123(status_t data,status_t Var){ if(data==STATUS_OK){Var=STATUS_OK;} if(data==STATUS_FAIL){Var=STATUS_OK;} if(data==STATUS_ALARM){Var=STATUS_OK;} }
это вот что должно означать? на месте компилятора я бы эту функцию выкинул, как бессмыленно-бесполезную. для обработки состояния лично я бы написал так:
Код:
status_t status; ... switch(status){ case STATUS_OK: ... break; case STATUS_FAIL: ... break; case STATUS_ALARM: ... break; }
как обычно все и делают...
_________________если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...Мой уютный бложик ... заходите!
Вернуться наверх
pokk
Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
Добавлено: Пт ноя 24, 2017 12:39:45
Зарегистрирован: Вт ноя 02, 2010 17:46:37Сообщений: 574
Рейтинг сообщения: 0
Ну да, я обычно так и делаю все на case, это я так в блокноте накидал для примера, но в любом случае, кучу проверок дальше это не отменяет, что бы перепроверить все эти переменные, для зажигании лампочки авария.
Вернуться наверх
arkhnchul
Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
Добавлено: Пт ноя 24, 2017 14:23:34
Карма: 38
Рейтинг сообщений: 618
Зарегистрирован: Пн апр 06, 2015 11:01:53Сообщений: 3092Откуда: москва, уфа
Рейтинг сообщения: 0
как обычно все и делают
для единичных статусов да, а для множественных - таки обычно маски.
Вернуться наверх
Zat
Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
Добавлено: Пт ноя 24, 2017 16:00:03
Встал на лапы
Карма: 1
Рейтинг сообщений: 19
Зарегистрирован: Пн ноя 02, 2009 05:27:41Сообщений: 119Откуда: С-Пб
Рейтинг сообщения: 0
WiseLord: О за вариант с union спасибо, я примерно так же работал с массивом, только приходилось define элементы обзывать что бы не запутаться, а теперь как-то это надоело. А про вариант, без union я уже думал, но как-то страшно, фиг его знает как компилятор структуру упакует. И при портретировании такого когда сложности могут возникать.
Не знаю, берет ли компилятор, но можно ему задать выравнивание перед объявлением структуры:
Код:
#pragma pack(push, 1) struct { uint8_t error1; uint8_t error2; uint8_t error3; uint8_t error4; }; #pragma pack(pop)
Если GCC, то можно попробовать так:
Код:
struct { uint8_t error1; uint8_t error2; uint8_t error3; uint8_t error4; } __attribute__ ((__packed__));
И дальше, зная что каждое поле занимает 1 байт обращаемся как к массиву. Даже если будут разные типы, мы же знаем их
размер, но будет чуть сложнее.
Вернуться наверх
Страница 257 из 384
[ Сообщений: 7669 ]
... , , , , , , ...
Кто сейчас на форуме
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения