#include <LiquidCrystal_I2C.h> //includerea librariilor utilizate
#include <Wire.h>
#include <wire.h>
#define TRIGPIN 6 //Pin to send trigger pulse
#define ECHOPIN 7 //pin to receive echo pulse
#define buton1 11
#define buton2 10
#define buton3 8
#define buton4 9
#define PompaAlimentare 5
LiquidCrystal_I2C lcd(0x27, 20, 2); //Set the lcd address to 0x27 for a 16 chars and 2 line display
float nivel_de_referinta = 16.0;
int Hmax = 29.5;
float eroarea = 0.0;
float eroarea_anterioara = 0.0;
float integrala = 0.0;
float integrala_anterioara = 0.0;
float kp=100, ki=1.5, kd=0.02;
float PID_P=0, PID_I=0, PID_D=0;
float marimea_de_comanda = 1.0;
double nivel_masurat=0.0;
int pushButton1=1;
int pushButton2=1;
int pushButton3=1;
int pushButton4=1;
float delta=0.1; //perioada de esantionare in secunde
int ok=0;
long interval = 500;
long previousMillis=0;
byte sensorInterrupt = 0; //0=digital pin 2
byte sensorPIN = 2;
float calibrationFactor = 150;
volatile byte pulseCount;
float flowRate;
unsigned int flowMilliLitres;
unsigned longMilliLitres;
unsigned long oldTime;
void setup() {}
Wire.begin();
Serial.begin(9600);
pinMode(buton1, INPUT_PULLUP);
pinMode(buton2, INPUT_PULLUP);
pinMode(buton3, INPUT_PULLUP);
pinMode(buton4, INPUT_PULLUP);
pinMode(buton1, INPUT_PULLUP);
pinMode(ECHOPIN,INPUT);
pinMode(TRIGPIN,OUTPUT)
pinMode(PompaAlimentare,OUTPUT);
pinMode(sensorPin,INPUT);
digitalWrite(sensorPin,HIGH);
pulseCount = 0;
flowRate = 0.0;
flowMilliLitres = 0;
totalMilliLitres = 0;
oldTime = 0;
attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
lcd.backlight();
lcd.init();
void pulseCounter()
{
pulseCount++;
}
void loop() {
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
lcd.setCursor(0,0);
lcd.print("Ref=");
lcd.print(nivel_de_referinta-1,1);
lcd.print("cm");
lcd.setCursor(0,1);
lcd.print("H=");
lcd.print(nivel_masurat, 1);
lcd.print("cm");
lcd.setCursor(11,0);
lcd.print("FlowR");
lcd.setCursor(9,1);
lcd.print(flowRate,1);
lcd.print("l/m");
previousMillis = currentMillis;
}
digitalWrite(TRIGPIN,LOW);
delayMicroseconds(2);
digitalWrite(TRIGPIN,HIGH);
delayMicroseconds(10);
digitalWrite(TRIGPIN,LOW);
nivel_masurat = Hmax - ((pulseIn(ECHOPIN, HIGH))*0.034/2);
if((millis() - oldTime) > 1000) {
detachInterrupt(sensorInterrupt);
flowRate = ((1000.0/(millis() - oldTime)) * pulseCount)/calibrationFactor;
oldTime = millis();
}
flowMilliLitres = (flowRate/60)*1000;
totalMilliLitres += flowMilliLitres;
pushButton1 = digitalRead(buton1);
pushButton2 = digitalRead(buton2);
pushButton3 = digitalRead(buton3);
pushButton4 = digitalRead(buton4);
if (pushButton1 == LOW)
nivel_de_referinta = nivel_de_referinta -1;
if (pushButton2 == LOW)
nivel_de_referinta = nivel_de_referinta +1;
if(nivel_de_referinta < 4)
nivel_de_referinta = 4;
if (nivel_de_referinta > 24)
nivel_de_referinta = 24;
if (pushButton1 == LOW || pushButton2 == LOW)
delay(500);
if(pushButton4 == LOW)
{ ok = 0;
analogWrite(PompaAlimentare, marimea_de_comanda);
marimea_de_comanda = 0; }
if(pushButton3 == LOW || ok==1) {
ok=1;
}
eroarea = nivel_de_referinta - nivel_masurat;
integrala = integrala_anterioara + (eroarea + eroarea_anterioara)/2.0 * delta;
PID_P= kp * eroarea;
PID_I = ki * integrala;
PID_D = kd * ((eroarea - eroarea_anterioara)/delta);
eroarea_anterioara = eroarea;
integrala_anterioara = integrala;
marimea_de_comanda = PID_P + PID_I + PID_D;
if(eroarea <=0)
{ marimea_de_comanda = 10;
}
if(marimea_de_comanda > 255.0)
{ marimea_de_comanda = 255.0;
analogWrite(PompaAlimentare, marimea_de_comanda);
}
pulseCount = 0;
attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
Serial.print("nivel de referinta =");
Serial.print(nivel_de_referinta);
Serial.print("nivel masurat =");
Serial.print(nivel_masurat);
Serial.print("flowRate = ");
Serial.print(flowRate);
}
Please let the IDE format your code (CTRL-T).
Please copy the full error message and the offending line.
That looks like a trouble maker.
One '}' too soon.
1 Like
Your setup () stuff is not inside, not within, braces.
void setup() {
Wire.begin();
Serial.begin(9600);
pinMode(buton1, INPUT_PULLUP);
pinMode(buton2, INPUT_PULLUP);
pinMode(buton3, INPUT_PULLUP);
pinMode(buton4, INPUT_PULLUP);
//pinMode(buton1, INPUT_PULLUP);
pinMode(ECHOPIN,INPUT);
pinMode(TRIGPIN,OUTPUT);
pinMode(PompaAlimentare,OUTPUT);
// pinMode(sensorPin,INPUT);
digitalWrite(sensorPin,HIGH);
pulseCount = 0;
flowRate = 0.0;
flowMilliLitres = 0;
totalMilliLitres = 0;
oldTime = 0;
attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
lcd.backlight();
lcd.init();
}
You need to do something about sensorPin - that matter requires attention and / or revision.
Oops.
Why?
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.