• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

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

zorgg

New member
Всем привет. Нужна ваша помощь. Я не программист но вот пытаюсь создать простенький скетч чтобы понять как все работает.
Нужно чтобы при нажатии на кнопку включалась пищалка и в такт пищалки загорался красный светодиод, и при нажатии на кнопку еще загорался синий светодиод.
Вот создал скетч но синий светодиод не как не хочет включатся.
Код:
const int buzzer = 2;
const int button = 15;
const int led_red = 16;
const int led_blu = 5;
int temp = 0;


void setup() {
  Serial.begin(115200);
  pinMode(buzzer, OUTPUT);
  pinMode(button, INPUT);
  pinMode(led_red,OUTPUT);
  pinMode(led_blu,OUTPUT);
}

void ring() {
  digitalWrite(buzzer, HIGH);
  digitalWrite(led_red, HIGH);
  delay(500);
  digitalWrite(buzzer, LOW);
  digitalWrite(led_red, LOW);
  delay(500);
 
}

void loop() {
  temp = digitalRead(button);
     if (temp == HIGH) {
      digitalWrite(led_blu, LOW);
        ring();
        Serial.println(" Please Open the Door ");
        delay(1000);
       }
     else {
        digitalWrite(buzzer, HIGH);
        Serial.println(" Ring the Bell ");
       
       }
       delay(1000);
}
 

CodeNameHawk

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

zorgg

New member
Если есть желание разобраться, то начните с комментирования строк программы.
Примерно так
Код:
temp = digitalRead(button);//если кнопка нажата temp будет равна HIGH, иначе равна LOW
     if (temp == HIGH)
//если кнопка была нажата
{
По существу, где вы отслеживаете второе нажатие кнопки? Где выключаете синий светодиод?
Как-то так?
Код:
const int buzzer = 2; // Пищалка gpio 2
const int button = 15; // Кнопка gpio 15
const int led_red = 16; // Красный светодиод gpio 16
const int led_blu = 5; // Синий светодио gpio 5
int temp = 0; // Состояние кнопки


void setup() {
  Serial.begin(115200);
  pinMode(buzzer, OUTPUT); // устанавливает режим работы пищалки - выход
  pinMode(button, INPUT); // устанавливает режим работы кнопки - вход
  pinMode(led_red,OUTPUT); // устанавливает режим работы красного светодиода  - выход
  pinMode(led_blu,OUTPUT); // устанавливает режим работы синего светодиода - выход

}

void ring() {
  digitalWrite(buzzer, HIGH);  // включает пищалку
  digitalWrite(led_red, HIGH); // включает светодиод красный
  delay(500);                  // ждет полсекунды
  digitalWrite(buzzer, LOW);   // выключает пищалку
  digitalWrite(led_red, LOW);  // выключает светодиод красный
  delay(500);                  // ждет полсекунды
 
}

void loop() {
  temp = digitalRead(button);//если кнопка нажата temp будет равна HIGH, иначе равна LOW
     if (temp == HIGH)
     //если кнопка была нажата
     {
      digitalWrite(led_blu, HIGH); // включает светодиод синий
        ring();  // включает функцию void ring()
        Serial.println(" Please Open the Door ");
        delay(1000);
       }
     else {
        digitalWrite(buzzer, HIGH);  // включает пищалку
        digitalWrite(led_blu, LOW);  // выключает светодиод синий
        Serial.println(" Ring the Bell ");
       
       }
       delay(1000);
}
 

CodeNameHawk

Moderator
Команда форума
Да примерно так.

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

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

На пищалку подайте +3.3в, корпус и третий вывод к есп.
 

Alegz

New member
А с пищалкой я и сам не пойму как она работает. Бал вот такую
Так там же в описании лота всё написано. Пищалка активная. Значит тон (ШИМ) на неё подавать не надо. Если на входе единица - она пищит. Ноль - молчит. Плюс с минусом - вопросов быть не должно.
 

zorgg

New member
Когда подключаю пищалку то на пищит.
Пробовал этим скечем.
А как отслеживать через монитор порта что на выходе gpio 0 или 1
И еще как установить чтобы изначально на выходе был 1 а не 0
А как в скетче указать чтобы был на пине
Код:
const int buttonPin = 15;     // the number of the pushbutton pin
const int ledPin =  5;      // the number of the LED pin

// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);
}

void loop() {
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);

  // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
  if (buttonState == HIGH) {
    // turn LED on:
    digitalWrite(ledPin, HIGH);
  } else {
    // turn LED off:
    digitalWrite(ledPin, LOW);
  }
}
 

CodeNameHawk

Moderator
Команда форума
Тогда всё нормально, при отжатой кнопке будет молчать.
Если пищалка подключена к есп, то будет зависеть от того, как написана программа.

Пробовал этим скечем.
А как отслеживать через монитор порта что на выходе gpio 0 или 1
И еще как установить чтобы изначально на выходе был 1 а не 0
А как в скетче указать чтобы был на пине
В этом разобраться поможет книга по программированию, или хотя бы посмотрите примеры в ардуиноиде.
 

Alegz

New member
Если пищалка подключена к есп, то будет зависеть от того, как написана программа.
Чуть выше был код, где я сказал, что судя по комментам, пищалка будет пищать при отжатой кнопке. Но мы еще не знаем, как подключена кнопка (и включено ли питание). Если предположить, что всё включено правильно, то при выполнении условий
else
{ digitalWrite(buzzer, HIGH); // включает пищалку
данная конкретная пищалка должна сидеть молча.
 

Alegz

New member
Пробовал этим скечем.
С этим скетчем и не должна. Этот скетч управляет светодиодом. Конечно, есть вариант, проверить сначала на светодиоде, потом подсоплить на этот же вывод баззер и посмотреть, что будет.
 
Сверху Снизу