Помогите новичку

Тема в разделе "Arduino & Shields", создана пользователем Cyp41k, 15 фев 2020 в 16:29.

  1. Cyp41k

    Cyp41k Нуб

    Нужно на led дисплее в tinkercad вывести горит лампочка или нет, если горит то допустим поставить точку (готовая схема LED).Точка горит постоянно.Знаю ошибка скорее всего очень глупая но подскажите пж

    Код (C++):
    int state = 0;
    int led1=6;
    int led2=7;
    int led3=8;
    #include <LiquidCrystal.h>
    LiquidCrystal lcd(12,11,5,4,3,2);
    void setup (){
    lcd.begin(16,2);
    pinMode(led1,OUTPUT);
    pinMode(led2,OUTPUT);
    pinMode(led3,OUTPUT);
    }

    void loop(){
      for(int i=6; i<9; i++)
      {
      digitalWrite(i,HIGH);
      delay(1000);
      digitalWrite(i,LOW);
      }
      for(int i=8; i<5; i--)
      {
      digitalWrite(i,HIGH);
      delay(1000);
      digitalWrite(i,LOW);
      }
    lcd.setCursor(0,0);
    lcd.print("123");
    state = digitalRead (led1);
      if(state == HIGH ){
        lcd.setCursor(0,1);
        lcd.print("1");
      }
        state = digitalRead (led1);
      if(state == LOW ){
        lcd.setCursor(0,1);
        lcd.print(".");
      }
    state = digitalRead (led2);
      if(state == HIGH )
        lcd.print("2");
    state = digitalRead (led2);
      if(state == LOW )
        lcd.print(".");
    state = digitalRead (led3);
      if(state == HIGH )
        lcd.print("3");
    state = digitalRead (led3);
      if(state == LOW )
        lcd.print(".");
      }
     
  2. a1000

    a1000 Гик

    Как-то я вообще не могу понять логику вашего кода.
    Вначале вы поочерёдно, на одну секунду, зажигаете светодиоды на пинах 6, 7, 8. Затем вы проделываете ту-же операцию в обратном порядке. Потом, когда все светодиоды погашены вы начинаете проверять их состояние. Естественно вы получаете всегда LOW.
    В выводе информации на экран особо не разбирался. Если что - опишите как вы хотели это видеть на экране.
     
    Cyp41k нравится это.
  3. Cyp41k

    Cyp41k Нуб

    Смотрите,мне нужно подавать на этот экран какой-либо знак допустим "." когда светодиод к примеру 6 включен,когда он выключен под ним поле должно быть пустое
     
  4. Daniil

    Daniil Гуру

    Так у вас всегда и будет точка. Вы же перед проверкой все светики тушите.
    Вы не забыли про if else? много лишних операций, может, из-за них вы и запутались?
     
    Последнее редактирование: 15 фев 2020 в 20:10
  5. Cyp41k

    Cyp41k Нуб

    Скорее всего так и есть т.к. я в этом мало понимаю и не совсем понял этот материал.Буду ооочень благодарен если болеее конкретно
     
  6. a1000

    a1000 Гик

    Cyp41k, учитесь чётко формулировать ваши желания. Без этого в программировании очень трудно. Я спросил
    в ответ какие-то пространные рассуждения о включении точки не понятно где. Микроконтроллер чётко будет выполнять все ваши команды, но команды должны быть чёткими и понятными. Угадывать ваши желания он не может. Так-же ни кто на форуме угадывать ваши хотелки не будет.
    Так вот, пока я не в курсе вашей задумки могу посоветовать одно. Выводите знак включения светодиода сразу после его включения и гасите его сразу после его выключения.
     
  7. Cyp41k

    Cyp41k Нуб

    Чучуть поменял код.Да я забыл упоменуть что в задании было указано что нужно сделать светлофор из светодтодов потом после этого вывести на дисплей номера лампочек и под ними на рядок ниже сделать что бы когда горит лампочка 1 под ней на дисплее была точка ,когда она не горит под ней ничего.И так с каждой лампочкой
    Код (C++):
    int state = 0;
    int led1=6;
    int led2=7;
    int led3=8;
    #include <LiquidCrystal.h>
    LiquidCrystal lcd(12,11,5,4,3,2);
    void setup (){
    lcd.begin(16,2);
    pinMode(led1,OUTPUT);
    pinMode(led2,OUTPUT);
    pinMode(led3,OUTPUT);
    }

    void loop(){
    digitalWrite(8,HIGH);
    delay(500);
    digitalWrite(8,LOW);
    digitalWrite(7,HIGH);
    delay(500);
    digitalWrite(7,LOW);
    digitalWrite(6,HIGH);
    delay(500);
    digitalWrite(6,LOW);
    lcd.setCursor(0,0);
    lcd.print("123");
    state = digitalRead (led1);
      if(state == HIGH ){
        lcd.setCursor(0,1);
        lcd.print("1");
      }
        state = digitalRead (led1);
      if(state == LOW ){
        lcd.setCursor(0,1);
        lcd.print(".");
      }
    state = digitalRead (led2);
      if(state == HIGH )
        lcd.print("2");
    state = digitalRead (led2);
      if(state == LOW )
        lcd.print(".");
    state = digitalRead (led3);
      if(state == HIGH )
        lcd.print("3");
    state = digitalRead (led3);
      if(state == LOW )
        lcd.print(".");
      }
     
     
  8. a1000

    a1000 Гик

    Ну вот стало понятно. На данный момент у вас что на экране? На верхней строке 123, а под ними точки?
     
  9. Daniil

    Daniil Гуру

    if else if
     
  10. Cyp41k

    Cyp41k Нуб

    Да
     
  11. a1000

    a1000 Гик

    Ну так вынесите
    Код (C++):
    lcd.setCursor(0,0);
    lcd.print("123");
    в setup а дальше как я вам советовал
    например для светодиода 1
    Код (C++):
    digitalWrite(6,HIGH);
    lcd.setCursor(0,1);
    lcd.print(".");
    delay(500);
    digitalWrite(6,LOW);
    lcd.setCursor(0,1);
    lcd.print(" ");
    Для остальных аналогично, только знакоместо укажите правильно.
     
  12. Cyp41k

    Cyp41k Нуб

    ОГРОМЕННОЕ СПАСИБО.Очень помогли