Kod: Zaznacz cały
#include <Wire.h>
// Get the LCD I2C Library here:
// https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
#include <LiquidCrystal_I2C.h>
#include<EEPROM.h>
/*-----( Declare Constants )-----*/
/*-----( Declare objects )-----*/
// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol//////0x20
LiquidCrystal_I2C lcd(0x38, 4, 5, 6, 0, 1, 2, 3, 7, NEGATIVE); // Set the LCD I2C address
/*-----( Declare Variables )-----*/
// this constant won't change:
//const int zeroCrossPin = 2;
const int ledPin = 13; // the pin that t 3-he LED is attached to
const int zeroCrossPin = 2; // the pin that the pushbutton is attached to
// Variables will change:
int buttonPushCounter = 0; // counter for the number of button presses
int zeroCrossState = 0; // current state of the button
int lastZeroCrossState = 0; // previous state of the button
boolean startButtonState = 0;
boolean lastStartButtonState = 0;
int czasZgrzewaniaTriak = 4;
int czasZgrzewaniaTriak2 = 1;//wartość razy 10ms
//int mocTriak = 100; //moc w procentach
int mocAktualna = 50;
int timeMidWeld = 100;
int buttonValue1 = 0;
int buttonValue2 = 0;
int timeValue1 = 20;
int pozwoleniePracy = 0;
int pozwoleniePracy2 = 0;
int krokCyklu = 1;
int menu1 = 0;
int menu2 = 0;
int bufor1 = 0;
int bufor2 =0; //bool
int opoznienieZalaczenia = 0;
boolean podwojnyZgrzew = 0;
/*adresy zmiennych eeprom
0 - podwojny zgrzew
1 - czas 1 zg
2 - czas 2 zg
3 - czas przerwy
4- opoznienie zalaczenia
*/
void setup() /*----( SETUP: RUNS ONCE )----*/
{
//attachInterrupt(0, zero_crosss_int, RISING);
pinMode(3, OUTPUT);
pinMode(zeroCrossPin, INPUT);
digitalWrite(3, LOW);
pinMode(A7, INPUT_PULLUP);
pinMode(A6, INPUT_PULLUP);
lcd.begin(16, 2); // initialize the lcd for 16 chars 2 lines, turn on backlight
lcd.clear();
lcd.setCursor(0, 0); //Start at character 0 on line 0
lcd.print("EMSI-Tech v.0.82a");
lcd.setCursor(0, 1);
lcd.print("#KREATOR");
delay(2000);
lcd.clear();
podwojnyZgrzew = EEPROM.read(0);
if (podwojnyZgrzew >1){
EEPROM.write(0, 0);
podwojnyZgrzew = EEPROM.read(0);
}
czasZgrzewaniaTriak = EEPROM.read(1);
czasZgrzewaniaTriak2 = EEPROM.read(2);
}/*--(end setup )---*/
//977 - start
//977 - esc
//935 - lewy
//896 - gora
//860 - dol
//827 - prawo
//779- ok 797???
void loop()
{
buttonValue1 = analogRead(A6);
buttonValue2 = analogRead(A7);
//wyswietlanie menu
lcd.setCursor(0, 0);
lcd.print("Zgrzew1: ");
lcd.print((czasZgrzewaniaTriak));
lcd.print("ms");
lcd.setCursor(0, 1);
lcd.print("Zgrzew2: ");
if (podwojnyZgrzew == 1) {
//lcd.print("ON ");
lcd.print((czasZgrzewaniaTriak2));
lcd.print("ms");
}
else {
lcd.print("OFF ");
}
//menu jakies ustalające parametry
if (analogRead(A7) >= 780 && analogRead(A7) <= 810) {
lcd.clear();
//ustawienie czasu bo tak sobie wymyśliłem jedząc ciastko i kawe pijąc
menu1 = 1;
bufor1 = czasZgrzewaniaTriak;
while (menu1 == 1) {
lcd.setCursor(0, 0);
lcd.print("Zgrzew1: ");
lcd.print((bufor1));
lcd.print("ms");
lcd.setCursor(0, 1);
lcd.print("Ustawianie czasu");
//if (analogRead(A7) >= 890 && analogRead(A7) <= 910)
if (analogRead(A7) >= 850 && analogRead(A7) <= 870) {
bufor1++;
}
else if (analogRead(A7) >= 890 && analogRead(A7) <= 910) {
if (bufor1 > 1) {
bufor1--;
}
}
if (analogRead(A7) >= 820 && analogRead(A7) <= 840) {
bufor1 = bufor1 + 10;
}
else if (analogRead(A7) >= 920 && analogRead(A7) <= 950) {
if (bufor1 >= 11) {
bufor1 = bufor1 - 10;
}
else {
bufor1 = 1;
}
}
delay(150);
//wyjscie bez zapisu
if (analogRead(A7) >= 960) {
menu1 = 0;
}
else if (analogRead(A7) >= 780 && analogRead(A7) <= 810) {
czasZgrzewaniaTriak = bufor1;
menu1 = 0;
lcd.setCursor(0, 1);
lcd.print("Zapisuje");
EEPROM.write(1, czasZgrzewaniaTriak);
delay(100);
lcd.print(".");
delay(100);
lcd.print(".");
delay(100);
lcd.print(".");
delay(200);
}
lcd.clear();
}
//ustawienie podwojnego zgrzewu tralalalala
menu1 = 1;
bufor2 = podwojnyZgrzew;
while (menu1 == 1) {
lcd.setCursor(0, 0);
lcd.print("Zgrzew2:");
lcd.setCursor(0, 1);
if (bufor2 == true) {
lcd.print("ON");
}
else {
lcd.print("OFF");
}
if (analogRead(A7) >= 890 && analogRead(A7) <= 910) {
if (bufor2 == true) {
bufor2--;
}
}
else if (analogRead(A7) >= 850 && analogRead(A7) <= 870) {
if (bufor2 == false) {
bufor2++;
}
}
delay(150);
//wyjscie bez zapisu
if (analogRead(A7) >= 960) {
menu1 = 0;
}
else if (analogRead(A7) >= 780 && analogRead(A7) <= 810) {
podwojnyZgrzew = bufor2;
menu1 = 0;
lcd.setCursor(0, 1);
lcd.print("Zapisuje");
EEPROM.write(0, podwojnyZgrzew);
delay(50);
lcd.print(".");
delay(50);
lcd.print(".");
delay(50);
lcd.print(".");
delay(100);
}
lcd.clear();
}
//koniec ustawienia włączenia zgrzewu2
//ustawienie czesci zgrzewu zgrzewu albo coś jakoś czymś gdzieś po coś
//bredzisz...
if (podwojnyZgrzew == 1) {
menu1 = 1;
bufor1 = czasZgrzewaniaTriak2;
while (menu1 == 1) {
lcd.setCursor(0, 0);
lcd.print("Zgrzew2: ");
lcd.print((bufor1));
lcd.print("ms");
lcd.setCursor(0, 1);
lcd.print("Ustawianie czasu");
if (analogRead(A7) >= 850 && analogRead(A7) <= 870) {
bufor1++;
}
else if (analogRead(A7) >= 890 && analogRead(A7) <= 910) {
if (bufor1 > 1) {
bufor1--;
}
}
if (analogRead(A7) >= 820 && analogRead(A7) <= 840) {
bufor1 = bufor1 + 10;
}
else if (analogRead(A7) >= 920 && analogRead(A7) <= 950) {
if (bufor1 >= 11) {
bufor1 = bufor1 - 10;
}
else {
bufor1 = 1;
}
}
delay(150);
//wyjscie bez zapisu
if (analogRead(A7) >= 960) {
menu1 = 0;
}
else if (analogRead(A7) >= 780 && analogRead(A7) <= 810) {
czasZgrzewaniaTriak2 = bufor1;
menu1 = 0;
lcd.setCursor(0, 1);
lcd.print("Zapisuje");
EEPROM.write(2, czasZgrzewaniaTriak2);
delay(100);
lcd.print(".");
delay(100);
lcd.print(".");
delay(100);
lcd.print(".");
delay(200);
}
lcd.clear();
}
}//chyba koniec ifa
}
if (analogRead(A6) > 500) {
startButtonState = 1;}
else {
startButtonState = 0;
}
//startButtonState = digitalRead(3);
if (startButtonState != lastStartButtonState) {
if (startButtonState == HIGH) {
lcd.setCursor(0, 0);
lcd.print("----------------");
lcd.setCursor(0, 1);
lcd.print("--**--------**--");
pozwoleniePracy = 1;
if (podwojnyZgrzew == 1) {
pozwoleniePracy2 = 1;
}
}
}
lastStartButtonState = startButtonState;
krokCyklu = 1;
//zgrzew właściwy
while (pozwoleniePracy == 1) {
zeroCrossState = digitalRead(zeroCrossPin);
if (zeroCrossState != lastZeroCrossState) {
if (zeroCrossState == HIGH) {
delay(100);
digitalWrite(3, HIGH);
delay(czasZgrzewaniaTriak);
digitalWrite(3, LOW);
krokCyklu++;
lastZeroCrossState = zeroCrossState;
pozwoleniePracy = 0;
delay(timeMidWeld);
lcd.clear();
}
}
}
krokCyklu = 1;
//zgrzew2
while (pozwoleniePracy2 == 1) {
zeroCrossState = digitalRead(zeroCrossPin);
if (zeroCrossState != lastZeroCrossState) {
if (zeroCrossState == HIGH) {
delay(100);
digitalWrite(3, HIGH);
delay(czasZgrzewaniaTriak2);
digitalWrite(3, LOW);
krokCyklu++;
lastZeroCrossState = zeroCrossState;
pozwoleniePracy = 0;
delay(timeMidWeld);
lcd.clear();
}
}
}
}/* --(end main loop )-- */
/* ( THE END ) */
Zamiast czekać na całą pętlę, zrobiłem regulowane opóźnienie wyłączenie triaka, możesz teraz co 1ms ustawiać czas zgrzewu.
Nie wyrażam zgody na wykorzystywanie moich zdjęć w jakiejkolwiek formie bez mojej wiedzy, szczególnie nie życzę sobie czerpania za ich pomocą korzyści finansowych przez osoby trzecie.