помогите новичку пожалуйста !!!

blekhs
Offline
Зарегистрирован: 07.06.2017

ПОЖАЛУЙСТА помогите с примером кода 

есть код

int ledPin = 13;

int pwm = 10;

bool state = 0;

int gol = true;

 

void setup()

{              

  Serial.begin(9600);

  Serial.println("HELLO WORLD!!!");

  pinMode (ledPin, OUTPUT);

  pinMode (pwm,OUTPUT);

}

void loop(){

  while (Serial.available() > 0)

  {

    char val = Serial.read();

    if (val == '1') state = !state;

    if(state)

    {

      Serial.println("ON");

      digitalWrite(ledPin, HIGH);

      gol=false;

    }

    else

    {

      Serial.println("OFF");

      digitalWrite(ledPin, LOW);

      gol=true;

    }

if (gol== true)

    {

      for(int i=0;i<=255;i++){

      analogWrite(pwm,i);

      delay(10);

      }

        for(int i=255;i>=0;i--){

        analogWrite(pwm,i);

        delay(10);

        }

 

      }

 

   }

}

мне нужно чтобы циклы "for" повторялись до тех пор пока на измениться переменная "gol".

а в данном случаи циклы "for" выполняется 1 раз

если ставить оператор “while “ то циклы выполняются без конца и нет возможности выхода из цикла!!!

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Новичок!!!!  Помоги нам пожалуйста разобрать твое творенье, вставь код правильно!!!!

blekhs
Offline
Зарегистрирован: 07.06.2017

Это как?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017
blekhs
Offline
Зарегистрирован: 07.06.2017
int ledPin = 13;
int pwm = 10;
bool state = 0;
int gol = true;

void setup()
{               
  Serial.begin(9600);
  Serial.println("HELLO WORLD!!!");
  pinMode (ledPin, OUTPUT);
  pinMode (pwm,OUTPUT);
}
void loop(){
  while (Serial.available() > 0)
  {
    char val = Serial.read();
    if (val == '1') state = !state;
    if(state)
    {
      Serial.println("ON");
      digitalWrite(ledPin, HIGH);
      gol=false;
    }
    else
    {
      Serial.println("OFF");
      digitalWrite(ledPin, LOW);
      gol=true;
    }
//    Serial.println(gol);
while (gol== true)
    {
      for(int i=0;i<=255;i++){
      analogWrite(pwm,i);
      delay(10);
      }
        for(int i=255;i>=0;i--){
        analogWrite(pwm,i);
        delay(10);
        }

      }

   }
}

 

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014
 while (Serial.available() > 0)
  {
    char val = Serial.read();
    if (val == '1') state = !state;
    if(state)
    {
      Serial.println("ON");
      digitalWrite(ledPin, HIGH);
      gol=false;
    }
    else
    {
      Serial.println("OFF");
      digitalWrite(ledPin, LOW);
      gol=true;
    }

вставить в цикл while(gol==true)

blekhs
Offline
Зарегистрирован: 07.06.2017
int ledPin = 13;
int pwm = 10;
bool state = 0;
int gol = true;

void setup()
{               
  Serial.begin(9600);
  Serial.println("HELLO WORLD!!!");
  pinMode (ledPin, OUTPUT);
  pinMode (pwm,OUTPUT);
}
void loop(){
  while (Serial.available() > 0)
  {
    char val = Serial.read();
    if (val == '1') state = !state;
    if(state)
    {
      Serial.println("ON");
      digitalWrite(ledPin, HIGH);
      gol=false;
    }
    else
    {
      Serial.println("OFF");
      digitalWrite(ledPin, LOW);
      gol=true;
    }
//    Serial.println(gol);
while (gol== true) // тот самый оператор!!!
    {
      for(int i=0;i<=255;i++){
      analogWrite(pwm,i);
      delay(10);
      }
        for(int i=255;i>=0;i--){
        analogWrite(pwm,i);
        delay(10);
        }

      }

   }
}

тогда цикл for не останавливается при помощи клавиши 1!

okta
Offline
Зарегистрирован: 10.01.2015

Тогда дополнительно for поменять на while и вставить проверку gol в них доп условием выхода. Ну и сериал проверять на каждом проходе каждого цикла. Это если в лоб делать.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Во-первых.  Приучись давать переменным осмысленные имена.  

Во-вторых.  Попробуй простыми, понятными словами описать, что ты делаешь, и что хочешь получить. 

blekhs
Offline
Зарегистрирован: 07.06.2017

okta пишет:

Тогда дополнительно for поменять на while и вставить проверку gol в них доп условием выхода. Ну и сериал проверять на каждом проходе каждого цикла. Это если в лоб делать.

а можно пример что-то я не понял???

blekhs
Offline
Зарегистрирован: 07.06.2017

DetSimen пишет:

Во-первых.  Приучись давать переменным осмысленные имена.  

Во-вторых.  Попробуй простыми, понятными словами описать, что ты делаешь, и что хочешь получить. 

когда нажимаешь кнопку 1 то загораеться лед на пину 13 

когда нажимаешь ещё раз конпку 1 то пин 13 тужнет и начинает плавно моргать светодиод на пину pwm 10

у меня с оператором if  pwm плавно моргнёт 1 раз

а с оператором while моргает Бесконечно  и не останавливаеться при помощи кнопки1!!!

мне надо чтобы после того когда пин 13 погаснет начинал плавно моргать pwm и после того как я нажму кнопку 1 загорался пин 13 и перестовал моргать pwm!

okta
Offline
Зарегистрирован: 10.01.2015

Вместо for делаем такой цикл (это первый, второй тоже надо переделать):

int i=0;
while(i<=255 && gol){
 analogWrite(pwm,i);
 i++;
 while (Serial.available() > 0){ 
  char val = Serial.read(); 
  if (val == '1'){
   gol=false;
   state=true;
  }
 }
 delay(10);
}

Но сразу говорю, это решение "влоб". Вашу задачу можно решить значительно лучше. И методов тому вагон и маленькая тележка.

b707
Offline
Зарегистрирован: 26.05.2017

blekhs пишет:

когда нажимаешь кнопку 1 то загораеться лед на пину 13 

когда нажимаешь ещё раз конпку 1 то пин 13 тужнет и начинает плавно моргать светодиод на пину pwm 10

у меня с оператором if  pwm плавно моргнёт 1 раз

а с оператором while моргает Бесконечно  и не останавливаеться при помощи кнопки1!!!

мне надо чтобы после того когда пин 13 погаснет начинал плавно моргать pwm и после того как я нажму кнопку 1 загорался пин 13 и перестовал моргать pwm!

надо изучить вот эту тему

И пока не выучите - новых вопросов не задавать

blekhs
Offline
Зарегистрирован: 07.06.2017

СПАСИБО буду пробовать! Просто я новичёк и не знаю всех тонкостей

blekhs
Offline
Зарегистрирован: 07.06.2017

okta пишет:

Вместо for делаем такой цикл (это первый, второй тоже надо переделать):

int i=0;
while(i<=255 && gol){
 analogWrite(pwm,i);
 i++;
 while (Serial.available() > 0){ 
  char val = Serial.read(); 
  if (val == '1'){
   gol=false;
   state=true;
  }
 }
 delay(10);
}

Но сразу говорю, это решение "влоб". Вашу задачу можно решить значительно лучше. И методов тому вагон и маленькая тележка.


А какие есть ещё методы если не сложно?