Помогите заменить библиотеку OLED_I2C на U8GLIB
- Войдите на сайт для отправки комментариев
Пт, 16/02/2018 - 12:47
Помогите заменить библиотеку OLED_I2C которая очень большая по обьему на U8GLIB.
#include <OLED_I2C.h> OLED myOLED(SDA, SCL, 1); extern uint8_t SmallFont[]; volatile int encoderPin1 = 2; volatile int encoderPin2 = 3; volatile int MSB ; volatile int LSB ; volatile int encoded = 0 ; volatile int lastEncoded = 0; volatile int sum ; volatile int a = 0; volatile int b = 0; volatile int c = 0; volatile int d = 0; volatile int encoderValue = 0; byte menuPos = 1; long val; long val_old = 0; int i = 0; void setup(){ Serial.begin (9600); myOLED.begin(); myOLED.clrScr(); myOLED.setFont(SmallFont); pinMode(encoderPin1, INPUT); pinMode(encoderPin2, INPUT); pinMode(4, INPUT); // Kнопка "Mеню" digitalWrite(encoderPin1, HIGH); digitalWrite(encoderPin2, HIGH); digitalWrite(4, HIGH); attachInterrupt(0, updateEncoder, CHANGE); attachInterrupt(1, updateEncoder, CHANGE); } void loop(){ MainScreen(); if(!digitalRead(4)){ delay(200);Menu(); } // if(c==1){ // c=0;Serial.println(encoderValue); // } } void updateEncoder(){ MSB = digitalRead(encoderPin1); LSB = digitalRead(encoderPin2); encoded = (MSB << 1) |LSB; sum = (lastEncoded << 2) | encoded; if(encoded==0b0000){ if(a==0){ encoderValue = encoderValue+d; c=1; a=1; b=0; } } if(encoded==0b0011){ if(b==0){ encoderValue = encoderValue+d; c=1; b=1; a=0; } } if(sum == 0b1101 || sum == 0b0100 || sum == 0b0010 || sum == 0b1011){ d=+1; } if(sum == 0b1110 || sum == 0b0111 || sum == 0b0001 || sum == 0b1000){ d=-1; } lastEncoded = encoded; } void MainScreen() { myOLED.clrScr(); //myOLED.invertText(true); myOLED.print("MainScreen", CENTER, 20); //myOLED.invertText(false); myOLED.printNumI(encoderValue, CENTER, 40); myOLED.update(); } void Menu(){ for (i=0; i<=500; i++){ val = encoderValue; //***************************** Выбор позиции в меню *********************** if(val > val_old){ menuPos = menuPos + 1; val_old = val; } if(menuPos > 6){ menuPos = 1; } if(val < val_old){ menuPos = menuPos - 1; val_old = val; } if(menuPos < 1){ menuPos = 6; } switch(menuPos){ //*************** устанавливаем курсор согласно позиции в меню *************** case 1: myOLED.clrScr(); //myOLED.print(">", 0, 0); myOLED.invertText(true); myOLED.print("Alarm", 10, 0); myOLED.invertText(false); myOLED.print("Time", 10, 10); myOLED.print("Setting", 10, 20); myOLED.print("Setting2", 10, 30); myOLED.print("Setting3", 10, 40); myOLED.print("back", 10, 50); if (menuPos == 1 && !digitalRead(4)) MenuSetAlarm(); break; case 2: myOLED.clrScr(); //myOLED.print(">", 0, 10); myOLED.print("Alarm", 10, 0); myOLED.invertText(true); myOLED.print("Time", 10, 10); myOLED.invertText(false); myOLED.print("Setting", 10, 20); myOLED.print("Setting2", 10, 30); myOLED.print("Setting3", 10, 40); myOLED.print("back", 10, 50); if (menuPos == 2 && !digitalRead(4)) MenuSetTime(); break; case 3: myOLED.clrScr(); //myOLED.print(">", 0, 20); myOLED.print("Alarm", 10, 0); myOLED.print("Time", 10, 10); myOLED.invertText(true); myOLED.print("Setting", 10, 20); myOLED.invertText(false); myOLED.print("Setting2", 10, 30); myOLED.print("Setting3", 10, 40); myOLED.print("back", 10, 50); if (menuPos == 3 && !digitalRead(4)) MenuSetting(); break; case 4: myOLED.clrScr(); //myOLED.print(">", 0, 30); myOLED.print("Alarm", 10, 0); myOLED.print("Time", 10, 10); myOLED.print("Setting", 10, 20); myOLED.invertText(true); myOLED.print("Setting2", 10, 30); myOLED.invertText(false); myOLED.print("Setting3", 10, 40); myOLED.print("back", 10, 50); if (menuPos == 4 && !digitalRead(4)) MenuSetting(); break; case 5: myOLED.clrScr(); //myOLED.print(">", 0, 40); myOLED.print("Alarm", 10, 0); myOLED.print("Time", 10, 10); myOLED.print("Setting", 10, 20); myOLED.print("Setting2", 10, 30); myOLED.invertText(true); myOLED.print("Setting3", 10, 40); myOLED.invertText(false); myOLED.print("back", 10, 50); if (menuPos == 5 && !digitalRead(4)) MenuSetting(); break; case 6: myOLED.clrScr(); //myOLED.print(">", 0, 50); myOLED.print("Alarm", 10, 0); myOLED.print("Time", 10, 10); myOLED.print("Setting", 10, 20); myOLED.print("Setting2", 10, 30); myOLED.print("Setting3", 10, 40); myOLED.invertText(true); myOLED.print("back", 10, 50); myOLED.invertText(false); } myOLED.update(); if (!digitalRead(4) && menuPos == 6){break;} } delay (150); } void MenuSetTime(){ for (i=0; i<=500; i++){ myOLED.clrScr(); myOLED.print("MenuSetTime", CENTER, 20); myOLED.update(); if(!digitalRead(4)){break;} } } void MenuSetAlarm(){ for (i=0; i<=500; i++){ myOLED.clrScr(); myOLED.print("MenuSetAlarm", CENTER, 20); myOLED.update(); if(!digitalRead(4)){break;} } } void MenuSetting(){ // for (i=0; i<=500; i++){ // myOLED.clrScr(); // myOLED.print("MenuSetting", CENTER, 20); // myOLED.update(); // if(!digitalRead(4)){break;} // } } void MenuSetting2(){ } void MenuSetting3(){ }
Igoreck, я ж вам ваш ужасный switch переписал на 50 строк короче - что ж вы его за собой таскаете? Зачем я старался?
Прошу прощения не тот код, вот он:
Igoreck - а в чему у вас проблема? Я когда компилирую ваш скетч, у меня занято примерно 1350 байт оперативки - что не так и много.
Igoreck - а в чему у вас проблема? Я когда компилирую ваш скетч, у меня занято примерно 1350 байт оперативки - что не так и много.
Понимаете, дело в том, что я собираю устройство типа метеостанции, и хочу прикрутить дозиметр, короче "все в одном". Но так как мой гомнокод с библиотекой OLED_I2C получается (92%), то боюсь мне не хватит места для дозиметра.
Igoreck - а в чему у вас проблема? Я когда компилирую ваш скетч, у меня занято примерно 1350 байт оперативки - что не так и много.
Понимаете, дело в том, что я собираю устройство типа метеостанции, и хочу прикрутить дозиметр, короче "все в одном". Но так как мой гомнокод с библиотекой OLED_I2C получается (92%), то боюсь мне не хватит места для дозиметра.
а где там 92% ? - у меня дай бог 70... Или этот код - не полный?
Да он не полный.
Нехочу позорится своим быдлокодом.
Пожалуйста помогите сопоставить U8glib вместо OLED_I2C.
Библиотека https://github.com/olikraus/U8glib_Arduino