Помогите пожалуйста с кодом!

Тема в разделе "Arduino & Shields", создана пользователем Кирилл Смолин, 7 апр 2013.

  1. Доброго всем вечера.
    Я, как и все новые пользователи Arduino, столкнулся с рядом вопросов.
    Подключил к Uno некую нагрузку и несколько диодов, чтоб сигнализировали о ходе выполнения программы, но при написании скетча для данного процесса столкнулся с проблемой - при использовании функций if ; else - получаю сообщение от системы - error: 'else' without a previous 'if' как с этим бороться пока не понял.

    Вот сам код:
    int drivePin =10;
    int ledPin1 = 9;
    int ledPin2 = 13;
    int clock_pin = 1;
    int reset_pin = 2;
    int i=0;
    int x=0;
    int swithtime = 10000;
    int value = x;

    void setup()
    {
    pinMode(ledPin1,OUTPUT);
    pinMode(ledPin2,OUTPUT);
    pinMode(drivePin, OUTPUT); //
    pinMode(clock_pin, OUTPUT); //
    pinMode(reset_pin, OUTPUT); //
    int i = 0; //
    }

    void shownumber (int num)
    {
    digitalWrite(reset_pin, HIGH); //
    digitalWrite(reset_pin, LOW); //
    while (num --) //
    {
    digitalWrite(clock_pin, HIGH);
    digitalWrite(clock_pin, LOW);
    }
    }
    void loop()
    {

    {
    i++;
    shownumber(i);
    }
    x++;
    while (x=8)
    {
    if (x<=2)

    digitalWrite(drivePin,HIGH); // Напрвление вращения
    digitalWrite(ledPin1,HIGH);
    digitalWrite(ledPin2,LOW);
    delay(swithtime*(x)); //

    digitalWrite(drivePin,LOW);
    digitalWrite(ledPin1,LOW); //
    digitalWrite(ledPin2,HIGH);
    delay (swithtime); // остановка агрегации

    else if (x>2;x<=4);

    digitalWrite(drivePin,HIGH); //
    digitalWrite(ledPin1,HIGH);
    digitalWrite(ledPin2,LOW); //
    delay(swithtime*x);

    digitalWrite(drivePin,LOW);
    digitalWrite(ledPin1,LOW);
    digitalWrite(ledPin2,HIGH);
    delay (swithtime*(x/2);

    else (x>4;x<=8);


    digitalWrite(drivePin,HIGH); //
    digitalWrite(ledPin1,HIGH);
    digitalWrite(ledPin2,LOW);//
    delay(swithtime*x); //

    digitalWrite(drivePin,LOW); //
    digitalWrite(ledPin1,LOW);
    digitalWrite(ledPin2,HIGH);
    delay (swithtime*(x/2)); //

    }
    }
     
  2. r0c

    r0c Нерд

    else if (x>2;x<=4); не если если- что за команда?
     
  3. Megakoteyka

    Megakoteyka Оракул Модератор

    Неправильное использование оператора if...else. Отформатируйте код и сами все поймете.
     
  4. Unixon

    Unixon Оракул Модератор

    Плохой стиль. Нет const перед int, все имена в разном стиле.
    Назовите пины одинакого, например PIN_DRIVE, PIN_CLOCK.

    Зачем тут еще одна локальная переменная?
    Это выражение не имеет отношения к переменной выше, это вы новую объявили.

    О, феерия! Присваивание в условии цикла и в итоге поведение while (true).
    Используйте "==" для сравнения, константу всегда пишите в сравнении первой, а переменную последней, так вас сам компилятор застрахует от подобных ошибок.

    Скобки зачем?

    Что это за запись? Если вы имели ввиду "И то И другое", тогда это пишется "if ((x>2) && (x<=4))", ну и точки с запятой ";" в конце не нужно.

    Пишите код с открытыми глазами, очень рекомендую, будет намного лучше. :)
     
  5. pasha08

    pasha08 Нерд

    И еще: после if( как и после else) нужны фигурные скобки между которыми сам код, выполняющийся при определённом условии.
     
  6. Большое спасибо, опыта нет совсем, поэтому элементарные ошибки, попробую вечером переписать и сообщу о результате. Еще раз спасибо.
     
  7. Megakoteyka

    Megakoteyka Оракул Модератор

    Если строка кода только одна, то скобки можно не ставить.
    Код (Text):
    if(a < 5)
      b = 20;
    else
      b = a + 1;
     
  8. pasha08

    pasha08 Нерд

    Спасибо, не знал)
     
  9. Megakoteyka

    Megakoteyka Оракул Модератор

    То же самое относится к циклам for, while, do..while.
     
  10. Unixon

    Unixon Оракул Модератор

    Но лучше все же ставить сразу, чтобы потом не забыть.
     
  11. Спасибо некоторый моменты в коде сработали, но все равно ругается копилятор. -
    FilmProcessing_3.ino: In function 'void loop()':
    FilmProcessing_3:52: error: expected `(' before 'else'
    на строку -
    if else ((x>2)&&(x<=4))
    при условии что в цикле if в начале и в конце как и было написано ранее ( а мной не досмотрено в начале) стоит { и } соответственно.

    либо что-то не так либо я ...
     
  12. Unixon

    Unixon Оракул Модератор

    Что еще за "if else" ?!

    Код (Text):

    if (condition)
    {
     // ...
    }
    else
    {
     // ...
    }
     
    Если положительная ветка вообще не нужна, тогда

    Код (Text):

    if (!condition)
    {
     // ...
    }
     
     
  13. прям сейчас поменял, вы конечно извините - но я выложу код и то что мне выдал на компилятор

    int drive_pin =10;
    int led_pin1 = 9;
    int led_pin2 = 13;
    int led_pin3 = 11;
    int clock_pin = 1;
    int reset_pin = 2;
    int x=0;
    int value = x;
    int swithtime = 10000;


    void setup()
    {
    pinMode(led_pin1,OUTPUT); // Зеленый диод
    pinMode(led_pin2,OUTPUT); // желтый диод
    pinMode(led_pin3,OUTPUT); // красный диод
    pinMode(drive_pin, OUTPUT); // Выход на вращение мотора
    pinMode(clock_pin, OUTPUT); // Выход на счетчик
    pinMode(reset_pin, OUTPUT); // Выход на сброс счетчика
    int x = 0; // Изначально установлены показания счетчика
    }

    void shownumber (int num)
    {
    digitalWrite(reset_pin, HIGH); //
    digitalWrite(reset_pin, LOW); //
    while (num --) //
    {
    digitalWrite(clock_pin, HIGH);
    digitalWrite(clock_pin, LOW);
    }
    }
    void loop()
    {

    {
    x++;
    shownumber(x);
    }
    while (x==8);
    {
    if (x<=2)
    {
    digitalWrite(drive_pin,HIGH); // Вращаем мотор
    digitalWrite(led_pin1,HIGH); // зеленый горит
    digitalWrite(led_pin2,LOW); // желтый не горит
    delay(swithtime*x); //

    digitalWrite(drive_pin,LOW);
    digitalWrite(led_pin1,LOW); //
    digitalWrite(led_pin2,HIGH);
    delay (swithtime); // остановка агрегации
    }
    else ((x>2)&&(x<=4))
    {
    digitalWrite(drive_pin,HIGH); //
    digitalWrite(led_pin1,HIGH);
    digitalWrite(led_pin2,LOW); // Скорость вращения
    delay(swithtime*x); // Время второй агригации

    digitalWrite(drive_pin,LOW);
    digitalWrite(led_pin1,LOW);
    digitalWrite(led_pin2,HIGH);
    delay (swithtime*(x/2);
    }
    else ((x>4)&&(x<=8))
    {
    digitalWrite(drive_pin,HIGH);
    digitalWrite(led_pin1,HIGH);
    digitalWrite(led_pin2,LOW);
    delay(swithtime*x); //

    digitalWrite(drive_pin,LOW);
    digitalWrite(led_pin1,LOW);
    digitalWrite(led_pin2,HIGH);
    delay (swithtime*(x/2));
    }
    }
    digitalWrite(led_pin3,HIGH);
    delay(30000);
    }

    а ругается вот так -

    FilmProcessing_3.ino: In function 'void loop()':
    FilmProcessing_3:56: error: expected `;' before '{' token
    FilmProcessing_3:67: error: 'else' without a previous 'if'
    FilmProcessing_3:68: error: expected `;' before '{' token
     
  14. я не до конца понимаю что он хочет при условии что все, вроде, соблюдено.
    я пишу что вы советуете и что он хочет, но при этом компилятор все равно шумит
     
  15. Unixon

    Unixon Оракул Модератор

    Глядя на этот код, компилятор совершенно не понимает, что вы от него хотите.
     
  16. я хочу чтоб он включал нагрузку при определенных условиях.
    Я посмотрел в интернете и на Вики Амперки как это реализуют, но по итогу действительность не совпадает с теорией, по тех части нет проблем я все решаю быстро а по программной части пока одни вопросы и большинство без ответов.
    Если вас не затруднит подсказать что не так ( не надо переписывать за меня код) вы про себя подумаете - и не собирался и мне не интересно а сказать что не так, вам может не в тягость (хотя я, скорее всего, не первый такой НУБ), а мне полезно. Критика принимается, но без нецензурной брани.
     
  17. pasha08

    pasha08 Нерд

    Я понял что вы имели ввиду под if else. Там надо было написать else if.
     
  18. я так уже писал не помогает, специально сейчас еще раз попробовал = вот ответ лорду Керзону от компилятора -
    FilmProcessing_3.ino: In function 'void loop()':
    FilmProcessing_3:47: error: 'else' without a previous 'if'
     
  19. Для уточнения, я проявляю пленку в определенном режиме, можно все расписать просто по фазам и но если задать промежутки с определенным приростом то будет как надо и проще и изменить легче, так как разные пленки по разному проявляются, а по итогу хочется пустить через потенциометр, но сначала разберусь с этим
     
  20. Unixon

    Unixon Оракул Модератор

    if (...) {...}
    else if (...) {...}
    ...
    else if (...) {...}
    else {...}