Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Инженерный раздел > Микроконтроллеры, робототехника, схемотехника, 3D принтеры
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 17.02.2019, 20:34   #1
Marcus75
Пользователь
 
Регистрация: 19.12.2011
Сообщений: 15
Репутация: 10
По умолчанию Неправильно работает функция rand() на микроконтроллере ATMEGA328P

Добрый день, неправильно работает функция rand(). Должно генерироваться число от 1 до 12, но вместо этого всегда генерируется число 6.
Код:

int main(void)
{
    DDRB = 0x3F;
    PORTB = 0;
    DDRC = 0x3F;
    PORTC = 0;
    
    while (1)
    {
        srand(time(NULL));
        int r = rand() % 12;
        for (int i = 0; i < r; i++)
        {
            if(i<6)
            {
                PORTB |= (1 << i);
                _delay_ms(300);
                PORTB &= ~(1<<i);
            }
            else
            {
                PORTC |= (1 << (i-6));
                _delay_ms(300);
                PORTC &= ~(1<<(i-6));
            }
        }
    }
}

Marcus75 вне форума   Ответить с цитированием
Старый 18.02.2019, 13:32   #2
Black Fregat
Программист
Профессионал
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,320
Репутация: 939
По умолчанию

У вас там RTC к микроконтроллеру подключен? Я бы не стал закладываться на time(), понятия не имею, что именно возвращает time() при отсутствии RTC.. Но в любом случае инициализировать ГСЧ через srand на каждой итерации - плохая идея
Black Fregat вне форума   Ответить с цитированием
Старый 01.03.2019, 13:32   #3
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 497
Репутация: 86
По умолчанию

Цитата:
Сообщение от Marcus75 Посмотреть сообщение
Код:

rand() % 12;

- так будет генерироваться от 0 до 11, а не от 1 до 12, как Вы хотели.
Cuprum5 вне форума   Ответить с цитированием
Старый 01.03.2019, 14:33   #4
waleri
Профессионал
 
Регистрация: 13.07.2012
Адрес: Нижний Новгород
Сообщений: 5,823
Репутация: 1843
По умолчанию

Вынесите srand за тело цикла.
waleri вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Неправильно работает рекурсивная функция [FENIX] PHP 0 05.12.2018 10:03
Функция rand() axel__ Общие вопросы C/C++ 12 19.06.2015 15:20
функция rand() goluzov Общие вопросы C/C++ 11 05.02.2013 09:41
Неправильно работает функция округления числа Nomicos Помощь студентам 3 09.07.2012 16:23
rand() неправильно работает demigod82 Общие вопросы C/C++ 7 02.04.2012 17:35


11:49.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru