Всем привет. На днях от друга услышал про такую очень интересную вещь как 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) , то есть при достижении данного значения насос включается и при понижении выключается. Можно ли сделать что бы включение происходило при одном значении, а выключение при другом? Как и писал выше в программировании еще чайник.
Спойлер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 порта
}
Все проверил вроде работает. Спасибо) А можно ли сделать что бы значения включения и выключения менялись к примеру с помощью энкодера, или только жестко настройку можно сделать.
А потом спрашивают "Почему у меня так быстро память МК заканчивается ?"...
Кто же вас, ардуинщиков, учит везде подряд тыкать int'ы ?
И вот вместо этого :
int pumpPin = 12; //вывод порта на реле управления насосом
int ledPin = 7; //вывод порта на светодиод 1
int ledPin1 = 8; //вывод порта на светодиод 2
int analogPin = 1; //вход порта подключенного к датчику
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Если памяти не хватает для управления насосом - всегда можно взять ардуину Мега
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Память нужно экономить всегда, это самый ценный ресурс в МК.
arkhnchul писал(а):человеку надо основные конструкции/приемы языка разобрать
А оптимизация не считается приёмом языка ?
Нужно изначально учиться правильно писать программы. А то так и будет назначать ноги int-переменными, да советы потом давать глупые, в виде флагов из int
Аlex во многих книгах порты назначаются через int, я пока многих "азов" программирования не знаю, еще не во всем разобрался. Во многих книгах все по разному.
а вот int val как раз надо было оставить.
вам надо книжку по C какую нибудь полистать, а не по ардуинам/мк
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
и я примерно про это Почему и где #define, что за нафиг такой "директива препроцессора", compile-time/run-time, типы переменных - не на примерах ардуины/мк осиливать надо.
topler писал(а):
при компиляции ругается на эту строчку val = analogRead (analogPin);
А когда компилятор ругается, Вы не смотрите его ругань ? Он всегда пишет что ему не нравится.
А ругался он у Вас на неопределение val. Как уже выше сказали - не надо его вырезать. А Вы, по всей видимости, повырезали все определения, а не только те, которые я написал
-----------------------------------------------------------------------
Немножко оффтопных вопросов:
1. Можно ли под ардуину получать готовые .hex-файлы, а лучше .cof ? Нужно для эмуляции в протеусе.
2. Если на вопрос №1 - "Да", то ткните плиз носом в необходимые для скачивания страничики. Не хочется особо заморачиваться с разборками что нужно, откуда брать и т.д...
Для чего мне это ?
Часто вижу на форумах просьбы о помощи с ардуиновскими кодами, помочь хочется, а никак.
Morroc Как говориться учение свет, не учение тьма, Скину книги по программированию С, будем читать)) arkhnchul Вот и я тоже не совсем понял. Что интересно в книгах про ардуино, и прочие м/к программирование с использованием аналоговых входов, мало объясняется, и везде по разному. Аlex я малость запутался в начале) Потом вроде разобрался)
Аlex писал(а):1. Можно ли под ардуину получать готовые .hex-файлы, а лучше .cof ? Нужно для эмуляции в протеусе.
при выполнении Compile ардуинская недоIDE создает в своем временном каталоге новый каталог с именем типа build3334007309353706474.tmp и складывает туда .o, .elf и .hex. У меня временный каталог - /tmp , в винде в недрах Documents and Settings. Ну и вообще можно тупо avr-gcc все собрать в обход среды.
Аlex писал(а):2. Если на вопрос №1 - "Да", то ткните плиз носом в необходимые для скачивания страничики. Не хочется особо заморачиваться с разборками что нужно, откуда брать и т.д...
topler писал(а):Что интересно в книгах про ардуино, и прочие м/к программирование с использованием аналоговых входов, мало объясняется, и везде по разному.
в них предполагается, что вы уже знаете язык. Демонстрционные примеры просто показывают принципы работы конкретного железа/библиотек.
arkhnchul писал(а):и складывает туда .o, .elf и .hex.
Вощем вроде всё поставил, опробовал. Но создаёт при експорте бинарного файла только .hex, и то нерабочий (в протезе не работает).
И ещё, при открытии странички хелпа, она вешает мой браузер (Опера) наглухо...
В протеусе можно без hex с ардуиной работать - прямо со скетчем и ардуина целиком там как элемент есть, вы об этом ? Оно правда как то ставится криво ( proteus 8 ), мне пришлось все сносить (и протеус и все ide ардуины) чтобы по инструкции потом все это поднять (видео вроде прям там в протеусе и есть) - иначе не работало нормально.
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /