Помогите я нуб :( (пишет ошибку 'else' without a previous 'if').

Тема в разделе "Arduino & Shields", создана пользователем FiRe_0K, 1 янв 2017.

Метки:
  1. Igor68

    Igor68 Гуру

    Опять простите за то, что вмешиваюсь!
    inline совсем не для этого. Функция inline для того, чтобы (если это возможно) "встроить" содержимое этой функции внутрь функции её вызывающей. Таким образом не будет загружаться и выгружаться стек и соответственно вызов. Не всегда возможно её применить... то есть она (вункция inline) должна быть построена должным образом - имеется ввиду передаваемые ей параметры.
    Ещё раз извините!
    С Глубоким Уважением!
     
  2. ИгорьК

    ИгорьК Гуру

    Хватит уж извиняться. Вы говорите тезисы и ясно их обосновываете. Все классно!
     
  3. qwone

    qwone Гик

    Куда? в inline setup() или inline loop() . Я в упор других функций не вижу.
     
  4. mcureenab

    mcureenab Гуру

    И я про то же. Или что то не догоняю?

    Код (C++):
    #define OFF(x)        digitalWrite(x, LOW)     //выключить

    void setup()
    {
      OFF(MOTOR);
     
  5. Igor68

    Igor68 Гуру

    В этом месте (inline тут точно не причём, да и незачем):
    Код (C++):
    #define OFF(x)        digitalWrite(x, LOW)     //выключить

    void setup()
    {
      OFF(MOTOR); //в этом месте компилятор при обработке команды препроцессора (#define) вместо того, что есть сам поставит digitalWrite(x, LOW) и параметру "х" присвоит указанное (вроде как MOTOR) значение и только потом приступит к компиляции.

     
    Ребята ведь привели код выше с применением #define. Про inline отдельная тема.
     
  6. qwone

    qwone Гик

    Ну да . Использовать #define вместо const int это как использовать фуру, что бы возить свою жопу по городу. Можно, но очень грубо. Но народ об этом даже не подозревает. Ведь в подключаемых библиотеках #define на #define и #define погоняет. Там он уместен.
     
  7. Igor68

    Igor68 Гуру

    Вас не принуждают... пишите digitalWrite(x, LOW) вместо OFF(x) :)
     
  8. ИгорьК

    ИгорьК Гуру

    "Вечер перестает быть томным..." :)
     
  9. Igor68

    Igor68 Гуру

    Что-то ребята паникуют... печально!:(
     
  10. ИгорьК

    ИгорьК Гуру

    Проверил.
    Код (C++):
    #define pin1 1
    #define pin2 2
    #define pin3 3
    #define pin4 4
    #define pin5 5
    #define pin6 6
    #define pin7 7
    #define pin8 8
    #define pin9 9
    #define pin10 10
    #define pin11 11
    #define pin12 12
    #define pin13 13

    #define time1 10
    #define time2 20
    #define time3 30
    #define time4 40
    #define time5 50
    #define time6 60
    #define time7 70
    #define time8 80
    #define time9 90
    #define time10 100
    #define time11 110
    #define time12 120
    #define time13 130

    byte a = 0;

    void setup() {
        pinMode(pin1, OUTPUT);
        pinMode(pin2, OUTPUT);
        pinMode(pin3, OUTPUT);
        pinMode(pin4, OUTPUT);
        pinMode(pin5, OUTPUT);
        pinMode(pin6, OUTPUT);
        pinMode(pin7, OUTPUT);
        pinMode(pin8, OUTPUT);
        pinMode(pin9, OUTPUT);
        pinMode(pin10, OUTPUT);
        pinMode(pin11, OUTPUT);
        pinMode(pin12, OUTPUT);
        pinMode(pin13, OUTPUT);
    }

    void loop() {
      digitalWrite(pin1, 0);
      digitalWrite(pin2, 0);
      digitalWrite(pin3, 0);
      digitalWrite(pin4, 0);
      digitalWrite(pin5, 0);
      digitalWrite(pin6, 0);
      digitalWrite(pin7, 0);
      digitalWrite(pin8, 0);
      digitalWrite(pin9, 0);
      digitalWrite(pin10, 0);
      digitalWrite(pin11, 0);
      digitalWrite(pin12, 0);
      digitalWrite(pin13, 0);
     
        if( millis() + 1 > time1) digitalWrite(pin1, 1);
        if( millis() + 2 > time2) digitalWrite(pin2, 1);
        if( millis() + 3 > time3) digitalWrite(pin3, 1);
        if( millis() + 4 > time4) digitalWrite(pin4, 1);
        if( millis() + 5 > time5) digitalWrite(pin5, 1);
        if( millis() + 6 > time6) digitalWrite(pin6, 1);
        if( millis() + 7 > time7) digitalWrite(pin7, 1);
        if( millis() + 8 > time8) digitalWrite(pin8, 1);
        if( millis() + 9 > time9) digitalWrite(pin9, 1);
        if( millis() + 10 > time10) digitalWrite(pin10, 1);
        if( millis() + 11 > time11) digitalWrite(pin11, 1);
        if( millis() + 12 > time12) digitalWrite(pin12, 1);
        if( millis() + 13 > time13) digitalWrite(pin13, 1);
    }

    и

    Код (C++):
    const int pin1 = 1;
    const int pin2 = 2;
    const int pin3 = 3;
    const int pin4 = 4;
    const int pin5 = 5;
    const int pin6 = 6;
    const int pin7 = 7;
    const int pin8 = 8;
    const int pin9 = 9;
    const int pin10 = 10;
    const int pin11 = 11;
    const int pin12 = 12;
    const int pin13 = 13;

    const unsigned long time1 = 10;
    const unsigned long time2 = 20;
    const unsigned long time3 = 30;
    const unsigned long time4 = 40;
    const unsigned long time5 = 50;
    const unsigned long time6 = 60;
    const unsigned long time7 = 70;
    const unsigned long time8 = 80;
    const unsigned long time9 = 90;
    const unsigned long time10 = 100;
    const unsigned long time11 = 110;
    const unsigned long time12 = 120;
    const unsigned long time13 = 130;

    byte a = 0;

    void setup() {
        pinMode(pin1, OUTPUT);
        pinMode(pin2, OUTPUT);
        pinMode(pin3, OUTPUT);
        pinMode(pin4, OUTPUT);
        pinMode(pin5, OUTPUT);
        pinMode(pin6, OUTPUT);
        pinMode(pin7, OUTPUT);
        pinMode(pin8, OUTPUT);
        pinMode(pin9, OUTPUT);
        pinMode(pin10, OUTPUT);
        pinMode(pin11, OUTPUT);
        pinMode(pin12, OUTPUT);
        pinMode(pin13, OUTPUT);
    }

    void loop() {
      digitalWrite(pin1, 0);
      digitalWrite(pin2, 0);
      digitalWrite(pin3, 0);
      digitalWrite(pin4, 0);
      digitalWrite(pin5, 0);
      digitalWrite(pin6, 0);
      digitalWrite(pin7, 0);
      digitalWrite(pin8, 0);
      digitalWrite(pin9, 0);
      digitalWrite(pin10, 0);
      digitalWrite(pin11, 0);
      digitalWrite(pin12, 0);
      digitalWrite(pin13, 0);
     
        if( millis() + 1 > time1) digitalWrite(pin1, 1);
        if( millis() + 1 > time2) digitalWrite(pin2, 1);
        if( millis() + 1 > time3) digitalWrite(pin3, 1);
        if( millis() + 1 > time4) digitalWrite(pin4, 1);
        if( millis() + 1 > time5) digitalWrite(pin5, 1);
        if( millis() + 1 > time6) digitalWrite(pin6, 1);
        if( millis() + 1 > time7) digitalWrite(pin7, 1);
        if( millis() + 1 > time8) digitalWrite(pin8, 1);
        if( millis() + 1 > time9) digitalWrite(pin9, 1);
        if( millis() + 1 > time10) digitalWrite(pin10, 1);
        if( millis() + 1 > time11) digitalWrite(pin11, 1);
        if( millis() + 1 > time12) digitalWrite(pin12, 1);
        if( millis() + 1 > time13) digitalWrite(pin13, 1);
    }

    Результат компиляции одинаков:
    002.jpg
    001.jpg
    Ну... виноват. Пойду мыть чего-нибудь чем-нибудь.
     
  11. AlexU

    AlexU Гуру

    А если во втором случае (с 'const int') в Serial вывести &pin1 (или любую другую константу), что монитор порта покажет?
    Код (C++):
    Serial.println(&pin1, 16);
     
  12. qwone

    qwone Гик

    А у меня обратная привычка образовалась . Начал создавать свою библиотеку. А там надо или const byte или #define. Если кто-то хочет протестировать мою библиотеку енкодера кидаю ссылку https://yadi.sk/d/ePqFXjH-38VoHW Ну и главный файл сюда
    Код (C++):
    /* class_Encoder_KY_040.ino
      #1 энкодер  CLK->2 (CLK_PIN)
                   DT->3 (DT_PIN)
                   SW->4 (SW_PIN)
      Принцип кода:В сериал отправляется действие на энкодере.
    */

    //#1 энкодер
    #include "Cl_Encoder_KY_040.h"
    #define CLK_PIN 2
    #define DT_PIN  3
    #define SW_PIN  4
    //#2 модуль выполнения
    void func_SW(void) {
      Serial.println("Press SW");
    }
    void func_plus(void) {
      Serial.println("Turn +");
    }
    void func_minus(void) {
      Serial.println("Turn -");
    }

    Cl_Encoder_KY_040 Encoder(CLK_PIN, DT_PIN, SW_PIN); // ( CLK,DT,SW )создать энкодер на пинах 2,3,4
    void setup() {
      //#1 энкодер
      Encoder.setup();
      //#2 модуль выполнения
      Serial.begin(9600);

    }
    void loop() {
      //#1 энкодер
      Encoder.loop(& func_SW , & func_plus, & func_minus );
      //#2 модуль выполнения
    }