Помогите тупому (((

Тема в разделе "Arduino & Shields", создана пользователем Fikret, 26 дек 2017.

  1. Fikret

    Fikret Нуб

    в общем написал программу для зеркала, чтоб включалось легкое освещение через датчик присутствия и более мощное по нажатию кнопки. все это подключено через MOSFET транзистор. в общем по датчику присутствия все работает, а вот по кнопкам нет (((((( хотя программа ошибок не показывает.

    вот сама программа:

    Код (C++):

    #define fadePin 3 //пин управления MOSFET транзистором для датчика присутствия
    #define fadeButton 6  //пин управляет MOSFET транзистором для кнопки и дополнительного освещения
    #define buttonPin 7    //пин кнопки включения
    #define up 8    //пин кнопки повышает яркость
    #define down 9  //пин кнопки понижает яркость

    int pirPin = 2;  //пин подключения управляющего сигнала PIR датчика
    int light;       //переменная для хранения состояния света (вкл/выкл)
    int light2;       //переменная для хранения состояния дополнительного света
    int brightness = 125;    //уровень яркости для дополнительного освещения (Д.О.)

    void setup(){
    pinMode(pirPin, INPUT);             //настраиваем 2 пин как вход для сигналов с датчика
    pinMode(buttonPin, INPUT);          // настраиваем 7 пин для кнопки включения дополнительного света
      digitalWrite(buttonPin,HIGH);       //включаем подтягивающий резистор на 7 пин
      pinMode(up,INPUT);                  //  8 ой пин для повышения яркости Д.О.
    digitalWrite(up, HIGH);             //Включаем подтягивающий резистор на 8-ом пине
      pinMode(down,INPUT);                //9 пин для понижения яркости
      digitalWrite(down,HIGH);            //Включаем подтягивающий резистор на 9 ом пине
      pinMode(fadePin, OUTPUT);           // 3 пин на выход, для управления транзисотором
      pinMode(fadeButton, OUTPUT);        //Пин 6 на выход для управления вторым MOSFET транзистором
      light = 0;                          //устанаваливаем переменную для первого включения света
      light2 = 0;
    }

    void loop(){
    if(digitalRead(pirPin) == HIGH )  //если сигнал с датчика высокого уровня(т.е. есть движение)
    {
         if(light == 0)   //и если свет не был включен
       {
           for(int i=0; i<=150; i++)  //то плавно включаем свет
           {
         analogWrite(fadePin, i);
         delay(30);   //каждые 10мс увелияение на 1
         }
         light = 1; //и передаем значение переменной, что свет включен
         }
       }
       else  //иначе
      {
         if(light == 1) //если свет включен
         {
          for(int i=150; i>=0; i--)//плавно гасим его
          {
          analogWrite(fadePin, i);
          delay(30);
          }
          light = 0; //и передаем значение переменной, что свет выключен
      }
      }


          if(digitalRead(buttonPin) == LOW )  //если сигнал с кнопки  НИЗКОГО уровня(Низкого, потому что кнопка работает от нуля)
      {
      if(light2 == 0)   //и если свет не был включен
      {
      analogWrite(fadeButton, brightness);   //при нажатии buttonPin (7) яркость Д.О. в половину
            }
       light = 1; //и передаем значение переменной, что свет включен
      }

       if(digitalRead(up==LOW) && light2 == 1)
       {
      brightness += 10;  //Делаем проверку, если Д.О. включенно и нажата кнопка UP увеличиваем яркость на 5 единиц
      }


       if(digitalRead(down==LOW && light2 == 1))
       {
       brightness -= 10;  //Делаем проверку, если Д.О. включенно и нажата кнопка DOWN уменьшаем  яркость  на  5 единиц
      }
      brightness = constrain(brightness, 0, 254); // Эта функция контролирует, что бы переменная brightness не стала больше 254 и меньше 0, если значение вылазит за границу    то функция 0 или 254
      analogWrite(fadeButton, brightness);    // Устанавливаем состояние яркости для светодиода
      delay(50); // Пауза 50 миллисекунд.
            if(digitalRead(buttonPin == LOW && light2 ==1))  //если сигнал с кнопки  НИЗКОГО уровня(Низкого, потому что кнопка работает от нуля)и свет включен

         {
          analogWrite(fadeButton, 0);   //при нажатии buttonPin (7) при включенном свете Д.О. отключается
                 }
          light = 0; //и передаем значение переменной, что свет включен
    }

     

    помогите пожалуйста
     
    Последнее редактирование: 27 дек 2017
  2. NikitOS

    NikitOS Король шутов Администратор

    Оформите код правильно
     
    Толик Иванов нравится это.
  3. Fikret

    Fikret Нуб

    оформил
     
  4. DIYMan

    DIYMan Guest

    Оформил (конечно, нет).
    Вот как надо:
    Код (C++):
    // Язык при вставке кода выбирается "Arduino, C/C++"
     
  5. Fikret

    Fikret Нуб

    Простите, оформлял код через [CODE ] [/CODE ] не сразу разобрался что можно по другому. Сделал
     
  6. DIYMan

    DIYMan Guest

    У вас вот тут ошибка, переменную light2 никто никогда не использует, кроме как в одном месте. Уберите 2.
     
  7. Fikret

    Fikret Нуб

    переделал вот так. все равно не включается (((
    Код (C++):

    int fadePin = 3; //пин управления MOSFET транзистором для датчика присутствия
    int fadeButton = 6;  //пин управляет MOSFET транзистором для кнопки и дополнительного освещения
    int buttonPin = 7;    //пин кнопки включения
    int up = 8;    //пин кнопки повышает яркость
    int down = 9;  //пин кнопки понижает яркость

    int pirPin = 2;  //пин подключения управляющего сигнала PIR датчика
    int light;       //переменная для хранения состояния света (вкл/выкл)
    int lightnew;       //переменная для хранения состояния дополнительного света
    int brightness = 125;    //уровень яркости для дополнительного освещения (Д.О.)

    void setup(){
    pinMode(pirPin, INPUT);             //настраиваем 2 пин как вход для сигналов с датчика
    pinMode(buttonPin, INPUT);          // настраиваем 7 пин для кнопки включения дополнительного освещения
      digitalWrite(buttonPin,HIGH);       //включаем подтягивающий резистор на 7 пин
      pinMode(up,INPUT);                  //  8 ой пин для повышения яркости Д.О.
    digitalWrite(up, HIGH);             //Включаем подтягивающий резистор на 8-ом пине
      pinMode(down,INPUT);                //9 пин для понижения яркости
      digitalWrite(down,HIGH);            //Включаем подтягивающий резистор на 9 ом пине
      pinMode(fadePin, OUTPUT);           // 3 пин на выход, для управления транзисотором
      pinMode(fadeButton, OUTPUT);        //Пин 6 на выход для управления вторым MOSFET транзистором
      light = 0;                          //устанаваливаем переменную для первого включения света
      lightnew = 0;                       //Устанавливаем переменную для первого включения Д.О
    }

    void loop(){
    if(digitalRead(pirPin) == HIGH )  //если сигнал с датчика высокого уровня(т.е. есть движение)
    {
         if(light == 0)   //и если свет не был включен
       {
           for(int i=0; i<=150; i++)  //то плавно включаем свет
           {
         analogWrite(fadePin, i);
         delay(30);   //каждые 10мс увелияение на 1
         }
         light = 1; //и передаем значение переменной, что свет включен
         }
       }
       else  //иначе
      {
         if(light == 1) //если свет включен
         {
          for(int i=150; i>=0; i--)//плавно гасим его
          {
          analogWrite(fadePin, i);
          delay(30);
          }
          light = 0; //и передаем значение переменной, что свет выключен
      }
      }


          if(digitalRead(buttonPin) == LOW )  //если сигнал с кнопки  НИЗКОГО уровня(Низкого, потому что кнопка работает от нуля)
      {
      if(lightnew == 0)   //и если свет не был включен
      {
      analogWrite(fadeButton, brightness);   //при нажатии buttonPin (7) яркость Д.О. в половину
            }
       lightnew = 1; //и передаем значение переменной, что свет включен
      }
     
       if(digitalRead(up==LOW) && lightnew == 1)
       {
      brightness += 10;  //Делаем проверку, если Д.О. включенно и нажата кнопка UP увеличиваем яркость на 5 единиц
      }
     

       if(digitalRead(down==LOW && lightnew == 1))
       {
       brightness -= 10;  //Делаем проверку, если Д.О. включенно и нажата кнопка DOWN уменьшаем  яркость на 5 единиц
      }
      brightness = constrain(brightness, 0, 254); // Эта функция контролирует, что бы переменная brightness не стала больше 254 и меньше 0, если значение вылазит за границу то функция 0 или 254
      analogWrite(fadeButton, brightness);    // Устанавливаем состояние яркости для светодиода
      delay(50); // Пауза 50 миллисекунд.  
     
            if(digitalRead(buttonPin == LOW && lightnew ==1))  //если сигнал с кнопки  НИЗКОГО уровня(Низкого, потому что кнопка работает от нуля)и свет включен
     
         {
          analogWrite(fadeButton, 0);   //при нажатии buttonPin (7) при включенном свете Д.О. отключается
                 }
          lightnew = 0; //и передаем значение переменной, что свет включен
    }
       
     
  8. fogary

    fogary Гик

    Подозрительные конструкции какие-то. Вы действительно хотите того, что они делают?
     
  9. AlexU

    AlexU Гуру

    За всю логику говорить не буду, но в условии:
    Код (C++):
    if(digitalRead(up==LOW) && lightnew == 1)
    digitalRead будет читать '1'-ый пин (а не пин 'up'), т.к. значение выражения 'up == LOW' будет равно '1'.
    Так полагаю, что хотите прочитать пин 'up' и в зависимости от его состояния выполнять какое-либо действие, то в этом случае условие должно иметь вид:
    Код (C++):
    if((digitalRead(up)==LOW) && (lightnew == 1))
    т.е. читаем пин 'up' и прочитанное сравниваем с 'LOW'.
    Условия:
    Код (C++):
    if(digitalRead(down==LOW && lightnew == 1))
    .....
    if(digitalRead(buttonPin == LOW && lightnew ==1))
    так же требуют правки, но это уже сами...

    PS: скобки с умом расставлять надо, а не куда попало -- лишь бы компилятор не ругался...
     
    Fikret и arkadyf нравится это.
  10. Fikret

    Fikret Нуб

    Поменял
    все сделал в таком стиле
    Загорается светодиод и все. на кнопки все равно не реагирует ((
     
  11. b707

    b707 Гуру

    вы читать, что ли, не умеете? - вам же написали. что "в таком стиле" - неправильно
     
    Последнее редактирование: 27 дек 2017
  12. ostrov

    ostrov Гуру

    Мне кажется, или в коде слишком много букв ради заявленной функциональности?
     
  13. Fikret

    Fikret Нуб

    я читать умею, а еще я умею быть вежливым. если я прошу помощи в элементарном коде то наверное я не очень давно этим занимаюсь. Прошу помощи, а не пытаться самоутвердиться за мой счет. то что мне показали я переправил
     
  14. b707

    b707 Гуру

    покажите
     
  15. DetSimen

    DetSimen Guest

    Обычно, люди имеют свойство помогать тому, кто хочет учиться и сам что-то делать пытаеца. А вовсе не тому, каму делать нечево. Это называеца уже по-другому.
     
  16. Fikret

    Fikret Нуб

    вот
    Код (C++):
       if(digitalRead(buttonPin) == LOW )  //если сигнал с кнопки  НИЗКОГО уровня(Низкого, потому что кнопка работает от нуля)
      {
      if(lightnew == 0)   //и если свет не был включен
      {
      analogWrite(fadeButton, brightness);   //при нажатии buttonPin (7) яркость Д.О. в половину
            }
       lightnew = 1; //и передаем значение переменной, что свет включен
      }
     
       if((digitalRead(up)==LOW) && (lightnew == 1))    //Делаем проверку, если Д.О. включенно и нажата кнопка UP
       {
      brightness += 10;  // увеличиваем яркость на 10 единиц
      }
     

       if((digitalRead(down)==LOW) && (lightnew == 1))
       {
       brightness -= 10;  //Делаем проверку, если Д.О. включенно и нажата кнопка DOWN уменьшаем  яркость на 5 единиц
      }
      brightness = constrain(brightness, 0, 254); // Эта функция контролирует, что бы переменная brightness не стала больше 254 и меньше 0, если значение вылазит за границу то функция 0 или 254
      analogWrite(fadeButton, brightness);    // Устанавливаем состояние яркости для светодиода
      delay(50); // Пауза 50 миллисекунд.  
     
            if((digitalRead(buttonPin) == LOW) && (lightnew ==1))  //если сигнал с кнопки  НИЗКОГО уровня(Низкого, потому что кнопка работает от нуля)и свет включен
     
         {
          analogWrite(fadeButton, 0);   //при нажатии buttonPin (7) при включенном свете Д.О. отключается
                 }
          lightnew = 0; //и передаем значение переменной, что свет включен
    }
       
     
  17. ostrov

    ostrov Гуру

    Возмездно называется. )
     
  18. DetSimen

    DetSimen Guest

    или рапство
     
  19. DIYMan

    DIYMan Guest

    или социализм совкового типа - где бы ни работать, лишь бы не работать :)
     
  20. b707

    b707 Гуру

    Fikret. в выложенной части кода ошибок не вижу. Должно работать