Управление Servo нужна помощь
- Войдите на сайт для отправки комментариев
Чт, 06/10/2016 - 17:29
Всем привет кто зашол.
Такая вот беда у "сильного" чайника, тоесть у меня. В програмировании на IDE ток,ток начинаю.
Своял во flowcode програмку, "управление сервоприводом и насосом" и в интернете нашел нужный код на IDE написанный для терморегулятора. Хочу это все совместить. Но знаний не хватает. Помогите интегрировать из flowcoda в IDE. Понимаю что для гуру в этом деле не составит труда, так что готов вознагродить.
.fcf_avr приложил: https://yadi.sk/d/wNzU9zONwMuun
Код термостата:
// Термостат, до пяти датчиков DS18B20.
// Автоматическое определение количества датчиков на
// шине, установка температуры и хранение в энергонезависимой
// памяти на каждый выход.
// подробнее
// v 0.2 beta
#include <EEPROM.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>
const byte OUT[5] = {13, 12, 11, 3, 2}; // номера выходов
byte pos;
byte tempOUTon[5]; // массив с температурой включения выхода
float tempSensor[5]; // массив куда читается температура
byte qty; // количество градусников на шине
OneWire oneWire(15); // A1 вход датчиков 18b20
DallasTemperature ds(&oneWire);
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
byte gradus[8] = {
0b00110,
0b01001,
0b01001,
0b00110,
0b00000,
0b00000,
0b00000,
0b00000
};
byte on[8] = {
0b00110,
0b01111,
0b11111,
0b11111,
0b11111,
0b11111,
0b11110,
0b01100
};
void readSet(){
for (byte i = 0; i < qty; i++) tempOUTon[i] = EEPROM.read(i);
}
void outOff(){ // выключает выходы
for (byte i = 0; i < qty; i++) digitalWrite(OUT[i], LOW);
}
void erorr(){ // останавливает работу программы и сигнализирует ошибку
outOff(); // выключаем выходы
while(1){ // крутим бесконечный цикл
analogWrite(10, 100);
delay(500);
analogWrite(10, 255);
delay(500);
}
}
////
byte key(){ //// для кнопок ЛСДшилда
int val = analogRead(0);
if (val < 50) return 5;
else if (val < 150) return 3;
else if (val < 350) return 4;
else if (val < 500) return 2;
else if (val < 800) return 1;
else return 0;
}
////
void setMenu(byte pos){ // установка температуры
outOff();
lcd.clear();
while(1){ // крутим бесконечный цикл
byte KEY = key(); // читаем состояние кнопок
lcd.setCursor(2, 0); // выводим на экран
lcd.print("Out:");
lcd.print(pos+1);
lcd.setCursor(9, 0);
lcd.print("Pin:");
lcd.print(OUT[pos]);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(" PinON: ");
lcd.print(tempOUTon[pos]);
lcd.write(1);
lcd.print("C <>");
if (KEY == 2) { // если нажата кнопка
tempOUTon[pos]--; // изменяем значение
if (tempOUTon[pos] > 125) tempOUTon[pos] = 0;
EEPROM.write(pos, tempOUTon[pos]); // сохраняем в еепром
}
else if (KEY == 5){
tempOUTon[pos]++;
if (tempOUTon[pos] > 125) tempOUTon[pos] = 0;
EEPROM.write(pos, tempOUTon[pos]);
}
delay(200);
}/////
}//
void getTemp(){ // читаем температуру и заполняем массив
ds.requestTemperatures();
for (int i = 0; i < qty; i++) tempSensor[i] = ds.getTempCByIndex(i);
}
void setup() {
Serial.begin(9600);
ds.begin();
qty = ds.getDeviceCount(); // количество датчиков на шине
if (qty > 5) qty = 5;
// if (qty < 5) erorr(); // проверка количества датчиков
for (int i = 0; i < qty; i++) pinMode(OUT[i], OUTPUT);
for (int i = 0; i < qty; i++) digitalWrite(OUT[i], LOW);
lcd.createChar(1, gradus);
lcd.createChar(2, on);
lcd.begin(16, 2);
lcd.clear();
readSet(); // читаем настройки из еепром
}
void loop() {
///// обработка кнопок
if (key() == 1) setMenu(pos); // если нажата селект, уходим в настройки
else if (key() == 4 && pos < qty-1) pos++; // крутим позицию
else if (key() == 3 && pos != 0) pos--;
getTemp(); // читаем температуру с датчиков
//// сверяем температуру и управляем выходами
for (int i = 0; i < qty; i++) {
if (tempSensor[i] < tempOUTon[i]) digitalWrite(OUT[i], HIGH);
else digitalWrite(OUT[i], LOW);
}
/////// вывод инфы на экран
lcd.setCursor(0, 0);
lcd.print(pos+1);
lcd.print(". ");
lcd.print(tempSensor[pos], 1); // показываем температуру с датчика
lcd.write(1);
lcd.print("C ");
lcd.setCursor(2, 1);
lcd.print(tempOUTon[pos]); // показываем установленную температуру
lcd.write(1);
lcd.print("C ");
lcd.setCursor(11, 0); // рисуем статус выхода
for (int i = 0; i < qty; i++){
if (digitalRead(OUT[i])) lcd.write(2);
else lcd.print(" ");
}
lcd.setCursor(11, 1); // рисуем номера выходов
for (int i = 0; i < qty; i++) lcd.print(i+1);
}
так что готов вознагродить.
Лучше перепостить в специальное место.
не нашол где,как перепостить. о какой сумме речь идет.
С моей стороны, ни о какой. Я не предлагаю это сделать, я лишь сказал, что там специальное место для возмездных услуг и там тусуются люди, которые эти услуги оказывают.
А перепостить просто, зайдите в ту ветку и запостите "заново".