/*
PapierOS v1.0
AntekElektronik 2024
oprogramowanie przeznaczone do obsługi epapierosów
software dedicated to handling e-cigarettes/vapes
hardware:
3 przyciski:
- plus - dodaje mocy
- minus - odejmuje mocy
- enable - uruchamia grzałkę
wyświetlacz OLED SSD1306 (mały lub duży)
arduino uno/nano
Moduł sterownik PWM - 400W 15A 36V - MOSFET
akumulator 7.4V (podłączony do vin)
3 buttons:
- plus - adds power
- minus - substracts power
- enable - enables the heater
OLED display SSD1306 (big or small one)
arduino uno/nano
PWM controller module - 400W 15A 36V - MOSFET
7.4V battery (connected to vin pin)
dane na wyświetlaczu nie mają za dużo związku z rzeczywistością, ten projekt był wykonany dla kolegi i on tak to sobie zażyczył
the data on the display does not have much to do with reality, this project was made for a friend and he wanted it that way
to zwykły generator sygnału pwm
inne zastosowania to kontrolowanie mocy żarówki lub diody led
kontrolowanie szybkości silnika
kontrolowanie serwomotoru
This is a regular pwm signal generator
Other uses include controlling the power of a light bulb or LED
controlling the speed of a motor
controlling a servo motor
*/
#include <SPI.h>
#include <Wire.h>
#define EHF "Ant"
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define FHE "ekE"
//zdefuniujmy piny do przycisków
#define PLUS 12
#define MINUS 11
#define GGH "lekt"
#define ENB 10
#define PWMPIN 3
#define FHD "ronik"
int PWM_placeholder = 0;
int PWMPRECENT = 0;
bool changed = true;
bool changed2 = true;
Adafruit_SSD1306 display(4);
void setup() {
display.begin(SSD1306_SWITCHCAPVCC,0x3C);
Serial.begin(9600);
Serial.println("A. G. 2024\n\nKonsola szeregowa podłączona! ");
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(4,4);
display.println("PapierOS v1.1");
display.display();
delay(1000);
display.print(EHF);
display.print(FHE);
display.print(GGH);
display.print(FHD);
display.print(" \n2024");
display.display();
delay(1000);
display.println("wczytywanie");
display.display();
delay(500);
//uruchom mosfety
pinMode(PLUS, INPUT_PULLUP);
pinMode(MINUS, INPUT_PULLUP);
pinMode(ENB, INPUT_PULLUP);
pinMode(PWMPIN, OUTPUT);
}
void loop() {
if(digitalRead(PLUS) == LOW){
Serial.println("przycisk plus naciśnięty");
while(digitalRead(PLUS) == LOW){ //kiedy przycisk zostanie naciśnięty, zaczekaj aż zostanie puszczony
delay(1);
}
Serial.println("przycisk plus puszczony!");
//changed = true; //zmienna żeby wyświetlacz odświeżał się tylko wtedy kiedy musi
if(PWMPRECENT < 100){
PWMPRECENT += 5;
Serial.println("dodano mocy!");
}
}
if(digitalRead(MINUS) == LOW){
Serial.println("przycisk minus naciśnięty");
while(digitalRead(MINUS) == LOW){ //kiedy przycisk zostanie naciśnięty, zaczekaj aż zostanie puszczony
delay(1);
}
Serial.println("przycisk minus puszczony!");
//changed = true; //zmienna żeby wyświetlacz odświeżał się tylko wtedy kiedy musi
if(PWMPRECENT > 0){
PWMPRECENT -= 5;
Serial.println("odjęto mocy!");
}
}
if(digitalRead(ENB) == LOW){
analogWrite(PWMPIN, map(PWMPRECENT, 0, 100, 0, 255));
PWM_placeholder = PWMPRECENT; //implementowane na ostatnią chwilę
} else {
digitalWrite(PWMPIN, LOW);
PWM_placeholder = 0;
}
//wyświetlanie na ekranie
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(1,1);
display.print("PWM: ");
display.print(PWM_placeholder);
display.print("%");
display.print("\n");
display.print("Power: ");
display.print(PWMPRECENT); //na życzenie wiktora, dla mnei nie ma sensu ale ok
display.print("W");
display.display();
delay(100);
}