/*
Wokwi | projects
automated clothes line
Rafael - IFRS November 25, 2025 9:55 AM
I wanna do an automated clothes line using Arduino.
I need to use a 7 segments display,
i tried a buzzer just to make a rain sensor.
But i don´t know how to finish this project...
https://wokwi.com/projects/448605589705351169
*/
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#include <Servo.h>
const int SENSOR_PIN = A0;
const int BUZZER_PIN = 2;
const int LED_PINS[] = {12, 11, 10, 9, 8, 7, 6, 5, 4, 3};
const int SERVO_PIN = 13;
// criar objetos
Adafruit_SSD1306 display(128, 64, &Wire, -1);
Servo servo;
void toca_buzzer() {
tone(BUZZER_PIN, 262, 250);
delay(250);
tone(BUZZER_PIN, 2093, 400);
delay(400);
}
void setup() {
// Gire o OLED 180 graus.
display.setRotation(2);
// inicialize o OLED no endereço 0x3C
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextSize(1);
// desenhe texto branco sobre fundo preto
display.setTextColor(SSD1306_WHITE, SSD1306_BLACK);
// definir modos de pino
for (int i = 0; i < 10; i++) {
pinMode(LED_PINS[i], OUTPUT);
}
pinMode(BUZZER_PIN, OUTPUT);
servo.attach(SERVO_PIN);
servo.write(0);
// tela OLED de formato
display.setCursor(18, 0);
display.print("SENSOR DE CHUVA");
/*
Desenha um retângulo sem preenchimento,
com origem na coordenada (0, 10), com
dimensões 128x47 pixels, raios dos cantos
arredondados 10 pixels na cor clara.
*/
display.drawRoundRect(0, 10, 128, 47, 10, WHITE);
display.setTextSize(2);
/*Posiciona o cursor na coordenada informada.*/
display.setCursor(18, 15);
/* Imprime a palavra SENHA */
display.print("Nivel de");
display.setCursor(18, 35);
display.print("Chuva:");
display.display();
}
void loop() {
// leia o sensor de chuva
int intensidade = map(analogRead(SENSOR_PIN), 0, 1023, 0, 9);
// exibir a intensidade
display.setCursor(100, 35);
display.print(intensidade);
/* Atualiza as informações no display. */
display.display();
// limpe todos os LEDs
for (int i = 0; i < 10; i++) {
digitalWrite(LED_PINS[i], LOW);
}
// LEDs de luz de acordo com a intensidade
for (int i = 0; i <= intensidade; i++) {
digitalWrite(LED_PINS[i], HIGH);
}
// Se estiver chovendo forte, acione o alarme e recolha as roupas.
if (intensidade >= 8) {
servo.write(180);
toca_buzzer();
} else {
servo.write(0);
}
}