Управление Servo нужна помощь

serghs
Offline
Зарегистрирован: 06.10.2016

Всем привет кто зашол.

Такая вот беда у "сильного" чайника, тоесть у меня. В програмировании на 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); 

}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

serghs пишет:

так что готов вознагродить.

Лучше перепостить в специальное место.

serghs
Offline
Зарегистрирован: 06.10.2016

не нашол где,как перепостить. о какой сумме речь идет.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

С моей стороны, ни о какой. Я не предлагаю это сделать, я лишь сказал, что там специальное место для возмездных услуг и там тусуются люди, которые эти услуги оказывают.

А перепостить просто, зайдите в ту ветку и запостите "заново".