управление насосом от ардуины уно

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 24
Зарегистрирован: Ср сен 04, 2013 22:31:48
Откуда: Усть-Катав

Сообщение topler »

Всем привет. На днях от друга услышал про такую очень интересную вещь как Arduino uno. Ну естественно меня заинтересовал сей контроллер. Сразу пришла идея сделать управление насосом который стоит на отоплении дома. Прочел не много книг решил начать программирование, написал программу, скомпилировал, залил, проверил, работает.
Спойлер//назначаем номера портов вывода
int pumpPin = 12; //вывод порта на реле управления насосом
int ledPin = 7; //вывод порта на светодиод 1
int ledPin1 = 8; //вывод порта на светодиод 2
int analogPin = 1; //вход порта подключенного к датчику
int val = 0; //переменная для хранения считанных данных

void setup()
{
pinMode (pumpPin, OUTPUT); // выход для 12 порта
pinMode (ledPin, OUTPUT); // выход для 7 порта
pinMode (ledPin1, OUTPUT); //выход для 8 порта
}

void loop() //включение программы
{
val = analogRead (analogPin);
if (val<800) //значения для включения порта 12
{
digitalWrite (pumpPin, HIGH);
digitalWrite (ledPin, HIGH);
digitalWrite (ledPin1, LOW);
}
else //иначе
{
digitalWrite (pumpPin, LOW);
digitalWrite (ledPin, LOW);
digitalWrite (ledPin1, HIGH);
}

}
Данные температуры снимаются с резистивного термодатчика, подключается к аналоговому входу А1, насосом управляет реле, которое подключено к 12 входу, и естественно 2 светодиода для отображения режимов. У меня возникла проблема вот в чем я контролирую только одну величину температуры if (val<800) , то есть при достижении данного значения насос включается и при понижении выключается. Можно ли сделать что бы включение происходило при одном значении, а выключение при другом? Как и писал выше в программировании еще чайник.
Контактная информация:
Реклама
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Сообщение arkhnchul »

Спойлерint pumpPin = 12; //вывод порта на реле управления насосом
int ledPin = 7; //вывод порта на светодиод 1
int ledPin1 = 8; //вывод порта на светодиод 2
int analogPin = 1; //вход порта подключенного к датчику
int val = 0; //переменная для хранения считанных данных
int startThreshold=800;
int stopThreshold=900;
int runFlag=0;


void setup()
{
pinMode (pumpPin, OUTPUT); // выход для 12 порта
pinMode (ledPin, OUTPUT); // выход для 7 порта
pinMode (ledPin1, OUTPUT); //выход для 8 порта
}

void loop() //включение программы
{
val = analogRead (analogPin);
if ((val<startThreshold) || (runFlag==1 && val<stopThreshold)) //значения для включения порта 12
{
digitalWrite (pumpPin, HIGH);
digitalWrite (ledPin, HIGH);
digitalWrite (ledPin1, LOW);
runFlag=1;
}
else //иначе
{
digitalWrite (pumpPin, LOW);
digitalWrite (ledPin, LOW);
digitalWrite (ledPin1, HIGH);
runFlag=0;
}

}
Реклама
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 24
Зарегистрирован: Ср сен 04, 2013 22:31:48
Откуда: Усть-Катав

Сообщение topler »

Все проверил вроде работает. Спасибо) А можно ли сделать что бы значения включения и выключения менялись к примеру с помощью энкодера, или только жестко настройку можно сделать.
Контактная информация:
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Сообщение arkhnchul »

можно, конечно. Но там уже сильно больше писать для считывания событий энкодера. Гугл знает, как там с энкодером в ардуине работать)
Реклама
Эиком - электронные компоненты и радиодетали
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

arkhnchul писал(а): int runFlag=0;
:facepalm:
А потом спрашивают "Почему у меня так быстро память МК заканчивается ?"... :)))
Кто же вас, ардуинщиков, учит везде подряд тыкать int'ы ?
И вот вместо этого :

Код: Выделить всё

int pumpPin = 12; //вывод порта на реле управления насосом
 int ledPin = 7; //вывод порта на светодиод 1
 int ledPin1 = 8; //вывод порта на светодиод 2
 int analogPin = 1; //вход порта подключенного к датчику
можно жк написать так :

Код: Выделить всё

#define pumpPin		12    	//вывод порта на реле управления насосом
#define ledPin   	7 	//вывод порта на светодиод 1
#define ledPin1 	8 	//вывод порта на светодиод 2
#define analogPin  	1 	//вход порта подключенного к датчику
И память лишнюю не займёт, и функции работы с портами будут более легче :dont_know:


По вопросу. Достаточно сделать вот так, без всяких флагов :

Код: Выделить всё

if (val<800) //значение для включения насоса
 {

 }
 if (val>900) //значение для отключения насоса
 {

 }
Реклама
Друг Кота
Сообщения: 19495
Зарегистрирован: Чт фев 20, 2014 18:57:55

Сообщение Morroc »

"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Реклама
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Сообщение arkhnchul »

Аlex писал(а):А потом спрашивают "Почему у меня так быстро память МК заканчивается ?"... :)))
тут человеку надо основные конструкции/приемы языка разобрать, а не пямять экономить)
Друг Кота
Сообщения: 19495
Зарегистрирован: Чт фев 20, 2014 18:57:55

Сообщение Morroc »

Если памяти не хватает для управления насосом - всегда можно взять ардуину Мега :))
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

arkhnchul писал(а):а не пямять экономить)
Память нужно экономить всегда, это самый ценный ресурс в МК.
arkhnchul писал(а):человеку надо основные конструкции/приемы языка разобрать
А оптимизация не считается приёмом языка ?
Нужно изначально учиться правильно писать программы. А то так и будет назначать ноги int-переменными, да советы потом давать глупые, в виде флагов из int :kill:
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 24
Зарегистрирован: Ср сен 04, 2013 22:31:48
Откуда: Усть-Катав

Сообщение topler »

Аlex во многих книгах порты назначаются через int, я пока многих "азов" программирования не знаю, еще не во всем разобрался. Во многих книгах все по разному.

Код: Выделить всё

#define pumpPin 12 //вывод порта на реле управления насосом
#define ledPin 7 //вывод порта на светодиод 1
#define ledPin1 8  //вывод порта на светодиод 2
#define analogPin 1  //вход порта подключенного к датчику

void setup() 
{
pinMode (pumpPin, OUTPUT); // выход для 12 порта 
pinMode (ledPin, OUTPUT); // выход для 7 порта
pinMode (ledPin1, OUTPUT); //выход для 8 порта
}

void loop() //включение программы
{
val = analogRead (analogPin);
if (val<800) //значение для включения насоса
 {
digitalWrite (pumpPin, HIGH);
digitalWrite (ledPin, HIGH);
digitalWrite (ledPin1, LOW);
 }
 if (val>900) //значение для отключения насоса
 {
digitalWrite (pumpPin, LOW);
digitalWrite (ledPin, LOW);
digitalWrite (ledPin1, HIGH);
 }
при компиляции ругается на эту строчку val = analogRead (analogPin);
пробовал добавлять #define val=0 начал ругаться на эту строку.
Контактная информация:
Друг Кота
Сообщения: 19495
Зарегистрирован: Чт фев 20, 2014 18:57:55

Сообщение Morroc »

а вот int val как раз надо было оставить.
вам надо книжку по C какую нибудь полистать, а не по ардуинам/мк
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Сообщение arkhnchul »

и я примерно про это :dont_know: Почему и где #define, что за нафиг такой "директива препроцессора", compile-time/run-time, типы переменных - не на примерах ардуины/мк осиливать надо.
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

topler писал(а): при компиляции ругается на эту строчку val = analogRead (analogPin);
А когда компилятор ругается, Вы не смотрите его ругань ? Он всегда пишет что ему не нравится.
А ругался он у Вас на неопределение val. Как уже выше сказали - не надо его вырезать. А Вы, по всей видимости, повырезали все определения, а не только те, которые я написал :)

-----------------------------------------------------------------------
Немножко оффтопных вопросов:
1. Можно ли под ардуину получать готовые .hex-файлы, а лучше .cof ? Нужно для эмуляции в протеусе.
2. Если на вопрос №1 - "Да", то ткните плиз носом в необходимые для скачивания страничики. Не хочется особо заморачиваться с разборками что нужно, откуда брать и т.д...

Для чего мне это ?
Часто вижу на форумах просьбы о помощи с ардуиновскими кодами, помочь хочется, а никак.
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 24
Зарегистрирован: Ср сен 04, 2013 22:31:48
Откуда: Усть-Катав

Сообщение topler »

Morroc Как говориться учение свет, не учение тьма, Скину книги по программированию С, будем читать))
arkhnchul Вот и я тоже не совсем понял. Что интересно в книгах про ардуино, и прочие м/к программирование с использованием аналоговых входов, мало объясняется, и везде по разному. :roll:
Аlex я малость запутался в начале) Потом вроде разобрался)
Контактная информация:
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Сообщение arkhnchul »

Аlex писал(а):1. Можно ли под ардуину получать готовые .hex-файлы, а лучше .cof ? Нужно для эмуляции в протеусе.
при выполнении Compile ардуинская недоIDE создает в своем временном каталоге новый каталог с именем типа build3334007309353706474.tmp и складывает туда .o, .elf и .hex. У меня временный каталог - /tmp , в винде в недрах Documents and Settings. Ну и вообще можно тупо avr-gcc все собрать в обход среды.
Аlex писал(а):2. Если на вопрос №1 - "Да", то ткните плиз носом в необходимые для скачивания страничики. Не хочется особо заморачиваться с разборками что нужно, откуда брать и т.д...
https://www.arduino.cc/en/Hacking/BuildProcess
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Сообщение arkhnchul »

topler писал(а):Что интересно в книгах про ардуино, и прочие м/к программирование с использованием аналоговых входов, мало объясняется, и везде по разному. :roll:
в них предполагается, что вы уже знаете язык. Демонстрционные примеры просто показывают принципы работы конкретного железа/библиотек.
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

arkhnchul писал(а):https://www.arduino.cc/en/Hacking/BuildProcess
Зашёл в раздел Download, чё-то качаю :) Сейчас глянем что там...
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

arkhnchul писал(а):и складывает туда .o, .elf и .hex.
Вощем вроде всё поставил, опробовал. Но создаёт при експорте бинарного файла только .hex, и то нерабочий (в протезе не работает).
И ещё, при открытии странички хелпа, она вешает мой браузер (Опера) наглухо...
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Всё, разобрался. Нашёл ещё библиотеку для протеза.
arkhnchul, спасибо !

Осталось с хелпом разобраться... :roll:
Друг Кота
Сообщения: 19495
Зарегистрирован: Чт фев 20, 2014 18:57:55

Сообщение Morroc »

В протеусе можно без hex с ардуиной работать - прямо со скетчем и ардуина целиком там как элемент есть, вы об этом ? Оно правда как то ставится криво ( proteus 8 ), мне пришлось все сносить (и протеус и все ide ардуины) чтобы по инструкции потом все это поднять (видео вроде прям там в протеусе и есть) - иначе не работало нормально.
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Ответить

Вернуться в «Разные вопросы по МК»