Arnov Sharma
Published © MIT

Smart Flashlight with XIAO MCU

Made a smart Flashlight using XIAO Microcontroller paired with OLED Expansion Board.

BeginnerFull instructions provided1 hour626
Smart Flashlight with XIAO MCU

Things used in this project

Hardware components

Seeed Studio XIAO SAMD21 (Pre-Soldered) - Seeeduino XIAO
Seeed Studio XIAO SAMD21 (Pre-Soldered) - Seeeduino XIAO
×1

Software apps and online services

Arduino IDE
Arduino IDE
Fusion
Autodesk Fusion

Hand tools and fabrication machines

3D Printer (generic)
3D Printer (generic)

Story

Read more

Custom parts and enclosures

cad file

Schematics

SCH for Wiring

Code

code

C/C++
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>

#define OLED_WIDTH 128
#define OLED_HEIGHT 64

#define OLED_ADDR   0x3C

const int switchPin = 1; 
const int lightPin = 2;
int lightMode = 1; 

Adafruit_SSD1306 display(OLED_WIDTH, OLED_HEIGHT);


void setup() 
{
    pinMode(lightPin, OUTPUT);
    pinMode(switchPin, INPUT_PULLUP);
    digitalWrite(lightPin, LOW);

    display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
    display.clearDisplay();
      
}
void loop()
{ 
    if (digitalRead(switchPin) ==LOW) 
    { 
        lightMode = lightMode + 1;
        if (lightMode == 6)
        {
            lightMode = 1;
        }
    }
    if (lightMode == 1)
    {
        digitalWrite(lightPin, LOW);
        display.clearDisplay();
        display.setRotation(3);
        display.setTextSize(3);
        display.setTextColor(WHITE);
        display.setCursor(5, 55);
        display.println("OFF");
        display.display();
        delay(500);
    }
    else if (lightMode == 2)
    {
         analogWrite(lightPin, 50);
        display.clearDisplay();
        display.setRotation(3);
        display.setTextSize(3);
        display.setTextColor(WHITE);
        display.setCursor(5, 55);
        display.println("20%");
        display.display();
        delay(500);
    }
    else if (lightMode == 3)
    {
        analogWrite(lightPin, 100);
        display.clearDisplay();
        display.setRotation(3);
        display.setTextSize(3);
        display.setTextColor(WHITE);
        display.setCursor(5, 55);
        display.println("40%");
        display.display();        
        delay(500);        
    }
    else if (lightMode == 4)
    {
        analogWrite(lightPin, 255);
        display.clearDisplay();
        display.setRotation(3);
        display.setTextSize(2);
        display.setTextColor(WHITE);
        display.setCursor(5, 55);
        display.println("100%");
        display.display();         
        delay(500);        
    }
    else if (lightMode == 5)
    {
        analogWrite(lightPin, LOW);
        display.clearDisplay();
        display.setRotation(3);
        display.setTextSize(3);
        display.setTextColor(WHITE);
        display.setCursor(5, 55);
        display.println("OFF");
        display.display();        
        delay(500);        
    }
    //delay(200); // see text
}

Main CODE

C/C++
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_GFX.h>
#define OLED_WIDTH 128
#define OLED_HEIGHT 64
#define OLED_ADDR   0x3C
const int switchPin = 1;
const int lightPin = 2;
int lightMode = 1;
Adafruit_SSD1306 display(OLED_WIDTH, OLED_HEIGHT);
void setup()
{
pinMode(lightPin, OUTPUT);
pinMode(switchPin, INPUT_PULLUP);
digitalWrite(lightPin, LOW);
display.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR);
display.clearDisplay();
}
void loop()
{
if (digitalRead(switchPin) ==LOW)
{
lightMode = lightMode + 1;
if (lightMode == 6)
{
lightMode = 1;
}
}
if (lightMode == 1)
{
digitalWrite(lightPin, LOW);
display.clearDisplay();
display.setRotation(3);
display.setTextSize(3);
display.setTextColor(WHITE);
display.setCursor(5, 55);
display.println("OFF");
display.display();
delay(500);
}
else if (lightMode == 2)
{
analogWrite(lightPin, 50);
display.clearDisplay();
display.setRotation(3);
display.setTextSize(3);
display.setTextColor(WHITE);
display.setCursor(5, 55);
display.println("20%");
display.display();
delay(500);
}
else if (lightMode == 3)
{
analogWrite(lightPin, 100);
display.clearDisplay();
display.setRotation(3);
display.setTextSize(3);
display.setTextColor(WHITE);
display.setCursor(5, 55);
display.println("40%");
display.display();
delay(500);
}
else if (lightMode == 4)
{
analogWrite(lightPin, 255);
display.clearDisplay();
display.setRotation(3);
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(5, 55);
display.println("100%");
display.display();
delay(500);
}
else if (lightMode == 5)
{
analogWrite(lightPin, LOW);
display.clearDisplay();
display.setRotation(3);
display.setTextSize(3);
display.setTextColor(WHITE);
display.setCursor(5, 55);
display.println("OFF");
display.display();
delay(500);
}
//delay(200); // see text
}

Credits

Arnov Sharma
339 projects • 344 followers
Just your average MAKER
Contact

Comments

Please log in or sign up to comment.