Помогите с программированием LCD 16x2 keypad Shield для UNO
- Войдите на сайт для отправки комментариев
Чт, 12/05/2016 - 14:46
Написал вот такую штуку для двух датчиков, теперь думаю как сделать так, чтоб можно было кнопками на шилде переключать информацию с большего колличества датчиков. Кто сможет подсказать как это реализовать?
#include <LiquidCrystal.h> float temp; int tempPin = 1; int tempPin1 = 2; byte TEMP_lit[8] = { B00110, B01001, B01001, B00110, B00000, B00000, B00000, }; byte D_lit[8] = { B01110, B01010, B01010, B01010, B11111, B10001, B10001, }; byte PE_lit[8] = { B11111, B10001, B10001, B10001, B10001, B10001, B10001, B00000, }; byte EL_lit[8] = { B00111, B01001, B10001, B10001, B10001, B10001, B10001, B00000, }; byte ZH_lit[8] = { B10001, B10101, B10101, B01110, B10101, B10101, B10001, B00000, }; byte MZ_lit[8] = { B10000, B10000, B10000, B11110, B10001, B10001, B11110, B00000, }; byte U_lit[8] = { B10001, B10001, B10001, B01111, B00001, B00001, B11110, B00000, }; LiquidCrystal lcd(8, 9, 4, 5, 6, 7); const int inPin = 1; const int inPin1 = 2; void setup() { lcd.begin(16, 2); lcd.createChar(7, TEMP_lit); lcd.createChar(1, PE_lit); lcd.createChar(2, U_lit); lcd.createChar(3, EL_lit); lcd.createChar(4, ZH_lit); lcd.createChar(5, MZ_lit); lcd.createChar(6, D_lit); } void loop() { int value = analogRead(inPin); float millivolts = (value / 1024.0) * 5000; float celsius = millivolts / 10; if (celsius >= 60) { lcd.setCursor(5, 0); lcd.write("ERROR"); } else { lcd.setCursor(5, 0); lcd.print(celsius); lcd.write("\7C"); } lcd.setCursor(0, 0); lcd.write("\6OM"); int value1 = analogRead(inPin1); float millivolts1 = (value1 / 1024.0) * 5000; float celsius1 = millivolts1 / 10; if (celsius1 >= 60) { lcd.setCursor(5, 1); lcd.write("ERROR"); } else { lcd.setCursor(5, 1); lcd.print(celsius1); lcd.write("\7C"); } lcd.setCursor(0, 1); lcd.write("\2\3"); delay(500); lcd.clear(); }
Пока что у меня выглядит так.
Ну, если датчиков много, то самый правильный путь - сделать "виртуальныый" экран для каждого датчика. Программа не задумываясь ни о чём просто пишет данные в ыиртуальный экран. И есть совершенно независимый кусок. который переключает (активирует) виртуальные экраны, т.е. связывает реальный экран с тем или иным виртуальным. При этом программам работы с датчиками не нужно знать показываются их данные в данный момент или нет - их дело писать на виртуальный экран и ни о чём не париться. А на физическом экране всегда показывается состояние активного в данный момент виртуального.
C виртуальным экраном ясно но как это реализовать.... Обозначать экран не 16х2 а например 16х6 ?
не 16х2 а например 16х6 ?
256х256
не 16х2 а например 16х6 ?
256х256
Смешно. И потеряться на этом поле. Осталось понять как управление приладить к перемещению по этому полю.
Вот это отдельно работает. Осталось понять, как присовокупить к программе с датчиками :-)
не 16х2 а например 16х6 ?
256х256
Смешно. И потеряться на этом поле. Осталось понять как управление приладить к перемещению по этому полю.
почему смешно? там, оказывается видеопамяти больше, чем размер стекла индикатора