помогите с 16х2

Тема в разделе "Arduino & Shields", создана пользователем Rasl, 18 дек 2016.

  1. Rasl

    Rasl Нуб

    помогите написать прошивку для ардуино, на дисплее 16х2 выводить слова по нажатию кнопки, используя две кнопки прокручивать слова веред и назад
     
  2. Rasl

    Rasl Нуб

    допустим есть слова LED1, LED2, LED3, LED4, две кнопки, нажимаю на первую кнопку высвечивается слово led1, и загорается 1 светодиод, нажимаю еще раз, высвечивается слово led2, и загорается 2 светодиод, при нажатии на вторую кнопку, снова возвращается слово led1, и загорается 1 светодиод
     
  3. Airbus

    Airbus Радиохулиган Модератор

    Какие идеи у Вас по этому поводу? Это читали?
     
  4. rkit

    rkit Гуру

    По-моему предельно ясно, какая - попрошайничать, пока кто-ниудь не сжалится и не напишет.
     
  5. Airbus

    Airbus Радиохулиган Модератор

    Так всё же есть в примерах а в Библиотеке LiquidCrystal.h и бегущий текст и мигающий итд. немного напрячь Моск и будет Вам щастье!
     
  6. Rasl

    Rasl Нуб

    это да, а вот как связать нажатие кнопки и вывод текста?
     
  7. Airbus

    Airbus Радиохулиган Модератор

  8. qwone

    qwone Гик

    Допустите , что есть некая переменная . Если она 0 , то выводится "LED1",1=>" LED2",2=>" LED3,3=>"LED4". Ну а дальше при нажатии кнопки" -", эта переменная уменьшается на один (но не ниже 0) и вывод соотв надписи. Кнопка "+" но в сторону увеличения.
     
  9. Rasl

    Rasl Нуб

    int ledPin1 = 13;
    int ledPin2 = 12;
    int ledPin3 = 11;
    int ledPin4 = 10;
    int switchPin1 = 7;
    int switchPin2 = 8;

    int val;
    int state;
    int c;

    #define TIME 2000 // 2 сек
    unsigned long int time;

    void setup()
    {
    pinMode(ledPin1, OUTPUT);
    pinMode(ledPin2, OUTPUT);
    pinMode(ledPin3, OUTPUT);
    pinMode(ledPin4, OUTPUT);
    pinMode(switchPin1, INPUT);
    pinMode(switchPin2, INPUT);
    digitalWrite(ledPin1, LOW);
    digitalWrite(ledPin2, LOW);
    digitalWrite(ledPin3, LOW);
    digitalWrite(ledPin4, LOW);
    }

    void loop()
    {
    state = digitalRead(switchPin1);
    if (state == HIGH && c == 0) // нажали кнопку
    {
    c = 1;
    }
    if (state == LOW && c == 1) // отпустили кнопку
    {
    val = ++val;
    if (val == 4)
    {
    val = 0;
    }
    c = 0;
    time = millis(); // обнуляем счетчик
    }

    if (val == 0) // Если мы кнопку 0 раз нажали и отпустили
    {
    digitalWrite(ledPin1, LOW);
    digitalWrite(ledPin2, HIGH);
    digitalWrite(ledPin3, HIGH);
    digitalWrite(ledPin4, HIGH);
    }
    if (val == 1) // Если мы кнопку 1 раз нажали и отпустили
    {
    digitalWrite(ledPin1, HIGH);
    digitalWrite(ledPin2, LOW);
    digitalWrite(ledPin3, HIGH);
    digitalWrite(ledPin4, HIGH);
    }
    if (val == 2) // Если мы кнопку 2 раз нажали и отпустили
    {
    digitalWrite(ledPin1, HIGH);
    digitalWrite(ledPin2, HIGH);
    digitalWrite(ledPin3, LOW);
    digitalWrite(ledPin4, HIGH);
    }
    if (val == 3) // Если мы кнопку 3 раз нажали и отпустили
    {
    digitalWrite(ledPin1, HIGH);
    digitalWrite(ledPin2, HIGH);
    digitalWrite(ledPin3, HIGH);
    digitalWrite(ledPin4, LOW);
    }
    if (val == 4) // Если мы кнопку 4 раз нажали и отпустили
    {
    digitalWrite(ledPin1, HIGH);
    digitalWrite(ledPin2, HIGH);
    digitalWrite(ledPin3, HIGH);
    digitalWrite(ledPin4, HIGH);
    }
    }
     
  10. Rasl

    Rasl Нуб

    как сделать в обратную сторону?)
     
  11. qwone

    qwone Гик

    Код (C++):
    /*
    #1
    светодиоды ->13,12,11,10 (Led_pin) 1 горит/0 нет
    кнопка 1 ->7 (btn1_pin) 0 нажато /1 нет
    кнопка 2 ->8 (btn2_pin) 0 нажато /1 нет
    */

    //#1
    const int Led_pin[] = {13, 12, 11, 10};
    int var ; // 0 - LED1/1 - LED2/2 - LED3/3 - LED4
    void viev(int var) {
      switch (var) {
        case 0:
          digitalWrite(Led_pin[0], 1);
          digitalWrite(Led_pin[1], 0);
          digitalWrite(Led_pin[2], 0);
          digitalWrite(Led_pin[3], 0);
          break;
        case 1:
          digitalWrite(Led_pin[0], 1);
          digitalWrite(Led_pin[1], 0);
          digitalWrite(Led_pin[2], 0);
          digitalWrite(Led_pin[3], 0);
          break;
        case 2:
          digitalWrite(Led_pin[0], 0);
          digitalWrite(Led_pin[1], 0);
          digitalWrite(Led_pin[2], 1);
          digitalWrite(Led_pin[3], 0);
          break;
        case 3:
          digitalWrite(Led_pin[0], 0);
          digitalWrite(Led_pin[1], 0);
          digitalWrite(Led_pin[2], 0);
          digitalWrite(Led_pin[3], 1);
          break;
      }
    }
    const int btn1_pin = 7;
    bool btn1_old, btn1 = 1; // состояние кнопки старое и новое
    const int btn2_pin = 8;
    bool btn2_old, btn2 = 1; // состояние кнопки старое и новое

    void setup() {
      //#1
      pinMode(Led_pin[0], OUTPUT);
      pinMode(Led_pin[1], OUTPUT);
      pinMode(Led_pin[2], OUTPUT);
      pinMode(Led_pin[3], OUTPUT);
      viev (var = 0);
      pinMode(btn1_pin, INPUT_PULLUP);
      pinMode(btn2_pin, INPUT_PULLUP);
    }
    void loop() {
      //#1 200 миллисекунд вычислит. поток 1
      static uint32_t past_1 = 0 ;
      if (millis() - past_1 >= 200) { // если прошло 200 миллисек
        past_1 = millis() ;
        btn1_old = btn1;
        btn1 = digitalRead(btn1_pin);
        btn2_old = btn2;
        btn2 = digitalRead(btn2_pin);
        if (btn1_old  && ! btn1) { // нажали кнопку +
          var++; if (var > 3) var = 3;
          viev (var);
        }
        if (btn2_old  && ! btn2) { // нажали кнопку -
          var--; if (var < 0) var = 0;
          viev (var);
        }
      }
    }
     
    Максим B нравится это.
  12. Rasl

    Rasl Нуб

    // include the library code:
    #include <LiquidCrystal.h>

    // initialize the library with the numbers of the interface pins
    LiquidCrystal lcd(11, 10, 5, 4, 3, 2);

    int ledPin1 = 13;
    int ledPin2 = 12;
    int ledPin3 = 9;
    int ledPin4 = 8;
    int switchPin1 = 7;
    const int buttonPin = 8;

    int val;
    int state;
    int c;

    #define TIME 2000 // 2 сек
    unsigned long int time;

    void setup()
    {
    lcd.begin(16, 2);

    pinMode(ledPin1, OUTPUT);
    pinMode(ledPin2, OUTPUT);
    pinMode(ledPin3, OUTPUT);
    pinMode(ledPin4, OUTPUT);
    pinMode(switchPin1, INPUT);
    digitalWrite(ledPin1, LOW);
    digitalWrite(ledPin2, LOW);
    digitalWrite(ledPin3, LOW);
    digitalWrite(ledPin4, LOW);
    }

    void loop()
    {
    state = digitalRead(switchPin1);
    if (state == HIGH && c == 0) // нажали кнопку
    {
    c = 1;
    }
    if (state == LOW && c == 1) // отпустили кнопку
    {
    val = ++val;
    if (val == 4)
    {
    val = 0;
    }
    c = 0;
    time = millis(); // обнуляем счетчик
    }


    if (val == 0) // Если мы кнопку 0 раз нажали и отпустили
    {

    lcd.setCursor(0, 0); // Устанавливаем курсор в начало 1 строки
    lcd.print(" LAPARO "); // Выводим текст

    lcd.setCursor(0, 1);
    lcd.print(" _TEST_ ");
    digitalWrite(ledPin1, LOW);
    digitalWrite(ledPin2, HIGH);
    digitalWrite(ledPin3, HIGH);
    digitalWrite(ledPin4, HIGH);

    }
    if (val == 1) // Если мы кнопку 1 раз нажали и отпустили
    {

    lcd.setCursor(0, 0); // Устанавливаем курсор в начало 1 строки
    lcd.print(" LAPARO "); // Выводим текст

    lcd.setCursor(0, 1);
    lcd.print(" _CALIB_ ");
    digitalWrite(ledPin1, HIGH);
    digitalWrite(ledPin2, LOW);
    digitalWrite(ledPin3, HIGH);
    digitalWrite(ledPin4, HIGH);
    }
    if (val == 2) // Если мы кнопку 2 раз нажали и отпустили
    {
    lcd.setCursor(0, 0); // Устанавливаем курсор в начало 1 строки
    lcd.print(" HISTORO "); // Выводим текст

    lcd.setCursor(0, 1);

    lcd.print(" _TEST_ ");
    digitalWrite(ledPin1, HIGH);
    digitalWrite(ledPin2, HIGH);
    digitalWrite(ledPin3, LOW);
    digitalWrite(ledPin4, HIGH);
    }
    if (val == 3) // Если мы кнопку 3 раз нажали и отпустили
    {
    lcd.setCursor(0, 0); // Устанавливаем курсор в начало 1 строки
    lcd.print(" HISTORO "); // Выводим текст
    lcd.setCursor(0, 1);

    lcd.print(" _CALIB_ ");
    digitalWrite(ledPin1, HIGH);
    digitalWrite(ledPin2, HIGH);
    digitalWrite(ledPin3, HIGH);
    digitalWrite(ledPin4, LOW);
    }
    if (val == 4) // Если мы кнопку 4 раз нажали и отпустили
    {
    lcd.clear();
    digitalWrite(ledPin1, HIGH);
    digitalWrite(ledPin2, HIGH);
    digitalWrite(ledPin3, HIGH);
    digitalWrite(ledPin4, HIGH);
    }
    }
     

    Вложения:

    • TEST_BOX.ino
      Размер файла:
      3 КБ
      Просмотров:
      403
  13. Rasl

    Rasl Нуб

    ВСЕМ СПАСИБО ):)
     
  14. Максим B

    Максим B Гуру

    Только по-моему case 0 и case 1 - одинаковые, а должно быть так:

    digitalWrite(Led_pin[0], 0);
    digitalWrite(Led_pin[1], 1);
     
  15. qwone

    qwone Гик

    Ну да ,Максим B, немного ошибся.
    Код (C++):
    /*
    #1
    светодиоды ->13,12,11,10 (Led_pin) 1 горит/0 нет
    кнопка 1 ->7 (btn1_pin) 0 нажато /1 нет
    кнопка 2 ->8 (btn2_pin) 0 нажато /1 нет
    */

    class Cl_Rasl {
      public:
        Cl_Rasl(int _1pin, int _2pin, int _3pin, int _4pin, int _5pin, int _6pin);
        void in_setup();
        void in_loop();
      private:
        int Led_pin[4]; // нога 4-x светодиодов
        int _btn1_pin;// нога 1 кнопки
        bool btn1_old, btn1 = 1; // состояние кнопки старое и новое
        int _btn2_pin;// нога 1 кнопки
        bool btn2_old, btn2 = 1; // состояние кнопки старое и новое
        void viev();
        int var ; // 0 - LED1/1 - LED2/2 - LED3/3 - LED4

        uint32_t past_1 = 0 ;
    };
    Cl_Rasl::Cl_Rasl(int _1pin, int _2pin, int _3pin, int _4pin, int _5pin, int _6pin) {
      Led_pin[0] = _1pin;
      Led_pin[1] = _2pin;
      Led_pin[2] = _3pin;
      Led_pin[3] = _4pin;
      _btn1_pin = _5pin;
      _btn2_pin = _6pin;
    }
    void Cl_Rasl::viev() {
      switch (var) {
        case 0:
          digitalWrite(Led_pin[0], 1);
          digitalWrite(Led_pin[1], 0);
          digitalWrite(Led_pin[2], 0);
          digitalWrite(Led_pin[3], 0);
          break;
        case 1:
          digitalWrite(Led_pin[0], 0);
          digitalWrite(Led_pin[1], 1);
          digitalWrite(Led_pin[2], 0);
          digitalWrite(Led_pin[3], 0);
          break;
        case 2:
          digitalWrite(Led_pin[0], 0);
          digitalWrite(Led_pin[1], 0);
          digitalWrite(Led_pin[2], 1);
          digitalWrite(Led_pin[3], 0);
          break;
        case 3:
          digitalWrite(Led_pin[0], 0);
          digitalWrite(Led_pin[1], 0);
          digitalWrite(Led_pin[2], 0);
          digitalWrite(Led_pin[3], 1);
          break;
      }
    }
    void Cl_Rasl::in_setup() {
      pinMode(Led_pin[0], OUTPUT);
      pinMode(Led_pin[1], OUTPUT);
      pinMode(Led_pin[2], OUTPUT);
      pinMode(Led_pin[3], OUTPUT);
      var = 0;
      viev();
      pinMode(_btn1_pin, INPUT_PULLUP);
      pinMode(_btn2_pin, INPUT_PULLUP);
    }
    void Cl_Rasl::in_loop() {
      if (millis() - past_1 >= 200) { // если прошло 200 миллисек
        past_1 = millis() ;
        btn1_old = btn1;
        btn1 = digitalRead(_btn1_pin);
        btn2_old = btn2;
        btn2 = digitalRead(_btn2_pin);
        if (btn1_old  && ! btn1) { // нажали кнопку +
          var++; if (var > 3) var = 3;
          viev ();
        }
        if (btn2_old  && ! btn2) { // нажали кнопку -
          var--; if (var < 0) var = 0;
          viev ();
        }
      }
    }

    //#1
    Cl_Rasl Rasl(13, 12, 11, 10, 7, 8); // ноги led_1,led_2,led_3,led_4,btn1,btn2
    void setup() {
      //#1
      Rasl.in_setup();
    }
    void loop() {
      //#1
      Rasl.in_loop();
    }
    Ну сейчас загнал все в класс. Ну если кто желает то можно воткнуть в библиотеку в файлы находящие в той же папки что и скетч
     
  16. qwone

    qwone Гик

    Ну где-то так. Исходный файл
    Код (C++):
    /*
    #1
    светодиоды ->13,12,11,10 (Led_pin) 1 горит/0 нет
    кнопка 1 ->7 (btn1_pin) 0 нажато /1 нет
    кнопка 2 ->8 (btn2_pin) 0 нажато /1 нет
    */

    //#1
    #include "Rasl.h"
    Cl_Rasl Rasl(13, 12, 11, 10, 7, 8); // ноги led_1,led_2,led_3,led_4,btn1,btn2
    void setup() {
      //#1
      Rasl.in_setup();
    }
    void loop() {
      //#1
      Rasl.in_loop();
    }
    файл Rasl.h
    Код (C++):
    //Rasl.h
    #ifndef Rasl_h
    #define cl_Rasl_h
    #include "Arduino.h"
    class Cl_Rasl {
      public:
        Cl_Rasl(int _1pin, int _2pin, int _3pin, int _4pin, int _5pin, int _6pin);
        void in_setup();
        void in_loop();
      private:
        int Led_pin[4]; // нога 4-x светодиодов
        int btn1_pin;// нога 1 кнопки
        bool btn1_old, btn1 = 1; // состояние кнопки старое и новое
        int btn2_pin;// нога 2 кнопки
        bool btn2_old, btn2 = 1; // состояние кнопки старое и новое
        void viev();
        int var ; // 0 - LED1/1 - LED2/2 - LED3/3 - LED4
        uint32_t past_1 = 0 ;
    };
    #endif
    Файл Rasl.cpp
    Код (C++):
    //Rasl.cpp
    #include "Arduino.h"
    #include "Rasl.h"
    Cl_Rasl::Cl_Rasl(int _1pin, int _2pin, int _3pin, int _4pin, int _5pin, int _6pin) {
      Led_pin[0] = _1pin;
      Led_pin[1] = _2pin;
      Led_pin[2] = _3pin;
      Led_pin[3] = _4pin;
      btn1_pin = _5pin;
      btn2_pin = _6pin;
    }
    void Cl_Rasl::viev() {
      switch (var) {
        case 0:
          digitalWrite(Led_pin[0], 1);
          digitalWrite(Led_pin[1], 0);
          digitalWrite(Led_pin[2], 0);
          digitalWrite(Led_pin[3], 0);
          break;
        case 1:
          digitalWrite(Led_pin[0], 0);
          digitalWrite(Led_pin[1], 1);
          digitalWrite(Led_pin[2], 0);
          digitalWrite(Led_pin[3], 0);
          break;
        case 2:
          digitalWrite(Led_pin[0], 0);
          digitalWrite(Led_pin[1], 0);
          digitalWrite(Led_pin[2], 1);
          digitalWrite(Led_pin[3], 0);
          break;
        case 3:
          digitalWrite(Led_pin[0], 0);
          digitalWrite(Led_pin[1], 0);
          digitalWrite(Led_pin[2], 0);
          digitalWrite(Led_pin[3], 1);
          break;
      }
    }
    void Cl_Rasl::in_setup() {
      pinMode(Led_pin[0], OUTPUT);
      pinMode(Led_pin[1], OUTPUT);
      pinMode(Led_pin[2], OUTPUT);
      pinMode(Led_pin[3], OUTPUT);
      var = 0;
      viev();
      pinMode(btn1_pin, INPUT_PULLUP);
      pinMode(btn2_pin, INPUT_PULLUP);
    }
    void Cl_Rasl::in_loop() {
      if (millis() - past_1 >= 200) { // если прошло 200 миллисек
        past_1 = millis() ;
        btn1_old = btn1;
        btn1 = digitalRead(btn1_pin);
        btn2_old = btn2;
        btn2 = digitalRead(btn2_pin);
        if (btn1_old  && ! btn1) { // нажали кнопку +
          var++; if (var > 3) var = 3;
          viev ();
        }
        if (btn2_old  && ! btn2) { // нажали кнопку -
          var--; if (var < 0) var = 0;
          viev ();
        }
      }
    }
     
    Tomasina нравится это.