#1 2020-12-06 00:04:00

Alex135102000
Учасник
Зареєстрований: 2020-12-05
Повідомлень: 6

Программирование Arduino

Здравствуйте. У меня стоит задача написать скетч для схемы так, чтобы в зависимости от температуры датчика DS18B20 менялись огоньки на LED-BARGRAPH-GRN. К примеру если температура 0-30 то горят огоньки которые подключены к выходам 2-4 платы Ардуино
а если выше или меньше то другие огоньки индикатора LED и т.д. Код который я подключаю к схеме бегают огоньки выходов а зелёные индикаторы нет. Как его правильно изменить подскажите пожалуйста
#include <OneWire.h>
/*
* Описание взаимодействия с цифровым датчиком ds18b20
* Подключение ds18b20 к ардуино через пин 8
*/
OneWire ds(8); // Создаем объект OneWire для шины 1-Wire, с помощью которого будет осуществляться работа с датчиком
byte i; // задаю переменную для цифровых выходов
byte LedMin = 2; // первый пин со светодиодом
byte LedMax = 11; // последний пин со светодиодом
#define LED_ON 200


void setup(){
Serial.begin(9600);
for(int i= LedMin; i <= LedMax; i++);
pinMode(i, OUTPUT);
}

void loop(){

// Определяем температуру от датчика DS18b20
byte data[2]; // Место для значения температуры
ds.reset(); // Начинаем взаимодействие со сброса всех предыдущих команд и параметров
ds.write(0xCC); // Даем датчику DS18b20 команду пропустить поиск по адресу. В нашем случае только одно устрйоство
ds.write(0x44); // Даем датчику DS18b20 команду измерить температуру. Само значение температуры мы еще не получаем - датчик его положит во внутреннюю память

delay(1000); // Микросхема измеряет температуру, а мы ждем.

ds.reset(); // Теперь готовимся получить значение измеренной температуры

ds.write(0xCC);
ds.write(0xBE); // Просим передать нам значение регистров со значением температуры

data[0] = ds.read(); // Читаем младший байт значения температуры
data[1] = ds.read(); // А теперь старший

float temperature = ((data[1] << 8) | data[0])* 0.0625;

// Выводим полученное значение температуры в монитор порта
Serial.println(temperature);

// Теперь управляем шкалой с помощью датчика температуры DS18b20

//поочередное включение всех ножек на LED_ON миллисекунд
//начиная с LED1, заканчивая LED10
//сохранение в переменную результата работы map(),
//которая вернет значение, считанное с аналогового входа,
//и пропорционально отмасштабированное из диапазона 0-1023
//в диапазон 2-11
int lastLed = map(temperature, 0, 70, LedMin, LedMax);
for(int i = LedMin; i <= LedMax; i+=1)
{
digitalWrite(i, HIGH);
delay(LED_ON);
digitalWrite(i, LOW);
}

}

Неактивний

#2 2021-06-30 21:43:10

ВухастийЇжачок
Гість

Re: Программирование Arduino

Попробуй для начала в void setup() вручную прописать pinMode для каждого светодиода. Проблема может быть и не в этом, но лично у меня когда то не сработала подобная установка пинов через цикл for и с тех пор я так не пишу. Дальше, попробуй написать вместо for(int i = LedMin; i <= LedMax; i+=1) {...} в лоб через if elsе или switch(). Если таким макаром будет работать как надо, тогда можешь уже и в цикл всё загонять для оптимизации

#3 2021-08-13 09:25:25

Roman1984
Учасник
Зареєстрований: 2017-02-17
Повідомлень: 45

Re: Программирование Arduino

Я думаю, что в нижеприведенном цикле нужно заменить LedMax на lastLed

for(int i = LedMin; i <= LedMax; i+=1)
{
digitalWrite(i, HIGH);
delay(LED_ON);
digitalWrite(i, LOW);
}

Остання редакція Roman1984 (2021-08-13 09:25:36)

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму