Ошибки в скейче
- Войдите на сайт для отправки комментариев
Ср, 11/03/2020 - 11:35
Прошу сильно не ругать, я полный новичок.
Есть код который мне нужно использовать в своих целях, при компиляции вылетают ошибки. Часть поправил, а часть вводят меня в ступор.
int Temp_Ust, Time_motor, pwm1,Delta_t; int Temp_Izm[5]; float Kp, Ki, Kd, DHT_H, DHT_T; byte Day_Temp, H_Ust, Auto_Ust, Pov_Ust, Ohl_Ust, Nasos_Ust, Day_Ust, Eggs_Ust, Time_Pov_Ust, Connect_Ust, My_Hour, My_Minute, Kontrast; byte Servo_O_Ust, Servo_Z_Ust;
вот текст ошибки
kontroller_v1:70:25: error: expected unqualified-id before ',' token
float Kp, Ki, Kd, DHT_H, DHT_T;
не могу понять что от меня хотят? Вроде в строке все правильно, объявляются переменные.
А полностью скетч выложить? Что-то с религией? Или таки, помолясь, можно? :-)
Давайте!
А полностью скетч выложить? Что-то с религией? Или таки, помолясь, можно? :-)
Давайте!
Да не, с религий все нормально, с верой сложнее. Просто имеет ли смысл выкладывать 400 строчек кода. Если компилятор ругается в самом начале при объявлении переменных.
#include <TimeLib.h> #include <DS3232RTC.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_PCD8544.h> #include <Servo.h> #include <EEPROM.h> #include <PID_v1.h> #include <OneWire.h> #include "DHT.h" #include <Servo.h> #define R_On 1 #define R_Off 0 static time_t tLast; time_t t; tmElements_t tm; Servo myservo; // create servo object to control a servo // twelve servo objects can be created on most boards OneWire ds(9); #define DHTPIN 10 // what pin we're connected to #define DHTTYPE DHT22 // DHT 11 || DHT 22 (AM2302) || DHT 21 (AM2301) DHT dht(DHTPIN, DHTTYPE); // pin 3 - Serial clock out (SCLK) // pin 4 - Serial data out (DIN) // pin 5 - Data/Command select (D/C) // pin 6 - LCD chip select (CS) // pin 7 - LCD reset (RST) //Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 6, 7); Adafruit_PCD8544 display = Adafruit_PCD8544(14, 15, 16, 17, 2); //Define Variables we'll be connecting to double Setpoint, Input, Output; //Define the aggressive and conservative Tuning Parameters double aggKp=4, aggKi=0.2, aggKd=1; double consKp=1, consKi=0.05, consKd=0.25; //Specify the links and initial tuning parameters PID myPID(&Input, &Output, &Setpoint, consKp, consKi, consKd, DIRECT); # define ledPin 4 # define PIN_OUTPUT 5 # define PIN_CULLER 6 # define PIN_POVOROT 7 # define Out4 8 # define Key_L 11 # define Key_OK 12 # define Key_R 13 boolean a,b, flag_ds_read, flag_frame_2,flag_pid, Flag_message,Flag_povorot, flag_ds_error,flag_dht_error,flag_servo ; boolean flag_h_up, flag_pov; byte x, flag_key,tt, flag_ohl; int pos, cnt_pwm, time_real, T_Max; byte MenuIndex, MenuEdit, temp_second, t_Ohl,Ds_Ust; unsigned long Time_Key_Long, Time_Ds_Long,Time_DHT_Long,Time_h_up, Time_Pov_Long; int Temp_Ust, Time_motor, pwm1,Delta_t ; int Temp_Izm[5]; float Kp, Ki, Kd ,DHT_H, DHT_T; byte Day_Temp, H_Ust, Auto_Ust,Pov_Ust,Ohl_Ust,Nasos_Ust,Day_Ust,Eggs_Ust,Time_Pov_Ust,Connect_Ust, My_Hour, My_Minute, Kontrast; byte Servo_O_Ust, Servo_Z_Ust; const byte CNT_MENY=20; // кол-во пунктов меню byte Sensor[5][8]= {{0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}}; boolean flag_regulator; const char string_0[] PROGMEM = "TEMjEPATkPA"; const char string_1[] PROGMEM = "BhAdHOCTs"; const char string_2[] PROGMEM = "ABTOMATfKA"; const char string_3[] PROGMEM = "jOBOPOT"; const char string_4[] PROGMEM = "OXhAdcEHfE"; const char string_5[] PROGMEM = "HACOC"; const char string_6[] PROGMEM = "# cHv"; const char string_7[] PROGMEM = "Tfj vgmA"; const char string_8[] PROGMEM = "T jOBOPOTA"; const char string_9[] PROGMEM = "CBv3s"; const char string_10[] PROGMEM = "KOtl. j"; const char string_11[] PROGMEM = "KOtl. f"; const char string_12[] PROGMEM = "KOtl. c"; const char string_13[] PROGMEM = "nACr"; const char string_14[] PROGMEM = "MfHkTr"; const char string_15[] PROGMEM = "KOHTPACT"; const char string_16[] PROGMEM = "T OXh"; const char string_17[] PROGMEM = "cATnfKf"; const char string_18[] PROGMEM = "SERVO O"; const char string_19[] PROGMEM = "SERVO 3"; // Теперь создаем таблицу с отсылками к этим строкам: const char* const string_table[] PROGMEM = {string_0, string_1, string_2, string_3, string_4, string_5, string_6, string_7, string_8, string_9, string_10, string_11, string_12, string_13, string_14,string_15,string_16 ,string_17, string_18,string_19 }; char buffer[14]; const char string0[] PROGMEM = "CTOj"; const char string1[] PROGMEM = "ABTO"; const char string2[] PROGMEM = "HAbP"; const char string3[] PROGMEM = "KAdcrE "; const char string4[] PROGMEM = " n."; const char string5[] PROGMEM = "OTKh"; const char string6[] PROGMEM = "BKh"; const char string7[] PROGMEM = "KkPr"; const char string8[] PROGMEM = "bkCf"; const char string9[] PROGMEM = "kTKf"; const char string10[] PROGMEM = "jEPjEhA"; const char string11[] PROGMEM = "fHcuKf"; const char* const string_table1[] PROGMEM = {string0, string1, string2, string3, string4, string5, string6, string7, string8, string9, string10, string11}; struct menu { // Создаём структуру для меню public : byte M_Min; public : byte M_Max; public : byte M_Par; public : byte M_Result; }; // конец структуры struct menu MyMeny[CNT_MENY]; void setup() { byte t, p,i,d; t = EEPROM.read(0);if (t>48){t=0; EEPROM.write(0, t);} Temp_Ust= 576 + t; H_Ust = EEPROM.read(1);if (H_Ust<30 || H_Ust> 80 ){H_Ust=50; EEPROM.write(1, H_Ust);} Auto_Ust = EEPROM.read(2);if (Auto_Ust > 2 ){Auto_Ust=0; EEPROM.write(2, Auto_Ust);} Pov_Ust = EEPROM.read(3);if (Pov_Ust > 24 ){Pov_Ust=0; EEPROM.write(3, Pov_Ust);} Ohl_Ust = EEPROM.read(4);if (Ohl_Ust > 24 ){Ohl_Ust=0; EEPROM.write(4, Ohl_Ust);} Nasos_Ust = EEPROM.read(5);if (Nasos_Ust > 1 ){Nasos_Ust=0; EEPROM.write(5, Nasos_Ust);} Day_Ust = EEPROM.read(6);if (Day_Ust > 31 ){Day_Ust=1; EEPROM.write(6, Day_Ust);} Eggs_Ust = EEPROM.read(7);if (Eggs_Ust > 5 ){Eggs_Ust=0; EEPROM.write(7, Eggs_Ust);} Time_Pov_Ust = EEPROM.read(8);if (Time_Pov_Ust > 200 ){Time_Pov_Ust=0; EEPROM.write(8, Time_Pov_Ust);} Connect_Ust = EEPROM.read(9);if (Connect_Ust > 2 ){Connect_Ust=0; EEPROM.write(9, Connect_Ust);} p = EEPROM.read(10); Kp=0.25 * p; i = EEPROM.read(11); Ki=0.01 * i; d = EEPROM.read(12); Kd=0.1 * d; Kontrast= EEPROM.read(13);if ( Kontrast > 70 || Kontrast <46 ){Kontrast=60; EEPROM.write(13, Kontrast);} t_Ohl= EEPROM.read(14);if ( t_Ohl > 60 ){t_Ohl=60; EEPROM.write(14, t_Ohl);} Ds_Ust= EEPROM.read(15);if (Ds_Ust > 5 || Ds_Ust < 1 ){Ds_Ust=1; EEPROM.write(15, Ds_Ust);} Servo_O_Ust= EEPROM.read(16);if (Servo_O_Ust > 180 ){Servo_O_Ust=180; EEPROM.write(16, Servo_O_Ust);} Servo_Z_Ust= EEPROM.read(17);if (Servo_Z_Ust > 180 ){Servo_Z_Ust=180; EEPROM.write(17, Servo_Z_Ust);} for(int a = 0; a < 5; a++){ for(int i = 0; i < 8; i++) { Sensor[a][i]= EEPROM.read(100+i+(a*8)); }} Time_motor=500*Time_Pov_Ust; // Min,Max,Par,Result MyMeny[0]={0, 48, 1, t}; // Температура 0 MyMeny[1]={30,80, 1, H_Ust}; // Влажность 1 MyMeny[2]={0, 2,1,Auto_Ust}; // Автоматика 2 MyMeny[3]={0,12,3,Pov_Ust}; // Поворот 3 MyMeny[4]={0,24,6,Ohl_Ust}; // Охлаждение 4 MyMeny[5]={0,1,1,Nasos_Ust}; // Насос 5 MyMeny[6]={1,31,1,Day_Ust}; // № дня инкубации 6 MyMeny[7]={0,5,1,Eggs_Ust}; // Тип Яйца 8 MyMeny[8]={0,120,1,Time_Pov_Ust}; // Время поворота 9 MyMeny[9]={0,1,1,Connect_Ust}; // Передача данных 10 MyMeny[10]={0,255,1,p}; // Kp 11 MyMeny[11]={0,255,1,i}; // Ki 12 MyMeny[12]={0,255,1,d}; // Kd 13 MyMeny[13]={0,23,1,0}; // час MyMeny[14]={0,59,1,0}; // мин MyMeny[15]={45,70,1,Kontrast}; // контраст MyMeny[16]={0,60,1,t_Ohl}; // т_охл MyMeny[17]={1,5,1,Ds_Ust}; // ds MyMeny[18]={0,180,1,Servo_O_Ust}; // Servo Open MyMeny[19]={0,179,1,Servo_Z_Ust}; // Servo Close // put your setup code here, to run once: Serial.begin(9600); if (Kp==0 && Kd==0){flag_regulator=0; Delta_t = MyMeny[11].M_Result;} else { flag_regulator=1; myPID.SetTunings(Kp, Ki, Kd); myPID.SetOutputLimits(0, 240);// myPID.SetMode(AUTOMATIC); } pinMode(ledPin, OUTPUT); pinMode(PIN_OUTPUT, OUTPUT); digitalWrite(PIN_OUTPUT, R_Off); // установка порта на выход pinMode(PIN_CULLER, OUTPUT); digitalWrite(PIN_CULLER, R_Off); // установка порта на выход pinMode(PIN_POVOROT, OUTPUT); digitalWrite(PIN_POVOROT, R_Off); // установка порта на выход pinMode(Out4, OUTPUT); digitalWrite(Out4, R_Off); // установка порта на выход pinMode(Key_L, INPUT); digitalWrite(Key_L, HIGH); //подключаем подтягивающий резистор pinMode(Key_OK, INPUT); digitalWrite(Key_OK, HIGH); pinMode(Key_R, INPUT); digitalWrite(Key_R, HIGH); display.begin(); // Инициализация дисплея display.setContrast(Kontrast); // Устанавливаем контраст //display.setContrast(10); // Устанавливаем контраст display.setTextColor(BLACK); // Устанавливаем цвет текста display.setTextSize(1); // Устанавливаем размер текста display.clearDisplay(); // Очищаем дисплей for( int a = 0; a < Ds_Ust; a++) { for( int i = 0; i < 8; i++) { display.print(Sensor[a][i], HEX);} display.println();} display.display(); delay(1000); setSyncProvider(RTC.get); // the function to get the time from the RTC if(timeStatus() != timeSet) { // Serial.println("Unable to sync with the RTC"); display.print("RTC NO");} else{ //Serial.println("RTC has set the system time"); display.print("RTC YES");} display.display(); delay(300); flag_servo = 1; My_servo_drive(); delay(200); Day_Temp= day(); if (day()!=Day_Temp ){Day_Temp= day();Update_Varible(Day_Ust+1, 6);} if (Eggs_Ust>0){ My_Progmem(Eggs_Ust);} //search_ds (Ds_Ust); if (digitalRead(Key_L)==0 && digitalRead(Key_R)==0 ) { for(int a = 0; a < 5; a++){ for(int i = 0; i < 8; i++) { Sensor[a][i]= 0; }} // чистим адреса датчиков search_ds (Ds_Ust); for(int a = 0; a < 5; a++){ for(int i = 0; i < 8; i++) {EEPROM.write(100+i+(a*8), Sensor[a][i]);}} } //=============================================================== } void My_servo_drive(){ myservo.attach(3); // attaches the servo on pin 9 to the servo object display.clearDisplay(); if (flag_servo==1) { myservo.write(Servo_Z_Ust); delay(500); display.println("3") ; } if (flag_servo==0) { myservo.write(Servo_O_Ust); delay(500); display.println("O") ; } display.display(); flag_servo=!flag_servo; myservo.detach(); delay (1000); } void loop() { if (day()!=Day_Temp ){Day_Temp= day();Update_Varible(Day_Ust+1, 6); if (Eggs_Ust>0){ My_Progmem(Eggs_Ust);} } if(millis()> Time_Key_Long){ My_key(); if (flag_key==1) { Key_Pressed(); } Menu_Print(); Time_Key_Long=millis() +250; } // =============== Опрос DS18B20 if (flag_ds_read==0){ My_Ds_Zapros(); Time_Ds_Long=millis(); flag_ds_read=1; }else { if(( millis()- Time_Ds_Long) > 1000){ for(int i = 0; i < Ds_Ust; i++){ Temp_Izm[i]=My_Ds_Otvet(i); } flag_ds_error=1; if (Temp_Izm[0] > 16){ flag_ds_error=0; } flag_ds_read=0; flag_pid =1; } } // ================ Опрос DHT if(( millis()- Time_DHT_Long) > 2000){ float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(t) ) { DHT_T = 0;flag_dht_error=1;} else {DHT_T=t;flag_dht_error=0; } if (isnan(h) ) { DHT_H = 0;flag_dht_error=1;} else {DHT_H=h;flag_dht_error=0; } Time_DHT_Long= millis(); } //====================== регулятор // режим авто if ( flag_pid==1 && Auto_Ust==1 && flag_ohl==0 && flag_ds_error==0 ) { T_Max=0; if (Kp==0 && Kd==0){flag_regulator=0; Delta_t = MyMeny[11].M_Result;} else { flag_regulator=1;} if (flag_regulator==1) { Input = Temp_Izm[0] ; Setpoint = Temp_Ust ; myPID.SetTunings(Kp, Ki, Kd); myPID.SetMode(AUTOMATIC); myPID.Compute(); pwm1=Output; if (Temp_Izm[0]<Temp_Ust-32){Auto_Ust=2;} if (Temp_Izm[0]>Temp_Ust+8) {pwm1=0; if (flag_servo==0) {My_servo_drive();} } if (Temp_Izm[0]<Temp_Ust+4 && flag_servo==1 && flag_pov==0 ){My_servo_drive();} analogWrite(PIN_OUTPUT, pwm1); flag_pid=0; } if (flag_regulator==0) { Delta_t = MyMeny[11].M_Result; if (Temp_Izm[0]>Temp_Ust+Delta_t) { if (flag_servo==0) {My_servo_drive();} } if (Temp_Izm[0]>=(Temp_Ust+(Delta_t/2))) {pwm1=0;digitalWrite(PIN_OUTPUT, R_Off); } if (Temp_Izm[0]<=(Temp_Ust-(Delta_t/2))) {pwm1=255;digitalWrite(PIN_OUTPUT, R_On); if (flag_servo==1) {My_servo_drive();} } } } // режим стоп if (flag_regulator==1) {if (Auto_Ust==0 || flag_ohl==1) {pwm1=0; analogWrite(PIN_OUTPUT, pwm1); }} if (flag_regulator==0) {if (Auto_Ust==0 || flag_ohl==1) {pwm1=0; digitalWrite(PIN_OUTPUT, R_Off); }} // режим нагрев if (Auto_Ust==2 && flag_ohl==0 && flag_ds_error==0) { if (T_Max < Temp_Izm[0]){T_Max=Temp_Izm[0];} if (flag_regulator==1) { if (Temp_Izm[0]<Temp_Ust-32){pwm1=240; analogWrite(PIN_OUTPUT,pwm1);} else{pwm1=0;analogWrite(PIN_OUTPUT,pwm1); Auto_Ust=1;} } if (flag_regulator==0) { if (Temp_Izm[0]<Temp_Ust-32){pwm1=240; digitalWrite(PIN_OUTPUT, R_On);} else{pwm1=0;digitalWrite(PIN_OUTPUT, R_Off);} } } // =============== Охлаждение if (Ohl_Ust>0 && Auto_Ust==1 ){ int time_oxl; time_real=(60 * hour() ) + minute(); // time_oxl=Ohl_Ust*60; time_real=time_real+(Ohl_Ust*60); // проверка времени охлаждения if (((time_real % time_oxl)>= 0) && (time_real % time_oxl < t_Ohl)){ // 15 flag_ohl=1; } else flag_ohl=0; } if (flag_servo==0 && flag_ohl==1 ) {My_servo_drive();} //=============================== // управление влажностью //if ( flag_dht_error==0){ // if (DHT_H> H_Ust+3 && flag_h_up==0){ Time_h_up=millis()+5000; } // if ( Time_h_up> millis() && DHT_H> H_Ust+3){flag_h_up=1;} else {flag_h_up=0;} //} //=============================== // управление вентилятором if (flag_ohl==1 || flag_servo==1 || flag_h_up==1 || flag_pov==1 ) { digitalWrite(PIN_CULLER, R_On);} if (flag_ohl==0 && flag_servo==0 && flag_h_up==0 && flag_pov==0 ) { digitalWrite(PIN_CULLER, R_Off);} // =============== Поворот int time_pov; if (Pov_Ust>0 && Auto_Ust==1 ){ time_real= hour(); // time_real=time_real+Pov_Ust; time_pov=Pov_Ust; if(flag_pov==0) { if ((time_real % time_pov)== 0 && (second()<2) && (minute()==0)) { digitalWrite(PIN_POVOROT, R_On); flag_pov=1; Time_Pov_Long=millis(); Time_Pov_Long=Time_Pov_Long + Time_motor; if (flag_servo==0) {My_servo_drive();}} } if (flag_pov==1){ if ( millis()> Time_Pov_Long ){ digitalWrite(PIN_POVOROT, R_Off); flag_pov=0; } } } if (Serial.available() > 0) { byte s; s = Serial.read(); if (s==97){ Flag_message=1;} } if (Flag_message==1){ Serial.print("("); Serial.write(10); if(Temp_Izm[0]>400){ if (Temp_Izm[0]>654){ Serial.write(654);}else {Serial.write(Temp_Izm[0]-400);}} if(Temp_Izm[0]<=400){Serial.write(401);} byte w; w=DHT_H; Serial.write(w); Serial.write( Day_Ust); Serial.write(0); Serial.write(pwm1); Serial.write(Auto_Ust ); Serial.write(13); Flag_message=0; } }Имеет, только лучше их под спойлер прятать
Нельзя использовать DHT_H в качестве имени переменной, т.к. константа с таким именем уже есть в файле "dht.h". Переименуйте.