Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed Adafruit_GFX
main.cpp@2:f54d29f79137, 2019-06-21 (annotated)
- Committer:
- kaisen
- Date:
- Fri Jun 21 05:38:10 2019 +0000
- Revision:
- 2:f54d29f79137
- Parent:
- 1:51508978bad6
Fork Adafruit_GFX
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kaisen | 0:30431dd1f3c9 | 1 | #include "mbed.h" |
kaisen | 0:30431dd1f3c9 | 2 | #include "Adafruit_SSD1306.h" |
kaisen | 0:30431dd1f3c9 | 3 | #include <string> |
kaisen | 1:51508978bad6 | 4 | #include <sstream> |
kaisen | 0:30431dd1f3c9 | 5 | |
kaisen | 0:30431dd1f3c9 | 6 | void Rx_interrupt(); |
kaisen | 0:30431dd1f3c9 | 7 | void writeStringToOLED(string str, int x, int y); |
kaisen | 0:30431dd1f3c9 | 8 | void showStatus(); |
kaisen | 0:30431dd1f3c9 | 9 | void toggleLED(); |
kaisen | 0:30431dd1f3c9 | 10 | void waterPlant(); |
kaisen | 0:30431dd1f3c9 | 11 | void waterCritical(); |
kaisen | 0:30431dd1f3c9 | 12 | |
kaisen | 0:30431dd1f3c9 | 13 | void drawSmile(); |
kaisen | 0:30431dd1f3c9 | 14 | void drawIdle(); |
kaisen | 0:30431dd1f3c9 | 15 | void drawSleep(); |
kaisen | 0:30431dd1f3c9 | 16 | void drawDead(); |
kaisen | 0:30431dd1f3c9 | 17 | |
kaisen | 0:30431dd1f3c9 | 18 | volatile bool sleepCycle; |
kaisen | 0:30431dd1f3c9 | 19 | |
kaisen | 0:30431dd1f3c9 | 20 | /* |
kaisen | 0:30431dd1f3c9 | 21 | OLED |
kaisen | 0:30431dd1f3c9 | 22 | P5 -> MOSI |
kaisen | 0:30431dd1f3c9 | 23 | P6 -> aberto |
kaisen | 0:30431dd1f3c9 | 24 | P7 -> CLK |
kaisen | 0:30431dd1f3c9 | 25 | Pinos variáveis |
kaisen | 0:30431dd1f3c9 | 26 | P8 -> RES |
kaisen | 0:30431dd1f3c9 | 27 | P9 -> DC |
kaisen | 0:30431dd1f3c9 | 28 | P10 -> CS |
kaisen | 0:30431dd1f3c9 | 29 | |
kaisen | 0:30431dd1f3c9 | 30 | Configuração SPI entra com (MOSI, MISO, CLK) |
kaisen | 0:30431dd1f3c9 | 31 | Configuração OLED entra com (SPI, DC, RES, CS, altura, largura) |
kaisen | 0:30431dd1f3c9 | 32 | */ |
kaisen | 0:30431dd1f3c9 | 33 | SPI spi(p5, p6, p7); |
kaisen | 0:30431dd1f3c9 | 34 | Adafruit_SSD1306_Spi spiOLED(spi, p9, p8, p10, 32, 128); |
kaisen | 0:30431dd1f3c9 | 35 | |
kaisen | 0:30431dd1f3c9 | 36 | /* |
kaisen | 0:30431dd1f3c9 | 37 | BLUETOOTH |
kaisen | 0:30431dd1f3c9 | 38 | P13 -> TX |
kaisen | 0:30431dd1f3c9 | 39 | P14 -> RX |
kaisen | 0:30431dd1f3c9 | 40 | |
kaisen | 0:30431dd1f3c9 | 41 | Configuração serial entra com (RX, TX) |
kaisen | 0:30431dd1f3c9 | 42 | */ |
kaisen | 0:30431dd1f3c9 | 43 | Serial hc(p14, p13); |
kaisen | 0:30431dd1f3c9 | 44 | |
kaisen | 0:30431dd1f3c9 | 45 | |
kaisen | 0:30431dd1f3c9 | 46 | /* |
kaisen | 0:30431dd1f3c9 | 47 | Componentes que utilizam saída PWM: |
kaisen | 0:30431dd1f3c9 | 48 | P21 a P26 |
kaisen | 0:30431dd1f3c9 | 49 | */ |
kaisen | 0:30431dd1f3c9 | 50 | PwmOut pump(p21); |
kaisen | 0:30431dd1f3c9 | 51 | PwmOut led(p22); |
kaisen | 0:30431dd1f3c9 | 52 | |
kaisen | 0:30431dd1f3c9 | 53 | /* |
kaisen | 0:30431dd1f3c9 | 54 | Componentes que utilizam leitura análogica: |
kaisen | 0:30431dd1f3c9 | 55 | P15 a P20 |
kaisen | 0:30431dd1f3c9 | 56 | */ |
kaisen | 0:30431dd1f3c9 | 57 | AnalogIn ldr(p15); |
kaisen | 0:30431dd1f3c9 | 58 | AnalogIn hygroEarth(p16); |
kaisen | 0:30431dd1f3c9 | 59 | AnalogIn hygroWater(p17); |
kaisen | 0:30431dd1f3c9 | 60 | |
kaisen | 0:30431dd1f3c9 | 61 | /* |
kaisen | 0:30431dd1f3c9 | 62 | Componentes que utilizam leitura digital: |
kaisen | 0:30431dd1f3c9 | 63 | Qualquer pino livre (P5 a P30) |
kaisen | 0:30431dd1f3c9 | 64 | */ |
kaisen | 0:30431dd1f3c9 | 65 | DigitalIn pres(p30); |
kaisen | 0:30431dd1f3c9 | 66 | |
kaisen | 0:30431dd1f3c9 | 67 | volatile bool ledStatus; |
kaisen | 0:30431dd1f3c9 | 68 | volatile float waterLimit; |
kaisen | 0:30431dd1f3c9 | 69 | volatile time_t seconds; |
kaisen | 0:30431dd1f3c9 | 70 | |
kaisen | 0:30431dd1f3c9 | 71 | int main() |
kaisen | 0:30431dd1f3c9 | 72 | { |
kaisen | 0:30431dd1f3c9 | 73 | set_time(0); |
kaisen | 0:30431dd1f3c9 | 74 | seconds = time(NULL); |
kaisen | 0:30431dd1f3c9 | 75 | // Resetar display |
kaisen | 0:30431dd1f3c9 | 76 | spiOLED.clearDisplay(); |
kaisen | 0:30431dd1f3c9 | 77 | drawSmile(); |
kaisen | 0:30431dd1f3c9 | 78 | spiOLED.display(); |
kaisen | 0:30431dd1f3c9 | 79 | wait(10); |
kaisen | 0:30431dd1f3c9 | 80 | drawIdle(); |
kaisen | 1:51508978bad6 | 81 | |
kaisen | 0:30431dd1f3c9 | 82 | ledStatus = false; |
kaisen | 0:30431dd1f3c9 | 83 | sleepCycle = false; |
kaisen | 1:51508978bad6 | 84 | |
kaisen | 0:30431dd1f3c9 | 85 | int tsEarth = 0; // |
kaisen | 0:30431dd1f3c9 | 86 | int tsLight = 0; // |
kaisen | 0:30431dd1f3c9 | 87 | int tsPres = 0; // |
kaisen | 1:51508978bad6 | 88 | |
kaisen | 0:30431dd1f3c9 | 89 | int delayEarth = 3600; // |
kaisen | 0:30431dd1f3c9 | 90 | int delayLight; // |
kaisen | 0:30431dd1f3c9 | 91 | int delayPres = 7200; // |
kaisen | 1:51508978bad6 | 92 | |
kaisen | 0:30431dd1f3c9 | 93 | waterLimit = 1; |
kaisen | 0:30431dd1f3c9 | 94 | float lightLimit = 1; // |
kaisen | 0:30431dd1f3c9 | 95 | float earthLimit = 1; // |
kaisen | 1:51508978bad6 | 96 | |
kaisen | 0:30431dd1f3c9 | 97 | bool turnOnLED; |
kaisen | 0:30431dd1f3c9 | 98 | bool turnOffLED; |
kaisen | 1:51508978bad6 | 99 | |
kaisen | 1:51508978bad6 | 100 | while(1) { |
kaisen | 0:30431dd1f3c9 | 101 | seconds = time(NULL); |
kaisen | 1:51508978bad6 | 102 | |
kaisen | 0:30431dd1f3c9 | 103 | /* |
kaisen | 0:30431dd1f3c9 | 104 | HIGRÔMETRO TERRA |
kaisen | 0:30431dd1f3c9 | 105 | - Rega a planta quando o nível de umidade detectado for adequado |
kaisen | 0:30431dd1f3c9 | 106 | - Não rega se não tiver passado um determinado tempo desde a ultima vez |
kaisen | 1:51508978bad6 | 107 | |
kaisen | 0:30431dd1f3c9 | 108 | Condição 1: Valor lido no higrômetro da terra maior (mais seco) que o limite |
kaisen | 0:30431dd1f3c9 | 109 | Condição 2: Tempo desde a ultima vez que foi regado maior que o delay mínimo |
kaisen | 0:30431dd1f3c9 | 110 | */ |
kaisen | 0:30431dd1f3c9 | 111 | if (hygroEarth.read() > earthLimit && seconds - tsEarth > delayEarth) { |
kaisen | 0:30431dd1f3c9 | 112 | tsEarth = seconds; |
kaisen | 0:30431dd1f3c9 | 113 | waterPlant(); |
kaisen | 0:30431dd1f3c9 | 114 | } |
kaisen | 1:51508978bad6 | 115 | |
kaisen | 0:30431dd1f3c9 | 116 | /* |
kaisen | 0:30431dd1f3c9 | 117 | SENSOR LDR E FITA DE LED |
kaisen | 0:30431dd1f3c9 | 118 | - Liga/desliga a fita de LED dependendo do nível de luz |
kaisen | 0:30431dd1f3c9 | 119 | (acrescentar: do horário do dia) |
kaisen | 1:51508978bad6 | 120 | |
kaisen | 0:30431dd1f3c9 | 121 | Condição 1: Valor lido no LDR inferior a luz necessária |
kaisen | 0:30431dd1f3c9 | 122 | Condição 2: LED está desligado |
kaisen | 0:30431dd1f3c9 | 123 | Condição 3 (acrescentar): horário atual não ser noite |
kaisen | 0:30431dd1f3c9 | 124 | */ |
kaisen | 0:30431dd1f3c9 | 125 | turnOnLED = ldr.read() < lightLimit && !ledStatus; |
kaisen | 0:30431dd1f3c9 | 126 | // Mesmas condições, mas inversas para desligar |
kaisen | 0:30431dd1f3c9 | 127 | turnOffLED = ldr.read() > lightLimit && ledStatus; |
kaisen | 0:30431dd1f3c9 | 128 | if (turnOnLED || turnOffLED) { |
kaisen | 0:30431dd1f3c9 | 129 | toggleLED(); |
kaisen | 0:30431dd1f3c9 | 130 | } |
kaisen | 1:51508978bad6 | 131 | |
kaisen | 0:30431dd1f3c9 | 132 | /* |
kaisen | 0:30431dd1f3c9 | 133 | SENSOR PRESENÇA |
kaisen | 0:30431dd1f3c9 | 134 | - Desenha uma carinha feliz quando detecta presença de alguém ^u^ |
kaisen | 1:51508978bad6 | 135 | |
kaisen | 0:30431dd1f3c9 | 136 | Condição 1: Valor lido no sensor de presença é 1 |
kaisen | 0:30431dd1f3c9 | 137 | Condição 2: Tempo desde a ultima vez que foi ativado maior que o delay mínimo |
kaisen | 0:30431dd1f3c9 | 138 | */ |
kaisen | 0:30431dd1f3c9 | 139 | if (pres.read() && seconds - tsPres > delayPres) { |
kaisen | 0:30431dd1f3c9 | 140 | tsPres = seconds; |
kaisen | 0:30431dd1f3c9 | 141 | drawSmile(); |
kaisen | 0:30431dd1f3c9 | 142 | wait(15); |
kaisen | 0:30431dd1f3c9 | 143 | } |
kaisen | 1:51508978bad6 | 144 | |
kaisen | 0:30431dd1f3c9 | 145 | /* |
kaisen | 0:30431dd1f3c9 | 146 | HIGRÔMETRO ÁGUA |
kaisen | 0:30431dd1f3c9 | 147 | - Interrompe o programa no caso de não ter água no tanque |
kaisen | 1:51508978bad6 | 148 | |
kaisen | 1:51508978bad6 | 149 | Condição 1: Valor lido no higrômetro da água maior (mais seco) que o limite |
kaisen | 0:30431dd1f3c9 | 150 | */ |
kaisen | 0:30431dd1f3c9 | 151 | if (hygroWater.read() > waterLimit) { |
kaisen | 0:30431dd1f3c9 | 152 | waterCritical(); |
kaisen | 0:30431dd1f3c9 | 153 | } |
kaisen | 1:51508978bad6 | 154 | |
kaisen | 0:30431dd1f3c9 | 155 | /* |
kaisen | 0:30431dd1f3c9 | 156 | DORMIR |
kaisen | 0:30431dd1f3c9 | 157 | - O vaso dorme quando o horário for de noite. |
kaisen | 1:51508978bad6 | 158 | |
kaisen | 0:30431dd1f3c9 | 159 | Condição 1: ??? horas noturnas |
kaisen | 0:30431dd1f3c9 | 160 | */ |
kaisen | 1:51508978bad6 | 161 | |
kaisen | 1:51508978bad6 | 162 | // ... |
kaisen | 0:30431dd1f3c9 | 163 | if (true) { |
kaisen | 0:30431dd1f3c9 | 164 | drawSleep(); |
kaisen | 0:30431dd1f3c9 | 165 | } |
kaisen | 1:51508978bad6 | 166 | |
kaisen | 0:30431dd1f3c9 | 167 | wait(1); |
kaisen | 0:30431dd1f3c9 | 168 | } |
kaisen | 0:30431dd1f3c9 | 169 | } |
kaisen | 0:30431dd1f3c9 | 170 | |
kaisen | 0:30431dd1f3c9 | 171 | // Receber comandos manuais por bluetooth |
kaisen | 1:51508978bad6 | 172 | void Rx_interrupt() |
kaisen | 1:51508978bad6 | 173 | { |
kaisen | 0:30431dd1f3c9 | 174 | char c; |
kaisen | 0:30431dd1f3c9 | 175 | c = hc.getc(); |
kaisen | 1:51508978bad6 | 176 | switch(c) { |
kaisen | 0:30431dd1f3c9 | 177 | case 'S': |
kaisen | 0:30431dd1f3c9 | 178 | showStatus(); |
kaisen | 0:30431dd1f3c9 | 179 | break; |
kaisen | 0:30431dd1f3c9 | 180 | case 'A': |
kaisen | 0:30431dd1f3c9 | 181 | waterPlant(); |
kaisen | 0:30431dd1f3c9 | 182 | break; |
kaisen | 0:30431dd1f3c9 | 183 | case 'L': |
kaisen | 0:30431dd1f3c9 | 184 | toggleLED(); |
kaisen | 0:30431dd1f3c9 | 185 | break; |
kaisen | 0:30431dd1f3c9 | 186 | default: |
kaisen | 0:30431dd1f3c9 | 187 | break; |
kaisen | 0:30431dd1f3c9 | 188 | } |
kaisen | 0:30431dd1f3c9 | 189 | } |
kaisen | 0:30431dd1f3c9 | 190 | |
kaisen | 1:51508978bad6 | 191 | void writeStringToOLED(string str, int x, int y) |
kaisen | 1:51508978bad6 | 192 | { |
kaisen | 0:30431dd1f3c9 | 193 | spiOLED.setTextCursor(x, y); |
kaisen | 0:30431dd1f3c9 | 194 | spiOLED.fillRect(x, y, 128, 8, 0); |
kaisen | 0:30431dd1f3c9 | 195 | for(int i = 0; i < str.length(); i++) { |
kaisen | 0:30431dd1f3c9 | 196 | spiOLED.writeChar(str[i]); |
kaisen | 0:30431dd1f3c9 | 197 | } |
kaisen | 0:30431dd1f3c9 | 198 | spiOLED.display(); |
kaisen | 0:30431dd1f3c9 | 199 | } |
kaisen | 0:30431dd1f3c9 | 200 | |
kaisen | 0:30431dd1f3c9 | 201 | // Mostra todas as leituras atuais |
kaisen | 1:51508978bad6 | 202 | void showStatus() |
kaisen | 1:51508978bad6 | 203 | { |
kaisen | 0:30431dd1f3c9 | 204 | hc.printf("Presença: %d\nLDR: %.5f\nHigrometro Terra: %.5f\nHigrometro Agua: %.5f", |
kaisen | 1:51508978bad6 | 205 | pres.read(), |
kaisen | 1:51508978bad6 | 206 | ldr.read(), |
kaisen | 1:51508978bad6 | 207 | hygroEarth.read(), |
kaisen | 1:51508978bad6 | 208 | hygroWater.read()); |
kaisen | 0:30431dd1f3c9 | 209 | } |
kaisen | 0:30431dd1f3c9 | 210 | |
kaisen | 0:30431dd1f3c9 | 211 | // Rega a planta a força, desde que tenha água no reservatório |
kaisen | 1:51508978bad6 | 212 | void waterPlant() |
kaisen | 1:51508978bad6 | 213 | { |
kaisen | 0:30431dd1f3c9 | 214 | if(hygroWater.read() > waterLimit) waterCritical(); |
kaisen | 0:30431dd1f3c9 | 215 | pump.write(1); // ativa a 12V |
kaisen | 0:30431dd1f3c9 | 216 | wait(3); // regar por quanto tempo? |
kaisen | 0:30431dd1f3c9 | 217 | pump.write(0); |
kaisen | 0:30431dd1f3c9 | 218 | } |
kaisen | 0:30431dd1f3c9 | 219 | |
kaisen | 0:30431dd1f3c9 | 220 | // Interrompe o funcionamento do vaso até que seja alimentado com água |
kaisen | 1:51508978bad6 | 221 | void waterCritical() |
kaisen | 1:51508978bad6 | 222 | { |
kaisen | 0:30431dd1f3c9 | 223 | drawDead(); |
kaisen | 1:51508978bad6 | 224 | |
kaisen | 0:30431dd1f3c9 | 225 | while(hygroWater.read() > waterLimit) { |
kaisen | 0:30431dd1f3c9 | 226 | // whatever |
kaisen | 1:51508978bad6 | 227 | |
kaisen | 0:30431dd1f3c9 | 228 | wait(1); |
kaisen | 0:30431dd1f3c9 | 229 | } |
kaisen | 1:51508978bad6 | 230 | |
kaisen | 0:30431dd1f3c9 | 231 | drawIdle(); |
kaisen | 0:30431dd1f3c9 | 232 | } |
kaisen | 0:30431dd1f3c9 | 233 | |
kaisen | 0:30431dd1f3c9 | 234 | // Liga/desliga os LEDs |
kaisen | 1:51508978bad6 | 235 | void toggleLED() |
kaisen | 1:51508978bad6 | 236 | { |
kaisen | 0:30431dd1f3c9 | 237 | ledStatus = !ledStatus; |
kaisen | 0:30431dd1f3c9 | 238 | int toggle = ledStatus ? 1 : 0; |
kaisen | 0:30431dd1f3c9 | 239 | led.write(toggle); |
kaisen | 0:30431dd1f3c9 | 240 | } |
kaisen | 0:30431dd1f3c9 | 241 | |
kaisen | 0:30431dd1f3c9 | 242 | // Desenha uma carinha feliz ^u^ |
kaisen | 1:51508978bad6 | 243 | void drawSmile() |
kaisen | 1:51508978bad6 | 244 | { |
kaisen | 0:30431dd1f3c9 | 245 | spiOLED.drawCircle(12, 20, 9, 1); |
kaisen | 0:30431dd1f3c9 | 246 | spiOLED.fillRect(0, 5, 22, 15, 0); |
kaisen | 0:30431dd1f3c9 | 247 | spiOLED.fillTriangle(2, 15, 10, 15, 6, 7, 1); |
kaisen | 0:30431dd1f3c9 | 248 | spiOLED.fillTriangle(3, 15, 9, 15, 6, 8, 0); |
kaisen | 0:30431dd1f3c9 | 249 | spiOLED.fillTriangle(14, 15, 22, 15, 18, 7, 1); |
kaisen | 0:30431dd1f3c9 | 250 | spiOLED.fillTriangle(15, 15, 21, 15, 18, 8, 0); |
kaisen | 0:30431dd1f3c9 | 251 | spiOLED.setTextSize(2); |
kaisen | 0:30431dd1f3c9 | 252 | writeStringToOLED("Hello!", 30, 10); |
kaisen | 0:30431dd1f3c9 | 253 | } |
kaisen | 0:30431dd1f3c9 | 254 | |
kaisen | 1:51508978bad6 | 255 | void drawIdle() |
kaisen | 1:51508978bad6 | 256 | { |
kaisen | 0:30431dd1f3c9 | 257 | spiOLED.drawCircle(12, 20, 9, 1); |
kaisen | 0:30431dd1f3c9 | 258 | spiOLED.fillRect(0, 5, 22, 15, 0); |
kaisen | 0:30431dd1f3c9 | 259 | spiOLED.fillRect(7, 6, 2, 10, 1); |
kaisen | 0:30431dd1f3c9 | 260 | spiOLED.fillRect(16, 6, 2, 10, 1); |
kaisen | 0:30431dd1f3c9 | 261 | spiOLED.setTextSize(2); |
kaisen | 0:30431dd1f3c9 | 262 | writeStringToOLED("All ok!", 40, 10); |
kaisen | 0:30431dd1f3c9 | 263 | } |
kaisen | 0:30431dd1f3c9 | 264 | |
kaisen | 1:51508978bad6 | 265 | void drawSleep() |
kaisen | 1:51508978bad6 | 266 | { |
kaisen | 0:30431dd1f3c9 | 267 | int y = 1; |
kaisen | 0:30431dd1f3c9 | 268 | while(sleepCycle) { |
kaisen | 0:30431dd1f3c9 | 269 | spiOLED.clearDisplay(); |
kaisen | 0:30431dd1f3c9 | 270 | spiOLED.drawCircle(10, 23, 3, 1); |
kaisen | 0:30431dd1f3c9 | 271 | spiOLED.fillRect(2, 12, 8, 2, 1); |
kaisen | 0:30431dd1f3c9 | 272 | spiOLED.fillRect(15, 12, 8, 2, 1); |
kaisen | 0:30431dd1f3c9 | 273 | spiOLED.setTextSize(1); |
kaisen | 0:30431dd1f3c9 | 274 | writeStringToOLED("z", 35, 16 + y * 3); |
kaisen | 0:30431dd1f3c9 | 275 | spiOLED.setTextSize(2); |
kaisen | 0:30431dd1f3c9 | 276 | writeStringToOLED("z", 45, 11 - y * 3); |
kaisen | 0:30431dd1f3c9 | 277 | spiOLED.setTextSize(3); |
kaisen | 0:30431dd1f3c9 | 278 | writeStringToOLED("z", 65, 6 + y * 3); |
kaisen | 0:30431dd1f3c9 | 279 | spiOLED.setTextSize(4); |
kaisen | 0:30431dd1f3c9 | 280 | writeStringToOLED("z", 90, 1 - y * 3); |
kaisen | 0:30431dd1f3c9 | 281 | wait(1); |
kaisen | 0:30431dd1f3c9 | 282 | y = y * -1; |
kaisen | 1:51508978bad6 | 283 | |
kaisen | 0:30431dd1f3c9 | 284 | // ... |
kaisen | 0:30431dd1f3c9 | 285 | if (seconds > 86400) sleepCycle = false; |
kaisen | 0:30431dd1f3c9 | 286 | } |
kaisen | 0:30431dd1f3c9 | 287 | } |
kaisen | 0:30431dd1f3c9 | 288 | |
kaisen | 1:51508978bad6 | 289 | void drawDead() |
kaisen | 1:51508978bad6 | 290 | { |
kaisen | 0:30431dd1f3c9 | 291 | spiOLED.drawCircle(13, 27, 7, 1); |
kaisen | 0:30431dd1f3c9 | 292 | spiOLED.fillRect(0, 28, 22, 15, 0); |
kaisen | 0:30431dd1f3c9 | 293 | spiOLED.drawLine(2, 15, 10, 7, 1); |
kaisen | 0:30431dd1f3c9 | 294 | spiOLED.drawLine(2, 7, 10, 15, 1); |
kaisen | 0:30431dd1f3c9 | 295 | spiOLED.drawLine(16, 15, 24, 7, 1); |
kaisen | 0:30431dd1f3c9 | 296 | spiOLED.drawLine(16, 7, 24, 15, 1); |
kaisen | 0:30431dd1f3c9 | 297 | spiOLED.setTextSize(2); |
kaisen | 0:30431dd1f3c9 | 298 | writeStringToOLED("Help!", 50, 6); |
kaisen | 0:30431dd1f3c9 | 299 | spiOLED.setTextSize(1); |
kaisen | 0:30431dd1f3c9 | 300 | writeStringToOLED("Need water!!", 50, 22); |
kaisen | 0:30431dd1f3c9 | 301 | } |