Как изменить цикл

Ard_user
Offline
Зарегистрирован: 06.02.2021
if (blinking())
    {
        // Заданная температура
              
        static float temperature = 0;
       
        temperature += 1;
        
        if (temperature > 5) temperature = 2;
                       
        ds18b20.setTemperature(temperature);
               
        Serial.println(temperature);
      
    }

Приветствую! Посоветуйте как изменить цикл, чтобы вывод был от 1 до 5 и обратно. 1 2 3 4 5 4 3 2 1

Сейчас такой 123452345. Заранее спасибо, сильно не ругайте только начал разбиратьсяю

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ard_user пишет:

Посоветуйте как изменить цикл

Никак. В приведённом огрызке кода нет никакого цикла.

Ard_user пишет:

Сейчас такой 123452345.

Не знаю, код приведён не полностью, поэтому совершенно непонятно что там и как.

Ard_user пишет:

сильно не ругайте

Почему? А как же подсказывать? Никак? Ну, ладно.

Ard_user пишет:

только начал разбираться

Так Вы поразбирайтесь маленько, а потом уж постите. Чего так неймётся-то?

b707
Offline
Зарегистрирован: 26.05.2017
int increment = 1;
if (blinking())
    {
        // Заданная температура
              
        static float temperature = 0;
       
        temperature += increment;
        
        if (temperature > 5 )  incremen = increment * -1;;
                       
        ds18b20.setTemperature(temperature);
               
        Serial.println(temperature);
      
    }

 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

где то до цикла float dt=1.0;

7 строку надо изменить на temperature += dt;

в 09 if (temperature < 1)||(temperature > 5) dt = -dt;

b707 в минуса уйдет ваш код ...

хотя нет он у вас сбрасывает инкримент в единицу перед if...

Ard_user
Offline
Зарегистрирован: 06.02.2021

Вот весь код! 

#include "OneWireHub.h"
#include "DS18B20.h"  // Digital Thermometer, 12bit

constexpr uint8_t pin_led       { 13 };
constexpr uint8_t pin_onewire   { A1 };

auto hub    = OneWireHub(pin_onewire);
auto ds18b20 = DS18B20(DS18B20::family_code, 0x00, 0x00, 0xB2, 0x18, 0xDA, 0x00); // DS18B20: 9-12bit, -55 -  +85 degC
bool blinking(void);

void setup()
{
    Serial.begin(9600);
    Serial.flush();
    pinMode(pin_led, OUTPUT);
    hub.attach(ds18b20); 
}

void loop()
{
    // следующая функция должна вызываться периодически
    hub.poll();
    // эта часть предназначена только для отладки (USE_SERIAL_DEBUG в OneWire.h должен быть включен для вывода)
    
    if (hub.hasError()) hub.printError();

    // Blink запускает изменение состояния
    
    if (blinking())
    {
        // Заданная температура
               
        static float temperature = 0;     
        temperature += 1; 
        if (temperature > 5) temperature = 2;
        ds18b20.setTemperature(temperature);
        Serial.println(temperature); 
    }
}
bool blinking(void)
{ 
    constexpr  uint32_t interval    = 1000;          // интервал мигания (миллисекунды)
    static uint32_t nextMillis  = millis();     // будет сохранять в следующий раз, когда светодиод будет обновлен

    if (millis() > nextMillis)
    {       
        nextMillis += interval;             // сохраните в следующий раз, когда вы мигнете светодиодом
        static uint8_t ledState = LOW;      // ledState используется для установки светодиода
        if (ledState == LOW)    ledState = HIGH;
        else                    ledState = LOW;
        digitalWrite(pin_led, ledState);
        return 1;
    }
    return 0;
}

 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Похоже библиотека сра...странная

Смените, и будет Вам щастье!