Ошибки в скейче

Grom_001
Offline
Зарегистрирован: 11.03.2020

Прошу сильно не ругать, я полный новичок. 

Есть код который мне нужно использовать в своих целях, при компиляции вылетают ошибки. Часть поправил, а часть вводят меня в ступор. 

 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;

не могу понять что от меня хотят? Вроде в строке все правильно, объявляются переменные.

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

А полностью скетч выложить? Что-то с религией?  Или таки, помолясь, можно? :-)

Давайте!

Grom_001
Offline
Зарегистрирован: 11.03.2020

ЕвгенийП пишет:

А полностью скетч выложить? Что-то с религией?  Или таки, помолясь, можно? :-)

Давайте!

Да не, с религий все нормально, с верой сложнее. Просто имеет ли смысл выкладывать 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;
   }
}
 
Вот ошибки:
 
Arduino: 1.8.12 (Windows 10), Плата:"Arduino Uno"
 
kontroller_v1:70:25: error: expected unqualified-id before ',' token
 
  float Kp, Ki, Kd ,DHT_H, DHT_T;
 
                         ^
 
D:\2\kontroller_v1\kontroller_v1.ino: In function 'void loop()':
 
kontroller_v1:336:26: error: expected primary-expression before '=' token
 
   if (isnan(h) ) { DHT_H = 0;flag_dht_error=1;} else {DHT_H=h;flag_dht_error=0; }
 
                          ^
 
kontroller_v1:336:60: error: expected primary-expression before '=' token
 
   if (isnan(h) ) { DHT_H = 0;flag_dht_error=1;} else {DHT_H=h;flag_dht_error=0; }
 
                                                            ^
 
kontroller_v1:468:8: error: expected primary-expression before ';' token
 
 w=DHT_H;
 
        ^
 
D:\2\kontroller_v1\menu.ino: In function 'void Frame_1()':
 
menu:187:52: error: expected primary-expression before ',' token
 
      if (flag_dht_error==0){   display.print( DHT_H,0);  display.println( " %");} else  {display.println( "ERR");}
 
                                                    ^
 
exit status 1
expected unqualified-id before ',' token
 
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Имеет, только лучше их под спойлер прятать

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

Нельзя использовать DHT_H в качестве имени переменной, т.к. константа с таким именем уже есть в файле "dht.h". Переименуйте.