помогите написать прошивку для ардуино, на дисплее 16х2 выводить слова по нажатию кнопки, используя две кнопки прокручивать слова веред и назад
допустим есть слова LED1, LED2, LED3, LED4, две кнопки, нажимаю на первую кнопку высвечивается слово led1, и загорается 1 светодиод, нажимаю еще раз, высвечивается слово led2, и загорается 2 светодиод, при нажатии на вторую кнопку, снова возвращается слово led1, и загорается 1 светодиод
Так всё же есть в примерах а в Библиотеке LiquidCrystal.h и бегущий текст и мигающий итд. немного напрячь Моск и будет Вам щастье!
Допустите , что есть некая переменная . Если она 0 , то выводится "LED1",1=>" LED2",2=>" LED3,3=>"LED4". Ну а дальше при нажатии кнопки" -", эта переменная уменьшается на один (но не ниже 0) и вывод соотв надписи. Кнопка "+" но в сторону увеличения.
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); } }
Код (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); } } }
// 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); } }
Только по-моему case 0 и case 1 - одинаковые, а должно быть так: digitalWrite(Led_pin[0], 0); digitalWrite(Led_pin[1], 1);
Ну да ,Максим 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(); } Ну сейчас загнал все в класс. Ну если кто желает то можно воткнуть в библиотеку в файлы находящие в той же папки что и скетч
Ну где-то так. Исходный файл Код (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 (); } } }