بسم الله الرحمن الرحيم
السلام عليكم و رحمة الله و بركاته
حضرتك لم تضع البرنامج كاملا , لاختباره قبل الرد عليك .
لا يهم , ممكن حضرتك تضع بعد اقواس if
else break;
و ان شاء الله يعمل .
الحمد لله الذى بنعمته تتم الصالحات
ان تتلو القران اى تتبعه ولا يتبعك
انا جعلنا القران اهون ما نقرأ
اللهم عظمه فى قلوبنا
|
باركك لله و جعلها في ميزان حسناتك
اخي هذا الكود بالكامل
انا لا اريد ان يكمل البرنامج في تسلسل الاوامر عندما يصل الى الجملة الشرطية if الا اذا تحققت و شكرا جزيلا على المساعدة
كود:
#include <PID_v1.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(3, 4, 5, 6, 7, 8);
#define triacPulse 9
#define TACHO A1
const int PRU = A0;
volatile int row;
volatile int y;
const int DIR = 10;
const int V1 = 11;
const int V2 = 12;
const int H = 13;
const int BT2 = 17;
int count;
int buttonPin = 16;
int buttonState;
int lastButtonState = LOW;
long lastDebounceTime = 0;
long debounceDelay = 50;
double Setpoint, Input, Output;
double Kp=0.15, Ki=0.002, Kd=0.011;
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);
void setup(){
lcd.begin(16, 2);
lcd.setCursor(0,0);
Input = analogRead(TACHO);
Setpoint = 150;
myPID.SetMode(AUTOMATIC);
pinMode(triacPulse, OUTPUT);
pinMode(2, INPUT);
pinMode(buttonPin,INPUT);
pinMode(V1, OUTPUT);
pinMode(V2, OUTPUT);
pinMode(H, OUTPUT);
pinMode(DIR, OUTPUT);
}
void loop(){
myPID.Compute();
int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == HIGH) {
if(count<5)
{
count++;
}
else
{
count=count-4;
}
}
}
}
switch(count)
{
case 1:
lcd.setCursor(0,0);
lcd.print("super clean ");
while(digitalRead(BT2) == HIGH){
lcd.setCursor(0,0);
lcd.print("close door ");
lcd.setCursor(0,0);
delay(1000);
lcd.print("program START ");
delay(1000);
lcd.setCursor(0,0);
lcd.print("Waterin ");
digitalWrite(V1, HIGH);
delay(1000);
cleanSpin();
delay(1000);
digitalWrite(DIR, HIGH);
cleanSpin();
delay(1000);
digitalWrite(DIR, LOW);
cleanSpin();
delay(1000);
if((analogRead(PRU) > 837) && (analogRead(PRU) < 842)){
lcd.setCursor(0,1);
lcd.print("HEATING ");
digitalWrite(H, HIGH);
delay(1000);
}
else {
break;
}
cleanSpin();
delay(1000);
digitalWrite(DIR, HIGH);
cleanSpin();
delay(1000);
digitalWrite(DIR, LOW);
cleanSpin();
delay(1000);
}
break;
case 2:
lcd.setCursor(0,0);
lcd.print("programa 2 ");
break;
case 3:
lcd.setCursor(0,0);
lcd.print("programa terwa ");
break;
case 4:
lcd.setCursor(0,0);
lcd.print("programa 4 ");
break;
case 5:
lcd.setCursor(0,0);
lcd.print("programa 5 ");
break;
}
lastButtonState = reading;
}
void cleanSpin(){
Setpoint = 20;
myPID.SetMode(AUTOMATIC);
attachInterrupt(0, motor, RISING);
}
void motor()
{
row = Output;
y =(-27.45098039 * row)+8000;
delayMicroseconds(y);
digitalWrite(triacPulse, HIGH);
delayMicroseconds(200);
digitalWrite(triacPulse, LOW);
}