автоматическая кормушка для аквариума

Тема в разделе "Arduino & Shields", создана пользователем Алексей Схоменко, 18 ноя 2013.

  1. Megakoteyka

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

    Я не рискнул enum предлагать, с константами для первого раза наглядней...
     
  2. Unixon

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

    Да оно понятно, просто что-то вспомнилось, что про него как то незаслуженно забыли.
     
  3. Megakoteyka

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

    Не, про enum я всегда помню, вещь полезная. Особенно когда в VS на C# switch пишу - стрелочку вниз нажал и редактор сам вставляет все ветки case - нарадоваться не могу :)
    Сейчас у меня в проекте их 10 штук используется и наверняка еще добавится...
     
  4. посоветуйте книгу для изучения языка, я начинающий.
     
  5. Megakoteyka

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

  6. написал программу как знал и понимал а она не катит( можете подправить и указать почему там не правильно?


    #define PIN_SENSE 0
    #define PIN_LED 3

    #define LOWER_THRESHOLD 30
    #define UPPER_THRESHOLD 30

    #define SEQUENCE_DELAY 3000
    #define SEQUENCE_DELAY1 3500
    #define SENSOR_DELAY 100

    bool state = false;

    void showSequenceA()
    {
    for (int i = 50; i <= 255; i+=10)
    {
    analogWrite(PIN_LED, i);
    delay(SEQUENCE_DELAY);
    }
    analogWrite(PIN_LED, 255);
    delay(5000);
    state = true;
    }

    void showSequenceB()
    {
    for (int i = 255; i >= 0; i-=10)
    {
    analogWrite(PIN_LED, i);
    delay(SEQUENCE_DELAY1);
    }
    analogWrite(PIN_LED, 0);
    state = false;
    }

    int sensePin1 = 1; //выбор подачи корма 1 или 2 раза
    int ledPin4 = 4;
    int ledPin8 = 8;//реле фильтра
    int ledPin7 = 7;//реле компресора
    int ledPin88 = 1;
    int ledPin77 = 2;
    void setup()
    {
    analogReference(DEFAULT);
    pinMode(PIN_SENSE, INPUT);
    pinMode(PIN_LED, OUTPUT);
    pinMode(ledPin8, OUTPUT);
    pinMode(ledPin88, OUTPUT);
    pinMode(ledPin77, OUTPUT);
    pinMode(ledPin7, OUTPUT);
    pinMode(ledPin4, OUTPUT);
    servoMain.attach(10); // серво от кармушки
    }

    void loop()
    {
    int val = analogRead(PIN_SENSE);
    if ((val < LOWER_THRESHOLD) && !state)
    {
    showSequenceA();
    }
    else if ((val >= UPPER_THRESHOLD) && state)
    {
    showSequenceB();
    }
    delay(SENSOR_DELAY);

    pinMode(ledPin4, HIGH);
    delay(3000); // пауза после включения света
    servoMain.write(0); // Повернуть серво влево на 45 градусов
    delay(500);
    servoMain.write(180);
    pinMode(ledPin4, LOW);
    delay(3000); //пауза после кормления
    pinMode(ledPin8, OUTPUT);// включился фильтр
    delay(3000); //пауза после включения фильтра и перед включением комп
    pinMode(ledPin7, OUTPUT);// включился компрессор
    delay(3000); // пауза в 4 часа

    int val = analogRead(sensePin1);
    if(val >668)
    {
    pinMode(ledPin8, OUTPUT);
    pinMode(ledPin7, OUTPUT);
    pinMode(ledPin77, OUTPUT);
    }
    else
    {
    pinMode(ledPin8, OUTPUT);
    pinMode(ledPin8,LOW );// выключился фильтр
    pinMode(ledPin7,LOW );// выключился компрессор
    delay(3000); // пауза после выключения оборудования
    servoMain.write(0); // Повернуть серво влево на 45 градусов
    delay(500);
    servoMain.write(180);
    pinMode(ledPin4, LOW);
    delay(3000); // пауза после кормления 2 если оно было
    }


    }
     
  7. Megakoteyka

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

    Вставьте в программу отладочный вывод в последовательный порт и проанализируйте поведение. Найдите то место, которое работает неправильно.
    И начните уже вставлять код вот так:
    Код (Text):
    #define PIN_SENSE 0
    #define PIN_LED 3

    #define LOWER_THRESHOLD 30
    #define UPPER_THRESHOLD 30

    #define SEQUENCE_DELAY 3000
    #define SEQUENCE_DELAY1 3500
    #define SENSOR_DELAY 100

    bool state = false;

    void showSequenceA()
    {
      for (int i = 50; i <= 255; i+=10)
      {
        analogWrite(PIN_LED, i);
        delay(SEQUENCE_DELAY);
      }
      analogWrite(PIN_LED, 255);
      delay(5000);
      state = true;
    }

    void showSequenceB()
    {
      for (int i = 255; i >= 0; i-=10)
      {
        analogWrite(PIN_LED, i);
        delay(SEQUENCE_DELAY1);
      }
      analogWrite(PIN_LED, 0);
      state = false;
    }

    int sensePin1 = 1; //выбор подачи корма 1 или 2 раза
    int ledPin4 = 4;
    int ledPin8 = 8;//реле фильтра
    int ledPin7 = 7;//реле компресора
    int ledPin88 = 1;
    int ledPin77 = 2;
    void setup()
    {
      analogReference(DEFAULT);
      pinMode(PIN_SENSE, INPUT);
      pinMode(PIN_LED, OUTPUT);
      pinMode(ledPin8, OUTPUT);
      pinMode(ledPin88, OUTPUT);
      pinMode(ledPin77, OUTPUT);
      pinMode(ledPin7, OUTPUT);
      pinMode(ledPin4, OUTPUT);
      servoMain.attach(10); // серво от кармушки
    }

    void loop()
    {
      int val = analogRead(PIN_SENSE);
      if ((val < LOWER_THRESHOLD) && !state)
      {
        showSequenceA();
      }
      else if ((val >= UPPER_THRESHOLD) && state)
      {
        showSequenceB();
      }
      delay(SENSOR_DELAY);

      pinMode(ledPin4, HIGH);
      delay(3000); // пауза после включения света
      servoMain.write(0); // Повернуть серво влево на 45 градусов
      delay(500);
      servoMain.write(180);
      pinMode(ledPin4, LOW);
      delay(3000); //пауза после кормления
      pinMode(ledPin8, OUTPUT);// включился фильтр
      delay(3000); //пауза после включения фильтра и перед включением комп
      pinMode(ledPin7, OUTPUT);// включился компрессор
      delay(3000); // пауза в 4 часа

      int val = analogRead(sensePin1);
      if(val >668)
      {
        pinMode(ledPin8, OUTPUT);
        pinMode(ledPin7, OUTPUT);
        pinMode(ledPin77, OUTPUT);
      }
      else
      {
        pinMode(ledPin8, OUTPUT);
        pinMode(ledPin8,LOW );// выключился фильтр
        pinMode(ledPin7,LOW );// выключился компрессор
        delay(3000); // пауза после выключения оборудования
        servoMain.write(0); // Повернуть серво влево на 45 градусов
        delay(500);
        servoMain.write(180);
        pinMode(ledPin4, LOW);
        delay(3000); // пауза после кормления 2 если оно было
      }
    }
    А в Arduino IDE нажимайте Ctrl+T перед вставкой исходника на форум.