Здравствуйте уважаемые форумчане! прошу Вашей помощи. Суть проекта такова: Контроллер сравнения температуры по трем датчикам DS 18b20 и управление двумя клапанами на сервомашинках. сделал примитивный скетч. всё работает, но сервушки подрагивают в какой-то момент цикла, либо по началу цикла, либо по окончании. Мелочь, а неприятно. учитывая, что они должны быть на "боевом дежурстве" круглосуточно минимум 5 месяцев в году, полагаю, что это приведет к преждевременному износу управляющего резистора. Логика скетча следующая: температура меньше 18 С клапана закрыты. больше- сравнивается температура А и В соответственно клапана - один закрыт другой открыт. выборка по температуре будет 1 раз в 5 минут. Виделось применить функцию servo.detach(), но не могу справится с ней . Буду признателен за совет. С уважением Роман. Код (C++): #include <OneWire.h> #include <DallasTemperature.h> #include <LiquidCrystal.h> #include <Servo.h> Servo myservo; Servo myservo2; OneWire oneWire(10); // вход датчиков 18b20 DallasTemperature ds(&oneWire); LiquidCrystal lcd(2, 3, 4, 5, 6, 7); DeviceAddress sensor1 = {0x28, 0xFF, 0xC, 0xB, 0x93, 0x15, 0x1, 0x7C}; DeviceAddress sensor2 = {0x28, 0xFF, 0xE3, 0x1B, 0x93, 0x15, 0x1, 0xF1}; DeviceAddress sensor3 = {0x28, 0xFF, 0xD8, 0x39, 0x93, 0x15, 0x1, 0x72}; DeviceAddress sensor4 = {0x28, 0xFF, 0xEE, 0x41, 0x93, 0x15, 0x1, 0xDE}; void setup() { //Serial.begin(9600); ds.begin(); lcd.begin(16, 2); lcd.clear(); myservo.attach(9); myservo2.attach(8); pinMode (11,OUTPUT); pinMode (12,OUTPUT); pinMode (1,OUTPUT); pinMode (0,OUTPUT); } void loop() { ds.requestTemperatures(); // считываем температуру с датчиков lcd.setCursor(0, 0); lcd.print("T sun kol:"); lcd.print(ds.getTempC(sensor1)); // отправляем температуру lcd.print("C"); lcd.setCursor(0, 1); lcd.print("T air :"); lcd.print(ds.getTempC(sensor4)); lcd.print("C"); delay (3000); lcd.setCursor(0, 0); lcd.print("T home :"); lcd.print(ds.getTempC(sensor3)); lcd.print("C"); lcd.setCursor(0, 1); lcd.print("Tveranda :"); lcd.print(ds.getTempC(sensor2)); lcd.print("C"); delay (3000); int temps1 = ds.getTempC(sensor1); int temps2 = ds.getTempC(sensor2); int temps3 = ds.getTempC(sensor3); if ( temps1 >18) { if (temps2>temps3) { myservo.write(112); myservo2.write(85);// digitalWrite (11,HIGH);// горит зеленый веранды digitalWrite (12,LOW); digitalWrite (1,HIGH);// горит красный комнаты digitalWrite (0,LOW); } else { myservo.write(30); myservo2.write(175); //Serial.print("Home gate");// забор воздуха с комнаты digitalWrite (11,LOW); digitalWrite (12,HIGH);// горит красный веранды digitalWrite (0,HIGH);// горит зеленый комнаты digitalWrite (1,LOW); } } else { myservo.write(115); myservo2.write(175); digitalWrite (11,LOW); digitalWrite (12,HIGH); digitalWrite (0,LOW); digitalWrite (1,HIGH); } }
пробую. ругается. что-то неправильно пишу в скетче наверно Код (C++): if (temps3>temps2) { myservo.attach(9); myservo2.attach(8); myservo.write(30); myservo2.write(175); delay (1000); myservo.detach(9); myservo2.detach(8); //Serial.print("Home gate");// забор воздуха с комнаты digitalWrite (11,LOW); digitalWrite (12,HIGH);// горит красный веранды digitalWrite (0,HIGH);// горит зеленый комнаты digitalWrite (1,LOW); } } else { myservo.attach(9); myservo2.attach(8); myservo.write(115); myservo2.write(175); delay (1000); myservo.detach(9); myservo2.detach(8); //Serial.print("the gate is close"); digitalWrite (11,LOW); digitalWrite (12,HIGH); digitalWrite (0,LOW); digitalWrite (1,HIGH); } } пишет no matching function for call to ' servo:: detach (int)'
спасибо заработало. странно, когда подключаешь нужно писать номер контакта, а когда отключаешь-нет. сам бы не вжисть не до пер бы. еще раз спасибо.
Если можно тогда еще один вопрос? как её открыть и где почитать? я правда ещё до этого не дообразовывался.