Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Нужна помощь NodeMcu помощь из скетчем

Тема в разделе "Общие вопросы по esp8266", создана пользователем zorgg, 9 апр 2019.

  1. zorgg

    zorgg Новичок

    Сообщения:
    16
    Симпатии:
    0
    Всем привет. Нужна ваша помощь. Я не программист но вот пытаюсь создать простенький скетч чтобы понять как все работает.
    Нужно чтобы при нажатии на кнопку включалась пищалка и в такт пищалки загорался красный светодиод, и при нажатии на кнопку еще загорался синий светодиод.
    Вот создал скетч но синий светодиод не как не хочет включатся.
    Скетч (раскрыть)
    Код (C):
    1. const int buzzer = 2;
    2. const int button = 15;
    3. const int led_red = 16;
    4. const int led_blu = 5;
    5. int temp = 0;
    6.  
    7.  
    8. void setup() {
    9.   Serial.begin(115200);
    10.   pinMode(buzzer, OUTPUT);
    11.   pinMode(button, INPUT);
    12.   pinMode(led_red,OUTPUT);
    13.   pinMode(led_blu,OUTPUT);
    14. }
    15.  
    16. void ring() {
    17.   digitalWrite(buzzer, HIGH);
    18.   digitalWrite(led_red, HIGH);
    19.   delay(500);
    20.   digitalWrite(buzzer, LOW);
    21.   digitalWrite(led_red, LOW);
    22.   delay(500);
    23.  
    24. }
    25.  
    26. void loop() {
    27.   temp = digitalRead(button);
    28.      if (temp == HIGH) {
    29.       digitalWrite(led_blu, LOW);
    30.         ring();
    31.         Serial.println(" Please Open the Door ");
    32.         delay(1000);
    33.        }
    34.      else {
    35.         digitalWrite(buzzer, HIGH);
    36.         Serial.println(" Ring the Bell ");
    37.        
    38.        }
    39.        delay(1000);
    40. }
     
  2. Alegz

    Alegz Читатель

    Сообщения:
    46
    Симпатии:
    7
    Я тоже не программист, но раз есть
    digitalWrite(led_blu, LOW);

    то где-то должно быть еще
    digitalWrite(led_blu, HIGH);
     
    zorgg нравится это.
  3. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.452
    Симпатии:
    173
    Если есть желание разобраться, то начните с комментирования строк программы.
    Примерно так
    Код (Text):
    1. temp = digitalRead(button);//если кнопка нажата temp будет равна HIGH, иначе равна LOW
    2.      if (temp == HIGH)
    3. //если кнопка была нажата
    4. {
    По существу, где вы отслеживаете второе нажатие кнопки? Где выключаете синий светодиод?
     
  4. Alegz

    Alegz Читатель

    Сообщения:
    46
    Симпатии:
    7
    Это вторая половина вопроса :). Первая половина - светодиод включается нулём или единицей?
     
  5. zorgg

    zorgg Новичок

    Сообщения:
    16
    Симпатии:
    0
    Ребята не пинайте я вообще не чего не разбираюсь в этом. Вот на этом скетче пробую понять что и как работает.
     
  6. zorgg

    zorgg Новичок

    Сообщения:
    16
    Симпатии:
    0
    Как-то так?
    Скетч (раскрыть)
    Код (C):
    1. const int buzzer = 2; // Пищалка gpio 2
    2. const int button = 15; // Кнопка gpio 15
    3. const int led_red = 16; // Красный светодиод gpio 16
    4. const int led_blu = 5; // Синий светодио gpio 5
    5. int temp = 0; // Состояние кнопки
    6.  
    7.  
    8. void setup() {
    9.   Serial.begin(115200);
    10.   pinMode(buzzer, OUTPUT); // устанавливает режим работы пищалки - выход
    11.   pinMode(button, INPUT); // устанавливает режим работы кнопки - вход
    12.   pinMode(led_red,OUTPUT); // устанавливает режим работы красного светодиода  - выход
    13.   pinMode(led_blu,OUTPUT); // устанавливает режим работы синего светодиода - выход
    14.  
    15. }
    16.  
    17. void ring() {
    18.   digitalWrite(buzzer, HIGH);  // включает пищалку
    19.   digitalWrite(led_red, HIGH); // включает светодиод красный
    20.   delay(500);                  // ждет полсекунды
    21.   digitalWrite(buzzer, LOW);   // выключает пищалку
    22.   digitalWrite(led_red, LOW);  // выключает светодиод красный
    23.   delay(500);                  // ждет полсекунды
    24.  
    25. }
    26.  
    27. void loop() {
    28.   temp = digitalRead(button);//если кнопка нажата temp будет равна HIGH, иначе равна LOW
    29.      if (temp == HIGH)
    30.      //если кнопка была нажата
    31.      {
    32.       digitalWrite(led_blu, HIGH); // включает светодиод синий
    33.         ring();  // включает функцию void ring()
    34.         Serial.println(" Please Open the Door ");
    35.         delay(1000);
    36.        }
    37.      else {
    38.         digitalWrite(buzzer, HIGH);  // включает пищалку
    39.         digitalWrite(led_blu, LOW);  // выключает светодиод синий
    40.         Serial.println(" Ring the Bell ");
    41.        
    42.        }
    43.        delay(1000);
    44. }
    45.  
     
  7. zorgg

    zorgg Новичок

    Сообщения:
    16
    Симпатии:
    0
    А это как ?
     
  8. Alegz

    Alegz Читатель

    Сообщения:
    46
    Симпатии:
    7
    Осталось залить код и посмотреть. Пищалка, судя по комментариям, при нажатой кнопке будет пищать 0.5 сек через 0.5, а при отжатой - постоянно. Ну и зачем там delay(1000) - вообще загадка.
     
  9. Alegz

    Alegz Читатель

    Сообщения:
    46
    Симпатии:
    7
    Это зависит от того, как включен светодиод в схеме. Если анодом на плюс, а вторым концом в порт, то включится он нулём. Если анодом в порт, а вторым концом на землю, то включится единицей.
     
  10. zorgg

    zorgg Новичок

    Сообщения:
    16
    Симпатии:
    0
    Так включено.
    А с пищалкой я и сам не пойму как она работает. Бал вот такую
     
  11. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.452
    Симпатии:
    173
    Да примерно так.

    Дальше смотрите( по данным, которые выводятся в Serial ), работает ли программа, так как вы ожидаете.
    Если, что то работает не так как нужно, меняете код и снова проверяете.

    Начните разбираться с малого, отладьте такой код, например нажали кнопку, пищалка пищит, отпустили не пищит.

    На пищалку подайте +3.3в, корпус и третий вывод к есп.
     
    zorgg нравится это.
  12. Alegz

    Alegz Читатель

    Сообщения:
    46
    Симпатии:
    7
    Так там же в описании лота всё написано. Пищалка активная. Значит тон (ШИМ) на неё подавать не надо. Если на входе единица - она пищит. Ноль - молчит. Плюс с минусом - вопросов быть не должно.
     
  13. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.452
    Симпатии:
    173
    Почти так, только наоборот.
     
    Alegz нравится это.
  14. Alegz

    Alegz Читатель

    Сообщения:
    46
    Симпатии:
    7
    Да, согласен. Судя по разводке данной конкретной платы, активный у платы - ноль. Тогда всё нормально, при отжатой кнопке будет молчать.
     
  15. zorgg

    zorgg Новичок

    Сообщения:
    16
    Симпатии:
    0
    Когда подключаю пищалку то на пищит.
    Пробовал этим скечем.
    А как отслеживать через монитор порта что на выходе gpio 0 или 1
    И еще как установить чтобы изначально на выходе был 1 а не 0
    А как в скетче указать чтобы был на пине
    Скетч (раскрыть)
    Код (C):
    1. const int buttonPin = 15;     // the number of the pushbutton pin
    2. const int ledPin =  5;      // the number of the LED pin
    3.  
    4. // variables will change:
    5. int buttonState = 0;         // variable for reading the pushbutton status
    6.  
    7. void setup() {
    8.   // initialize the LED pin as an output:
    9.   pinMode(ledPin, OUTPUT);
    10.   // initialize the pushbutton pin as an input:
    11.   pinMode(buttonPin, INPUT);
    12. }
    13.  
    14. void loop() {
    15.   // read the state of the pushbutton value:
    16.   buttonState = digitalRead(buttonPin);
    17.  
    18.   // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
    19.   if (buttonState == HIGH) {
    20.     // turn LED on:
    21.     digitalWrite(ledPin, HIGH);
    22.   } else {
    23.     // turn LED off:
    24.     digitalWrite(ledPin, LOW);
    25.   }
    26. }
     
  16. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.452
    Симпатии:
    173
    Если пищалка подключена к есп, то будет зависеть от того, как написана программа.

    В этом разобраться поможет книга по программированию, или хотя бы посмотрите примеры в ардуиноиде.
     
  17. Alegz

    Alegz Читатель

    Сообщения:
    46
    Симпатии:
    7
    Чуть выше был код, где я сказал, что судя по комментам, пищалка будет пищать при отжатой кнопке. Но мы еще не знаем, как подключена кнопка (и включено ли питание). Если предположить, что всё включено правильно, то при выполнении условий
    данная конкретная пищалка должна сидеть молча.
     
    zorgg нравится это.
  18. Alegz

    Alegz Читатель

    Сообщения:
    46
    Симпатии:
    7
    С этим скетчем и не должна. Этот скетч управляет светодиодом. Конечно, есть вариант, проверить сначала на светодиоде, потом подсоплить на этот же вывод баззер и посмотреть, что будет.
     
    zorgg нравится это.
  19. zorgg

    zorgg Новичок

    Сообщения:
    16
    Симпатии:
    0
    Вот какая схема подключения
    Untitled Sketch_bb.jpg
     
  20. mihtmg

    mihtmg Новичок

    Сообщения:
    2
    Симпатии:
    0
    ноги в среде ответствуют GPIO - D1-это 5 в проге; D2 - 4, D4 -2, D8 -15
     

    Вложения:

Поделиться этой страницей