Components and supplies
10 jumper wires 150mm male
Arduino Nano RP2040 Connect with headers
DHT 11 module
Waveshare 0.96 inch OLED Display
220 resistor
10kOhm potentiometer
Push Button
Apps and platforms
Arduino IDE 2.0 (beta)
Project description
Code
WeatherBot Code
cpp
The code is
1#include <SPI.h> 2#include <Adafruit_GFX.h> 3#include <Adafruit_SSD1306.h> 4#include <dht11.h> 5 6// OLED display width and height 7#define SCREEN_WIDTH 128 8#define SCREEN_HEIGHT 64 9 10// Define SPI pin connections 11#define OLED_CLK 13 // Clock 12#define OLED_MOSI 11 // Data input (DIN) 13#define OLED_CS 10 // Chip select 14#define OLED_DC 9 // Data/command 15#define OLED_RESET 8 // Reset 16 17#define DHT11PIN 4 18const int buttonPin = 2; 19int buttonState = 0; 20 21int potpin = 0; 22int val; 23 24 25// Create an SSD1306 SPI instance 26Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &SPI, OLED_DC, OLED_RESET, OLED_CS); 27 28dht11 DHT11; 29 30 31 32void setup() { 33 Serial.begin(9600); 34 35 pinMode(buttonPin, INPUT); 36 37 38 Serial.println("Initializing OLED..."); 39 40 // Initialize the display 41 if (!display.begin(SSD1306_SWITCHCAPVCC)) { 42 Serial.println(F("SSD1306 initialization failed!")); 43 for (;;); // Infinite loop on failure 44 } 45 46 Serial.println("OLED initialized successfully!"); 47 48 // Clear the display 49 display.clearDisplay(); 50} 51void loop(){ 52 int chk = DHT11.read(DHT11PIN); //Read the DHT 11 53 val = analogRead(potpin); 54 val = map(val, 0, 1032, 0, 100); 55 float tempC = DHT11.temperature; // Get the temperature in Celsius 56 buttonState = digitalRead(buttonPin); 57 58 if(buttonState == HIGH){ 59 alerts(); 60 }else if((val >= 0) && (val <= 30)){ 61 62 page1(); 63 }else if((val >= 31) && (val <= 60)){ 64 65 page2(); 66 }else if((val >= 61) && (val <= 100)){ 67 68 page3(); 69 } 70 71 delay(50); 72 73} 74 75void alerts(){ 76 float tempC = DHT11.temperature; // Get the temperature in Celsius 77 float hum = DHT11.humidity; 78 79 display.clearDisplay(); 80 display.setTextColor(SSD1306_WHITE); 81 display.setCursor(0, 0); 82 display.setTextSize(2); 83 display.print("Alerts"); 84 display.setCursor(0,40); 85 if((hum >= 75) && (tempC <= 2)){ 86 display.print("Possible Snow"); 87 }else if((hum >= 75) && (tempC >= 3) && (tempC <= 6)){ 88 display.print("Freezing Rain"); 89 }else if((hum >= 75) && (tempC >= 7)){ 90 display.print("Rain"); 91 }else{ 92 display.print("No Alerts"); 93 } 94 display.display(); 95 96} 97void page3(){ 98 animation2(); 99 100 101} 102void page3wear(){ 103 float tempC = DHT11.temperature; 104 float hum = DHT11.humidity; 105 106 display.setTextColor(SSD1306_WHITE); 107 display.setCursor(0, 0); 108 display.setTextSize(2); 109 display.print("WeatherBot"); 110 display.setCursor(0,20); 111 112 if(hum >= 80){ 113 display.setCursor(0,20); 114 display.print("Jacket"); 115 display.setCursor(0,40); 116 display.print("Rainpants"); 117 } else if((tempC >= 18) && (tempC <= 33)){ 118 display.setCursor(0,20); 119 display.print("T-Shirt"); 120 display.setCursor(0,40); 121 display.print("Shorts"); 122 } else if((tempC >= 8) && (tempC <= 17)){ 123 display.setCursor(0,20); 124 display.print("Hoodie"); 125 display.setCursor(0,40); 126 display.print("Pants"); 127 } else if((tempC >= 0) && (tempC <= 6)){ 128 display.setCursor(0,20); 129 display.print("Jacket"); 130 display.setCursor(0,40); 131 display.print("Pants"); 132 } 133} 134void animation2(){ 135 136 float tempC = DHT11.temperature; 137 float hum = DHT11.humidity; 138 139 140 141 142 if(hum >= 80){ 143 page3wear(); 144 display.display(); 145 delay(500); 146 display.clearDisplay(); 147 page3wear(); 148 display.display(); 149 delay(500); 150 display.clearDisplay(); 151 }else if(tempC >= 6){ 152 page3wear(); 153 bot3(); 154 display.display(); 155 delay(500); 156 display.clearDisplay(); 157 bot4(); 158 page3wear(); 159 display.display(); 160 delay(500); 161 display.clearDisplay(); 162 }else if(tempC <= 5){ 163 page3wear(); 164 botcold(); 165 display.display(); 166 delay(50); 167 display.clearDisplay(); 168 botcold1(); 169 page3wear(); 170 display.display(); 171 delay(50); 172 display.clearDisplay(); 173 } 174 175 176} 177void botcold(){ 178 display.setTextSize(2); 179 display.setCursor(98,20); 180 display.print("o"); 181 display.setCursor(80,35); 182 display.print("/||\\"); 183 display.setCursor(92, 50); 184 display.print("=="); 185} 186void botcold1(){ 187 display.setTextSize(2); 188 display.setCursor(97,20); 189 display.print("o"); 190 display.setCursor(79,35); 191 display.print("/||\\"); 192 display.setCursor(91, 50); 193 display.print("=="); 194} 195void bot3(){ 196 display.setTextSize(2); 197 display.setCursor(98,20); 198 display.print("o"); 199 display.setCursor(80,35); 200 display.print("/||\\"); 201 display.setCursor(92, 50); 202 display.print("=="); 203} 204void bot4(){ 205 display.setTextSize(2); 206 display.setCursor(98,18); 207 display.print("o"); 208 display.setCursor(80,33); 209 display.print("/||\\"); 210 display.setCursor(92, 48); 211 display.print("=="); 212} 213void page2(){ 214 215 display.setTextColor(SSD1306_WHITE); 216 display.clearDisplay(); 217 display.setCursor(0, 0); 218 display.setTextSize(2); 219 display.print("WeatherBot"); 220 display.setCursor(5,30); 221 display.setTextSize(3); 222 display.print((float)DHT11.humidity, 0); 223 display.print("%"); 224 display.setCursor(75, 30); 225 display.print((float)DHT11.temperature, 0); 226 display.setTextSize(2); 227 display.print("C"); 228 display.display(); 229 delay(400); 230 231} 232void page1(){ 233 234 animation(); 235 236 237 238 239 240} 241 242 243void animation() { 244 245 246 247 248 249 250 display.clearDisplay(); 251 bot(); 252 start(); 253 temp23(); 254 display.display(); 255 delay(500); 256 display.clearDisplay(); 257 bot1(); 258 start(); 259 temp23(); 260 display.display(); 261 delay(500); 262 263 264 265 266 267 268 269 270} 271 272void bot(){ 273 display.setTextSize(2); 274 display.setCursor(28,15); 275 display.print("o"); 276 display.setCursor(10,30); 277 display.print("/||\\"); 278 display.setCursor(22, 45); 279 display.print("=="); 280 281 282 283} 284void bot1(){ 285 286 display.setTextSize(2); 287 display.setCursor(28,13); 288 display.print("o"); 289 display.setCursor(10,28); 290 display.print("/||\\"); 291 display.setCursor(22, 43); 292 display.print("=="); 293 294 295} 296void start(){ 297 298 display.setTextSize(2); 299 display.setTextColor(SSD1306_WHITE); // Size 2 300 display.setCursor(0, 0); // Start at top-left corner 301 display.print("WeatherBot"); 302 303 304} 305void temp23(){ 306 307 308 display.setTextSize(3); 309 display.setCursor(70, 30); 310 display.print((float)DHT11.temperature, 0); 311 display.setTextSize(2); 312 display.print("C"); 313 314 315 316}
Comments
Only logged in users can leave comments
efatheone
2 Followers
•2 Projects
1
0