Управление 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); }
так что готов вознагродить.
Лучше перепостить в специальное место.
не нашол где,как перепостить. о какой сумме речь идет.
С моей стороны, ни о какой. Я не предлагаю это сделать, я лишь сказал, что там специальное место для возмездных услуг и там тусуются люди, которые эти услуги оказывают.
А перепостить просто, зайдите в ту ветку и запостите "заново".