قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

db2006
:: مهندس متواجد ::
تاريخ التسجيل: Feb 2013
المشاركات: 71
نشاط [ db2006 ]
قوة السمعة:0
قديم 24-05-2016, 09:19 PM المشاركة 1   
ha استفسار بخصوص ال if Twitter FaceBook Google+



الرجاء المساعدة في الدالة

كود:
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);
    cleanSpin();
    delay(1000);
    digitalWrite(DIR, HIGH);
    cleanSpin();
    delay(1000);
    digitalWrite(DIR, LOW);
    cleanSpin();
    delay(1000);
  }

كيف يمكنني جعل البرنامج لا يكمل الا اذا تحقق شرط ال if
شكرا جزيلا على المساعدة

اعلانات

الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,688
نشاط [ عبدالله حجازى ]
قوة السمعة:111
قديم 25-05-2016, 01:57 AM المشاركة 2   
افتراضي اللهم انفعنا بما علمتنا وعلمنا ما ينفعنا وزدنا علما


الرجاء المساعدة في الدالة

كود:
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);
    cleanSpin();
    delay(1000);
    digitalWrite(DIR, HIGH);
    cleanSpin();
    delay(1000);
    digitalWrite(DIR, LOW);
    cleanSpin();
    delay(1000);
  }

كيف يمكنني جعل البرنامج لا يكمل الا اذا تحقق شرط ال if
شكرا جزيلا على المساعدة


ضع أمر الشرط داخل حلقة
كود:
  while
وايضااا اجعل حلقه
كود:
 while
مربوطة بأمر شرط حتى يستطيع البرنامج الخروج منها ..

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 620
نشاط [ مشتاق الله ]
قوة السمعة:0
قديم 25-05-2016, 08:12 AM المشاركة 3   
x4


بسم الله الرحمن الرحيم

السلام عليكم و رحمة الله و بركاته

اخى العزيز ما وضعته جزء من البرنامج لذا من الصعب التحكم فى
برنامج لا نعلم عدد حلقاته و لا ما رفعته جزء من برنامج الرئيسي ام جزء
من دالة , كيف اخرج من شئ لا اعرف كيفية الدخول فيه .
يرجى التوضيح ليمكن المساعدة ان شاء الله.
الله يوفقنا لما يحبه و يرضاه .


الحمد لله الذى بنعمته تتم الصالحات

ان تتلو القران اى تتبعه ولا يتبعك
انا جعلنا القران اهون ما نقرأ
اللهم عظمه فى قلوبنا



db2006
:: مهندس متواجد ::
تاريخ التسجيل: Feb 2013
المشاركات: 71
نشاط [ db2006 ]
قوة السمعة:0
قديم 25-05-2016, 09:14 AM المشاركة 4   
افتراضي


ضع أمر الشرط داخل حلقة
كود:
  while
وايضااا اجعل حلقه
كود:
 while
مربوطة بأمر شرط حتى يستطيع البرنامج الخروج منها ..
مشكور اخي ولكن ممكن توضيح او وضع مثال بسيط


db2006
:: مهندس متواجد ::
تاريخ التسجيل: Feb 2013
المشاركات: 71
نشاط [ db2006 ]
قوة السمعة:0
قديم 25-05-2016, 09:25 AM المشاركة 5   
افتراضي


بسم الله الرحمن الرحيم

السلام عليكم و رحمة الله و بركاته

اخى العزيز ما وضعته جزء من البرنامج لذا من الصعب التحكم فى
برنامج لا نعلم عدد حلقاته و لا ما رفعته جزء من برنامج الرئيسي ام جزء
من دالة , كيف اخرج من شئ لا اعرف كيفية الدخول فيه .
يرجى التوضيح ليمكن المساعدة ان شاء الله.
الله يوفقنا لما يحبه و يرضاه .


الحمد لله الذى بنعمته تتم الصالحات

ان تتلو القران اى تتبعه ولا يتبعك
انا جعلنا القران اهون ما نقرأ
اللهم عظمه فى قلوبنا



مشكور جدا اخي
كود:
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);
}
    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        ");
      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);
}


التعديل الأخير تم بواسطة : db2006 بتاريخ 25-05-2016 الساعة 09:33 AM

مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 620
نشاط [ مشتاق الله ]
قوة السمعة:0
قديم 25-05-2016, 12:27 PM المشاركة 6   
افتراضي


بسم الله الرحمن الرحيم

السلام عليكم و رحمة الله و بركاته

حضرتك لم تضع البرنامج كاملا , لاختباره قبل الرد عليك .
لا يهم , ممكن حضرتك تضع بعد اقواس if
else break;


و ان شاء الله يعمل .

الحمد لله الذى بنعمته تتم الصالحات

ان تتلو القران اى تتبعه ولا يتبعك
انا جعلنا القران اهون ما نقرأ
اللهم عظمه فى قلوبنا




محمد القادري
:: مهندس متواجد ::
تاريخ التسجيل: Jan 2011
المشاركات: 101
نشاط [ محمد القادري ]
قوة السمعة:0
قديم 25-05-2016, 02:07 PM المشاركة 7   
افتراضي


حسب ما فهمت من المطلوب جرب التالي :

كود:


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);
    while(!((analogRead(PRU) > 837) && (analogRead(PRU) < 842)));
     lcd.setCursor(0,1);
  lcd.print("HEATING         ");
    digitalWrite(H, HIGH);
    
    
    delay(1000);
    cleanSpin();
    delay(1000);
    digitalWrite(DIR, HIGH);
    cleanSpin();
    delay(1000);
    digitalWrite(DIR, LOW);
    cleanSpin();
    delay(1000);
  }


db2006
:: مهندس متواجد ::
تاريخ التسجيل: Feb 2013
المشاركات: 71
نشاط [ db2006 ]
قوة السمعة:0
قديم 25-05-2016, 02:46 PM المشاركة 8   
افتراضي


بسم الله الرحمن الرحيم

السلام عليكم و رحمة الله و بركاته

حضرتك لم تضع البرنامج كاملا , لاختباره قبل الرد عليك .
لا يهم , ممكن حضرتك تضع بعد اقواس 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); 

}

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 11:52 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025