// THC ARDUINO
// HEN MAX
// LCD 16X4
#include <LiquidCrystal.h>
//
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
#define SCALE (4.330*50/1023)
#define THRESH 5
#define MINSET 60
#define MAXSET 400
#define ADJUST A0
#define PLASMA A1
#define UP A2
#define DOWN A3
#define BUFSIZE 512
#define SAMP 16
#define DISP 1024
unsigned int shift = 0;
unsigned int values[BUFSIZE] = {0};
unsigned long total = 0;
unsigned long disp = 0;
unsigned long target = 0;
int diff = 0;
int mean = 0;
int mode = -1;
unsigned long tmp = 0;
float ftmp = 0;
float ftmp2 = 0;
int i = 0;
int j = 0;
char formattedValue[5];
int brightness = 255;
unsigned long timelimit = 0;
unsigned long ms = 0;
void setup() {
pinMode(ADJUST, INPUT);
pinMode(PLASMA, INPUT);
pinMode(UP, OUTPUT);
pinMode(DOWN, OUTPUT);
analogReference(EXTERNAL);
analogRead(PLASMA); analogRead(PLASMA); analogRead(PLASMA); analogRead(PLASMA); analogRead(PLASMA);
while((1 << shift) != SAMP)
shift++;
lcd.begin(20, 4);
i=0;
ms = millis();
timelimit = ms + 5000;
while (ms < timelimit) {
tmp = analogRead(ADJUST);
total = total + tmp - values[i];
values[i] = tmp;
target = total / 10;
ftmp2 = MINSET + ((MAXSET-MINSET) * (target/1023.0));
ftmp2 = ((int) (ftmp2*10))/10.0;
if (ftmp != ftmp2) {
ftmp = ftmp2;
timelimit = max(timelimit, ms + 2000);
lcd.setCursor(0, 0);
lcd.print ("set val");
lcd.setCursor(0, 1);
lcd.print (ftmp);
}
i = (i + 1) % 10;
ms = millis();
}
target = ftmp / SCALE;
for (i = 0; i < BUFSIZE; i++)
values[i] = 0;
total = 0;
i = 0;
j = 1;
}
void loop() {
tmp = analogRead(PLASMA);
disp += tmp;
total = total + tmp - values[i];
values[i] = tmp;
mean = total >> shift;
diff = mean - target;
if (!(mean>>4)) {
mode = 0;
digitalWrite(UP, 0);
digitalWrite(DOWN, 0);
}
else if (diff > THRESH) {
if (mode != 2) {
mode = 2;
digitalWrite(UP, 0);
digitalWrite(DOWN, 1);
}
}
else if (diff < -THRESH) {
if (mode != 1) {
mode = 1;
digitalWrite(DOWN, 0);
digitalWrite(UP, 1);
}
}
else {
mode = 0;
digitalWrite(UP, 0);
digitalWrite(DOWN, 0);
}
if (!j) {
lcd.setCursor(0, 0);
lcd.print ("val plasma");
lcd.setCursor(0, 1);
lcd.print ( (float) ((disp / DISP) * SCALE), 1 );
disp = 1;
}
i = (i + 1) & (SAMP - 1);
j = (j + 1) & (DISP - 1);
}Loading
esp-01
esp-01