Кнопки и светодиод (не работает)

Всем здравствуйте! Генерировал код ардуино в ии , суть была в этом. При нажатии первой кнопки светодиод горит 5 секунд а на lcd появляется надпись Внесено 2 рубля. 0.5 литров. И при повторном нажатии будет нарастать время и все числа на экране умножатся на два. Со второй кнопкой тоже самое, просто внесено рублей больше и секунд больше. У меня ардуино мега. При нажатии кнопок загорается тх или рх (в зависимости от кнопок) но никак не светодиод. Подскажите что мне стоит проверить, или может быть он что то не правильно написал? Я просто в кодах не разбираюсь, может кто то увидит что то :slight_smile:
Я прикреплю код и его объяснения куда что сувать.
Хорошо, вот полная инструкция для твоего проекта “Vending Machine” на Arduino, учитывая наличие всего двух пинов GND на плате:

Инструкция:

Необходимые компоненты:

Arduino Uno

LCD 16x2 (с пинами RS, Enable, D4, D5, D6, D7, VDD, GND)

2 кнопки

Светодиод

Резисторы (220 Ом - для светодиода и подсветки LCD, если требуется)

Макетная плата (breadboard)

Соединительные провода

Подключение:

Питание:

LCD VDD → Arduino 5V

Arduino GND → Одна из линий питания на макетной плате (общая шина GND).

LCD:

LCD RS → Arduino pin 12

LCD Enable → Arduino pin 11

LCD D4 → Arduino pin 5

LCD D5 → Arduino pin 4

LCD D6 → Arduino pin 3

LCD D7 → Arduino pin 2

LCD GND → Общая шина GND на макетной плате.

LCD A (анод подсветки) → Arduino 5V через резистор 220 Ом (если есть подсветка).

LCD K (катод подсветки) → Общая шина GND (если есть подсветка).

Кнопки:

Одна ножка каждой кнопки → Arduino pins 2 и 3 соответственно.

Вторая ножка каждой кнопки → Общая шина GND на макетной плате.

Светодиод:

Анод (длинная ножка) → Arduino pin 9 через резистор 220 Ом.

Катод (короткая ножка) → Общая шина GND на макетной плате.

Если что я не нашел где буквы а и к поэтому подсветки нету.
Также потом уточнял все в один gnd ставить от платы - он сказал да ( в итоге в gnd от lcd ничего нету, только шнур в плату беспаячную вставлен а к нему ничего не идет)

#include <LiquidCrystal.h>

// Определяем пины

const int button1Pin = 0;

const int button2Pin = 1;

const int ledPin = 9;

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

int button1Count = 0;

int button2Count = 0;

void setup() {

  pinMode(button1Pin, INPUT_PULLUP);

  pinMode(button2Pin, INPUT_PULLUP);

  pinMode(ledPin, OUTPUT);

  lcd.begin(16, 2);

  lcd.print("Vending Machine");

  delay(2000);

  lcd.clear();

}

void loop() {

  if (digitalRead(button1Pin) == LOW) {

    delay(50);

    if (digitalRead(button1Pin) == LOW) {

      button1Count++;

      updateDisplay(button1Count, 2, 0.5);

      while (digitalRead(button1Pin) == LOW);

    }

  }

  if (digitalRead(button2Pin) == LOW) {

    delay(50);

    if (digitalRead(button2Pin) == LOW) {

      button2Count++;

      updateDisplay(button2Count, 3, 0.75);

      while (digitalRead(button2Pin) == LOW);

    }

  }

}

void updateDisplay(int count, float price, float liters) {

  lcd.clear();

  lcd.setCursor(0, 0);

  lcd.print("Vneseno ");

  lcd.print(count * price);

  lcd.print(" rub");

  lcd.setCursor(0, 1);

  lcd.print(count * liters);

  lcd.print(" litrov");

  delay(1000);

}

Путаетесь в показаниях.

В тексте:

В коде:

И тот и другой выбор пинов для кнопки не годится. В первом случае у вас кнопки пересекаются с выводами экрана, во втором - с пинеами аппаратного порта Сериал

1 лайк

и еще, в какой строке вы или ИИ пытается зажечь светодиод?

Забыл сказать. У меня эти пины уже заняты были, я не знаю как он туда сразу два шнура собрался вставить, и я посмотрел что монжо просто в 0 и 1 сделать. Я и код поменял и всунул туда

Не знаю..

спросите у ИИ.

2 лайка

Попробую сейчас

не удивительно, если учесть что одна кнопка подключена к линии RX а другая TX

0 и 1 нельзя.
Выберите для кнопок другие пины.

еперный театр…

это они че, так живут сейчас? нада напица…

5 лайков

Я на него надеялся. Он мне теперь такой код прислал.

#include <LiquidCrystal.h>

// Определяем пины
const int button1Pin = 0;
const int button2Pin = 1;
const int ledPin = 9; // Пин, к которому подключен светодиод
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

int button1Count = 0;
int button2Count = 0;

void setup() {
  pinMode(button1Pin, INPUT_PULLUP);
  pinMode(button2Pin, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT); // Устанавливаем пин светодиода как выход
  lcd.begin(16, 2);
  lcd.print("Vending Machine");
  delay(2000);
  lcd.clear();
}

void loop() {
  // Обработка нажатия кнопки 1
  if (digitalRead(button1Pin) == LOW) {
    delay(50);
    if (digitalRead(button1Pin) == LOW) {
      button1Count++;
      updateDisplay(button1Count, 2, 0.5);
      digitalWrite(ledPin, HIGH); // Включаем светодиод
      delay(500);                   // Держим включенным 0.5 секунды
      digitalWrite(ledPin, LOW);  // Выключаем светодиод
      while (digitalRead(button1Pin) == LOW);
    }
  }

  // Обработка нажатия кнопки 2
  if (digitalRead(button2Pin) == LOW) {
    delay(50);
    if (digitalRead(button2Pin) == LOW) {
      button2Count++;
      updateDisplay(button2Count, 3, 0.75);
      digitalWrite(ledPin, HIGH); // Включаем светодиод
      delay(500);                   // Держим включенным 0.5 секунды
      digitalWrite(ledPin, LOW);  // Выключаем светодиод
      while (digitalRead(button2Pin) == LOW);
    }
  }
}

void updateDisplay(int count, float price, float liters) {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Vneseno ");
  lcd.print(count * price);
  lcd.print(" rub");
  lcd.setCursor(0, 1);
  lcd.print(count * liters);
  lcd.print(" litrov");
  delay(1000);
}

дай дураку стеклянный… он и руки порежет.

Несколько раз спрашивал у ИИ, причем отнюдь не код со светодиодиками, а какие-нить вложеннные шаблонные классы - обычно советует правильно :slight_smile:

1 лайк

А какие подойдут? Скажите пожалуйста :persevering_face:

Любые, кроме 0, 1 и А6 А7.
И конечно кроме тех, что уже заняты дисплеем

А, да, еще 13 лучше не использовать…

Спасибо )
Тогда я 6 и 7 попробую

#include <LiquidCrystal.h>

// Определяем пины
const int button1Pin = 6;
const int button2Pin = 7;
const int ledPin = 9; // Пин, к которому подключен светодиод
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;

LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

int button1Count = 0;
int button2Count = 0;

void setup() {
  pinMode(button1Pin, INPUT_PULLUP);
  pinMode(button2Pin, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT); // Устанавливаем пин светодиода как выход
  lcd.begin(16, 2);
  lcd.print("Vending Machine");
  delay(2000);
  lcd.clear();
}

void loop() {
  // Обработка нажатия кнопки 1
  if (digitalRead(button1Pin) == LOW) {
    delay(50);
    if (digitalRead(button1Pin) == LOW) {
      button1Count++;
      updateDisplay(button1Count, 2, 0.5);
      digitalWrite(ledPin, HIGH); // Включаем светодиод
      delay(5000);                   // Держим включенным 0.5 секунды
      digitalWrite(ledPin, LOW);  // Выключаем светодиод
      while (digitalRead(button1Pin) == LOW);
    }
  }

  // Обработка нажатия кнопки 2
  if (digitalRead(button2Pin) == LOW) {
    delay(50);
    if (digitalRead(button2Pin) == LOW) {
      button2Count++;
      updateDisplay(button2Count, 3, 0.75);
      digitalWrite(ledPin, HIGH); // Включаем светодиод
      delay(10000);                   // Держим включенным 0.5 секунды
      digitalWrite(ledPin, LOW);  // Выключаем светодиод
      while (digitalRead(button2Pin) == LOW);
    }
  }
}

void updateDisplay(int count, float price, float liters) {
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Vneseno ");
  lcd.print(count * price);
  lcd.print(" rub");
  lcd.setCursor(0, 1);
  lcd.print(count * liters);
  lcd.print(" litrov");
  delay(1000);
}

Я воспользовался этим кодом который мне переписал ии благодаря тому что вы сказали что там кода для включения светодиода нету. Но вот Lcd так и не работает, в чем может быть дело?)

А то вдруг там и для включения экрана кода не оказалось

Уберите строчку 21 и запустите код, на кнопки не нажимайте. Есть что-нибудь на экране? например ряд прямоугольников вместо букв?

Да, просто прямоугольнички на верхней строке

Больше ничего нету

У этих экранов есть ручка контраста на задней стороне (вроде) - ее надо крутить пока на экране не появятся буквы вместо прямоугольников. Причем иногда крутить надо реально долго, много оборотов.

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