Официальный сайт компании Arduino по адресу arduino.cc
Перелистывание экранов на LCD 5110
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Пт, 22/07/2016 - 15:59
Здравствуйте! Такой вопрос, есть 2 экрана Main и Score. Нужно между ними переключаться по нажатию кнопки.
Набросал вот такой код, но он не работает.
#include <DS1302.h> #include <Adafruit_GFX.h> #include <Adafruit_PCD8544.h> Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 6, 7); DS1302 rtc(9, 10, 11); // (RST, DAT, CLK) int reedSwitch = 8; // пин, куда присоединен геркон const int buttonPin = 12; int cLen = 1.95;// длина обода в метрах Time t; byte lcd = 0; void setup() { lcd = 1; // инициализация и очистка дисплея display.begin(); display.clearDisplay(); display.display(); // rtc.halt(false); //rtc.writeProtect(false); //The following lines can be commented out to use the values already stored in the DS1302 //rtc.setDOW(THURSDAY); // Set Day-of-Week to FRIDAY Monday //rtc.setTime(18, 44, 0); //rtc.setDate(21, 07, 2016); // Set the date to August 6th, 2010 pinMode(buttonPin, INPUT_PULLUP); pinMode(reedSwitch, INPUT_PULLUP); // режим входа с подтяжкой к плюсу Serial.begin(9600); // включаем вывод в последовательный порт } void loop() { t = rtc.getTime(); if (digitalRead(buttonPin) == HIGH) { lcd = 2; } if (lcd ==1) { Main(); } else if (lcd ==2) { Score(); } } void Main(){ while (digitalRead(reedSwitch) == HIGH); // ждем, пок геркон не будет замкнут uint32_t Time1 = millis(); // запоминаем время for (;;) { // крутим "вечный" цикл delay(50); // ждем, пока магнит проедет мимо геркона while (digitalRead(reedSwitch) == HIGH); // опять ждем замыкания uint32_t Time2 = millis(); // берем текущее время float rTime = (Time2 - Time1) / 3600000.0; // находим время полного оборота колеса в долях часа float bikeSpeed = (cLen / 1000) / rTime; // вычисляем скорость в км/ч //Serial.print("Speed: "); //erial.print(bikeSpeed); //Serial.println(" km/h."); display.setContrast(50); display.clearDisplay();// установка контраста delay(1000); display.setTextSize(2); // установка размера шрифта display.setTextColor(BLACK); // установка цвета текста display.setCursor(0,1); // установка цвета текста display.print(bikeSpeed); display.display(); display.setTextSize(0.5); display.setCursor(59,15); // установка цвета текста display.print("Km/h"); display.display(); display.setTextSize(0.5); display.setCursor(1,25); // установка цвета текста display.print(rtc.getDOWStr()); display.display(); display.setTextSize(1); display.setCursor(1,40); // установка цвета текста display.print(rtc.getTimeStr()); display.display(); Time1 = Time2; // запоминаем время для след. вычисления } } void Score() { display.setTextSize(0.5); display.setCursor(59,15); // установка цвета текста display.print("K"); display.display(); }
1. Строку 41 лучше заменить на if (lcd==1) lcd=2; else lcd=1;
2. Но это не поможет, попав в функцию Main() Вы никогда не вернётесь назад в loop(), ибо строка 56. Скорость лучше вычислять в loop(), а в Main() и в Score() просто выводить данные на экран.