Ano,ale treba v programe tuto funkciu zapnut. Viac tu: https://www.arduino.cc/en/Reference/AnalogReference
Ak teraz zmerias napatie na pine aref,bude tam cca 5V.
12-kanalovy Data Logger
Moderátori: psichac, Moderátori
-
- Zaslúžilý člen
- Príspevky: 1375
- Dátum registrácie: 22 Jan 2012, 19:24
- Bydlisko: Nové Mesto nad Váhom
- Vek: 43
Re: 12-kanalovy Data Logger
OK,dik.
Niekedy tu referenciu vyskusam.
Prikladam cely kod:
a aj kompletnu schemu...
Niekedy tu referenciu vyskusam.
Prikladam cely kod:
Kód: Vybrať všetko
#include <SD.h>
#include <SPI.h>
#include <DS1307RTC.h>
#include <Time.h>
#include <Wire.h>
#include <LiquidCrystal.h>
#include <EEPROM.h>
int button1=49;
int button2=48;
int button3=51;
int button4=50;
int button5=22;
int flashled=52;
int logled=53;
int battery1=A0;
int battery2=A1;
int battery3=A2;
int battery4=A3;
int input1=A0;
int input2=A1;
int input3=A2;
int input4=A3;
int input5=A4;
int input6=A5;
int input7=A8;
int input8=A9;
int input9=A10;
int input10=A11;
int input11=A12;
int input12=A13;
LiquidCrystal lcd(14,15,16,17,18,19);
String data="";
File out;
tmElements_t tm;
unsigned long before=0;
boolean edge1=true;
boolean edge2=true;
boolean edge3=true;
boolean edge4=true;
boolean edge5=true;
boolean edge6=true;
boolean scredge=true;
boolean flash=false;
boolean head=true;
boolean startraise=true;
boolean stopraise=true;
boolean repeat=false;
int mode=0,pos=1,chedit=1;
int chcount=12;
int rtcset[6];
int timeset[6];
int timestart[5];
int timestop[5];
long numset[8];
long interval,before1,before2;
long minval[12],maxval[12];
int unit[12];
int startcon=1,stopcon=1,startch=1,stopch=1,startchval=0,stopchval=0;
unsigned long stopsamples=0,recorded=0;
int debug=1;
String filename;
byte g0[8] = {
B10101,
B10111,
B10111,
B10010,
B10001,
B10001,
B01110,
};
byte g1[8] = {
B00100,
B00100,
B01110,
B01110,
B11111,
B11111,
B00000,
};
byte g2[8] = {
B11111,
B11111,
B01110,
B01110,
B00100,
B00100,
B00000,
};
byte g3[8] = {
B00000,
B10000,
B11100,
B11111,
B11100,
B10000,
B00000,
};
byte g4[8] = {
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
};
byte g5[8] = {
B11111,
B00000,
B11111,
B00000,
B11111,
B00000,
B11111,
};
byte g6[8] = {
B01110,
B10001,
B10001,
B01110,
B00100,
B01110,
B01110,
};
byte g7[8] = {
B00100,
B01110,
B11111,
B01010,
B01010,
B01010,
B01111,
};
String screen[19] = {
" DATA LOGGER Start Setup",//0
" DATA LOGGER SD-Card Failure ",//1
" DATA LOGGER Logging... Stop",//2
" DATA LOGGER Wait... Stop",//3
"DATA LOGGER SettingsChannel Setup [ ]====================< + >",//4
"DATA LOGGER SettingsInterval . 00s====================< - + >",//5
"DATA LOGGER Settings Channels Enabled < Ch- Ch+ RTC",//6
"CHANNEL[ ] SettingsMin.value + ====================< - + >",//7
"CHANNEL[ ] SettingsMax.value + ====================< - + >",//8
"CHANNEL[ ] SettingsUnit ]====================< - + <##",//9
" RTC Settings Date . . Time : : < - + >",//10
"Channel Info [ ]Max: . Min: . ]< + ",//11
" DATA LOGGER RTC Failure ",//12
" DATA LOGGER SD Filename Exists ",//13
"DATA LOGGER SettingsStart: ====================< + >",//14
"DATA LOGGER SettingsStop: ====================< + >",//15
" [ ] ====================< - + >",//16
" SCHEDULED : . . ====================< - + >",//17
" STOP - SAMPLES Records: 00000000====================< - + >"};//18
String unitstr[50] = {
"V",
"A",
"mV",
"mA",
"mOhm",
"Ohm",
"kOhm",
"MOhm",
"uF",
"nF",
"pF",
"dgC",
"mg",
"g",
"dkg",
"kg",
"%",
"Lux",
"kPa",
"MPa",
"bar",
"psi",
"dB",
"dBm",
"mm",
"cm",
"m",
"km",
"m/s",
"km/h",
"rpm",
"N",
"daN",
"kN"};
void loadvariables()
{
interval =EEPROMreadlong(0);
chcount =EEPROMreadlong(1);
startcon =EEPROMreadlong(2);
stopcon =EEPROMreadlong(3);
startch =EEPROMreadlong(4);
stopch =EEPROMreadlong(5);
startchval =EEPROMreadlong(6);
stopchval =EEPROMreadlong(7);
stopsamples =EEPROMreadlong(8);
if(EEPROMreadlong(9) ==1) { startraise=true;} else { startraise=false;}
if(EEPROMreadlong(10)==1) { stopraise =true;} else { stopraise =false;}
if(EEPROMreadlong(11)==1) { repeat =true;} else { repeat =false;}
for(int i=0;i<12;i++) { minval[i]=EEPROMreadlong(3*i+12);maxval[i]=EEPROMreadlong(3*i+13);unit[i]=EEPROMreadlong(3*i+14);}
for(int i=0;i<5;i++) { timestart[i]=EEPROMreadlong(48+i);}
for(int i=0;i<5;i++) { timestop [i]=EEPROMreadlong(53+i);}
}
void savevariables()
{
EEPROMwritelong(0,interval);
EEPROMwritelong(1,chcount );
EEPROMwritelong(2,startcon);
EEPROMwritelong(3,stopcon);
EEPROMwritelong(4,startch);
EEPROMwritelong(5,stopch);
EEPROMwritelong(6,startchval);
EEPROMwritelong(7,stopchval);
EEPROMwritelong(8,stopsamples);
if(startraise==true) { EEPROMwritelong(9 ,1);} else { EEPROMwritelong(9 ,0);}
if(stopraise ==true) { EEPROMwritelong(10,1);} else { EEPROMwritelong(10,0);}
if(repeat ==true) { EEPROMwritelong(11,1);} else { EEPROMwritelong(11,0);}
for(int i=0;i<12;i++) { EEPROMwritelong(3*i+12,minval[i]);EEPROMwritelong(3*i+13,maxval[i]);EEPROMwritelong(3*i+14,unit[i]);}
for(int i=0;i<5;i++) { EEPROMwritelong(48+i,timestart[i]);}
for(int i=0;i<5;i++) { EEPROMwritelong(53+i,timestop [i]);}
}
void EEPROMwritelong(int address, long value)
{
byte four = (value & 0xFF);
byte three = ((value >> 8) & 0xFF);
byte two = ((value >> 16) & 0xFF);
byte one = ((value >> 24) & 0xFF);
EEPROM.write(4*address, four);
EEPROM.write(4*address + 1, three);
EEPROM.write(4*address + 2, two);
EEPROM.write(4*address + 3, one);
}
long EEPROMreadlong(long address)
{
long four = EEPROM.read(4*address);
long three = EEPROM.read(4*address + 1);
long two = EEPROM.read(4*address + 2);
long one = EEPROM.read(4*address + 3);
return ((four << 0) & 0xFF) + ((three << 8) & 0xFFFF) + ((two << 16) & 0xFFFFFF) + ((one << 24) & 0xFFFFFFFF);
}
void splitnumber2(int number)
{
String a;
if(number<100) { a=""+String(number);}
if(number<10) { a="0"+String(number);}
numset[0]=int(a[0])-48;
numset[1]=int(a[1])-48;
}
void splitnumber3(int number)
{
String a;
if(number<1000) { a=""+String(number);}
if(number<100) { a="0"+String(number);}
if(number<10) { a="00"+String(number);}
numset[0]=int(a[0])-48;
numset[1]=int(a[1])-48;
numset[2]=int(a[2])-48;
}
void splitnumber4(int number)
{
String a;
if(number<10000) { a=""+String(number);}
if(number<1000) { a="0"+String(number);}
if(number<100) { a="00"+String(number);}
if(number<10) { a="000"+String(number);}
numset[0]=int(a[0])-48;
numset[1]=int(a[1])-48;
numset[2]=int(a[2])-48;
numset[3]=int(a[3])-48;
}
void splitnumber6(long number)
{
String a;
number=abs(number);
if(number<1000000) { a=""+String(number);}
if(number<100000) { a="0"+String(number);}
if(number<10000) { a="00"+String(number);}
if(number<1000) { a="000"+String(number);}
if(number<100) { a="0000"+String(number);}
if(number<10) { a="00000"+String(number);}
numset[0]=int(a[0])-48;
numset[1]=int(a[1])-48;
numset[2]=int(a[2])-48;
numset[3]=int(a[3])-48;
numset[4]=int(a[4])-48;
numset[5]=int(a[5])-48;
}
void splitnumber8(unsigned long number)
{
String a;
if(number<100000000) { a=""+String(number);}
if(number<10000000) { a="0"+String(number);}
if(number<1000000) { a="00"+String(number);}
if(number<100000) { a="000"+String(number);}
if(number<10000) { a="0000"+String(number);}
if(number<1000) { a="00000"+String(number);}
if(number<100) { a="000000"+String(number);}
if(number<10) { a="0000000"+String(number);}
numset[0]=int(a[0])-48;
numset[1]=int(a[1])-48;
numset[2]=int(a[2])-48;
numset[3]=int(a[3])-48;
numset[4]=int(a[4])-48;
numset[5]=int(a[5])-48;
numset[6]=int(a[6])-48;
numset[7]=int(a[7])-48;
}
void drawframe(int number)
{
if(number==0) {
lcd.setCursor(0,0);for(int i=0;i<41;i++) { lcd.write(5);}
lcd.setCursor(19,1);lcd.write(5);
}
if(number==1) { lcd.setCursor(0,1);
// for(int i=0;i<20;i++) { lcd.write(5);}
}
}
String inttostr2(int number)
{
String a;
if (number < 10) { a="0";}
a=a+String(number);
return a;
}
String inttostr3(int number)
{
String a;
if (number < 100) { a="0";}
if (number < 10) { a="00";}
a=a+String(number);
return a;
}
String inttostr4(int number)
{
number=abs(number);
String a;
if (number < 1000) { a="0";}
if (number < 100) { a="00";}
if (number < 10) { a="000";}
a=a+String(number);
return a;
}
String longtostr8(unsigned long number)
{
String a;
if (number < 10000000) { a="0";}
if (number < 1000000) { a="00";}
if (number < 100000) { a="000";}
if (number < 10000) { a="0000";}
if (number < 1000) { a="00000";}
if (number < 100) { a="000000";}
if (number < 10) { a="0000000";}
a=a+String(number);
return a;
}
String longtostrm6(long number) //0000.00 min-max
{
number=abs(number);
String b;
int a[6];
if(number<1000000) { b=""+String(number);}
if(number<100000) { b="0"+String(number);}
if(number<10000) { b="00"+String(number);}
if(number<1000) { b="000"+String(number);}
if(number<100) { b="0000"+String(number);}
if(number<10) { b="00000"+String(number);}
a[0]=int(b[0])-48;
a[1]=int(b[1])-48;
a[2]=int(b[2])-48;
a[3]=int(b[3])-48;
a[4]=int(b[4])-48;
a[5]=int(b[5])-48;
b=b.substring(0,4)+"."+b.substring(4,6);
return b;
}
String longtostri6(long number) //000.000 interval
{
number=abs(number);
String b;
int a[6];
if(number<1000000) { b=""+String(number);}
if(number<100000) { b="0"+String(number);}
if(number<10000) { b="00"+String(number);}
if(number<1000) { b="000"+String(number);}
if(number<100) { b="0000"+String(number);}
if(number<10) { b="00000"+String(number);}
a[0]=int(b[0])-48;
a[1]=int(b[1])-48;
a[2]=int(b[2])-48;
a[3]=int(b[3])-48;
a[4]=int(b[4])-48;
a[5]=int(b[5])-48;
b=b.substring(0,3)+"."+b.substring(3,6);
return b;
}
String str2(String a)
{
int ln=a.length();
String b;
if(ln<=2) { b=""+a;}
if(ln<=1) { b=" "+a;}
return b;
}
String str3(String a)
{
int ln=a.length();
String b;
if(ln<=3) { b=""+a;}
if(ln<=2) { b=" "+a;}
if(ln<=1) { b=" "+a;}
return b;
}
String str4(String a)
{
int ln=a.length();
String b;
if(ln<=4) { b=""+a;}
if(ln<=3) { b=" "+a;}
if(ln<=2) { b=" "+a;}
if(ln<=1) { b=" "+a;}
return b;
}
String str5(String a)
{
int ln=a.length();
String b;
if(ln<=5) { b=""+a;}
if(ln<=4) { b=" "+a;}
if(ln<=3) { b=" "+a;}
if(ln<=2) { b=" "+a;}
if(ln<=1) { b=" "+a;}
return b;
}
void writeevent()
{
String log;
boolean rtcerror=false;
if(head==true)
{
recorded=0;
if (RTC.read(tm)) {
filename=inttostr2(tm.Day)+inttostr2(tm.Hour)+inttostr2(tm.Minute)+inttostr2(tm.Second)+".dtl";
char charFileName[12] = {0};
filename.toCharArray(charFileName,13);//why 13,not 12???
if(SD.exists(charFileName)) { mode=15;scredge=true;return;}
filewrite("---------------------------------------------------------");
log="DATA LOGGER Record started => "+inttostr2(tm.Day)+"."+inttostr2(tm.Month)+"."+tmYearToCalendar(tm.Year)+" / "+inttostr2(tm.Hour)+":"+inttostr2(tm.Minute)+":"+inttostr2(tm.Second);
filewrite(log);
} else {
if (RTC.chipPresent()) {
Serial.println(" RTC Failed / Chip present - DataLogger stopped");
} else {
Serial.println(" RTC Failed / RTC disconnected - DataLogger stopped");
Serial.println("--------------------------------------------------------");
}
mode=14;scredge=true;return;
}
filewrite("---------------------------------------------------------");
log="Sampling interval: "+longtostri6(interval)+"s Channels Enabled: "+str2(String(chcount));
filewrite(log);
//Serial.println(log);
for(int i=0;i<chcount;i++) {
log="Channel "+str2(String(i+1))+" => Min:";
if(minval[i]<0) { log=log+"-";} else { log=log+" ";}
log=log+longtostrm6(minval[i])+" Max:";
if(maxval[i]<0) { log=log+"-";} else { log=log+" ";}
log=log+longtostrm6(maxval[i])+" Unit: "+str5(unitstr[unit[i]]);
filewrite(log);}//Serial.println(log);
filewrite("---------------------------------------------------------");
filewrite("");
head=false;
} else {
long var[12];
int varb[12];
for(int i=0;i<chcount;i++) {
if(i==0) { varb[i]=analogRead(input1);}
if(i==1) { varb[i]=analogRead(input2);}
if(i==2) { varb[i]=analogRead(input3);}
if(i==3) { varb[i]=analogRead(input4);}
if(i==4) { varb[i]=analogRead(input5);}
if(i==5) { varb[i]=analogRead(input6);}
if(i==6) { varb[i]=analogRead(input7);}
if(i==7) { varb[i]=analogRead(input8);}
if(i==8) { varb[i]=analogRead(input9);}
if(i==9) { varb[i]=analogRead(input10);}
if(i==10){ varb[i]=analogRead(input11);}
if(i==11){ varb[i]=analogRead(input12);}
var[i]=map(varb[i], 0, 1023, minval[i], maxval[i]);}
log="";
if (RTC.read(tm)) {
log=inttostr2(tm.Day)+"."+inttostr2(tm.Month)+"."+tmYearToCalendar(tm.Year)+" / "+inttostr2(tm.Hour)+":"+inttostr2(tm.Minute)+":"+inttostr2(tm.Second)+" => ";
} else {
if (RTC.chipPresent()) {
Serial.println("The DS1307 is stopped. Please run the SetTime");
Serial.println("example to initialize the time and begin running.");
Serial.println();
} else {
Serial.println("DS1307 read error! Please check the circuitry.");
Serial.println();
rtcerror=true;
}
mode=14;scredge=true;return;
}
for(int i=0;i<chcount;i++) {
if(var[i]<0) { log=log+"-";} else { log=log+" ";}
log=log+longtostrm6(var[i])+" "+inttostr4(varb[i]);
if(i<chcount-1) { log=log+" ; ";}
}
filewrite(log);recorded++;
//Serial.println(log);
}
}
void filewrite(String data)
{
char charFileName[12] = {0};
filename.toCharArray(charFileName,13);//why 13,not 12???
out=SD.open(charFileName, FILE_WRITE);
if(out.println(data)==0) { if(mode!=14) { mode=2;scredge=true;}}
out.close();
}
void setup() {
Serial.begin(115200);
while (!Serial) ; // wait for serial
delay(200);
// Serial.println("DS1307RTC Read Test");
// Serial.println("-------------------");
pinMode(10,OUTPUT);
pinMode(8,OUTPUT);
pinMode(button1,INPUT_PULLUP);
pinMode(button2,INPUT_PULLUP);
pinMode(button3,INPUT_PULLUP);
pinMode(button4,INPUT_PULLUP);
pinMode(button5,INPUT_PULLUP);
pinMode(flashled,OUTPUT);
pinMode(logled,OUTPUT);
digitalWrite(8,HIGH);
if (RTC.read(tm)) { } else { if (RTC.chipPresent()) {
Serial.println("The DS1307 is stopped. Please run the SetTime");
Serial.println("example to initialize the time and begin running.");
Serial.println();
} else {
Serial.println("DS1307 read error! Please check the circuitry.");
Serial.println();
}
mode=14;scredge=true;}
lcd.begin(20, 4);
lcd.setCursor(0,0);
lcd.createChar(1,g0);
lcd.createChar(2,g1);
lcd.createChar(3,g2);
lcd.createChar(4,g3);
lcd.createChar(5,g4);
lcd.createChar(6,g5);
lcd.createChar(7,g6);
lcd.createChar(8,g7);
loadvariables();
SD.begin(10,11,12,13);
}
void loop() {
if(digitalRead(button1)==true) { edge1=true;}
if(digitalRead(button2)==true) { edge2=true;}
if(digitalRead(button3)==true) { edge3=true;}
if(digitalRead(button4)==true) { edge4=true;}
if(digitalRead(button5)==true) { edge5=true;}
if(mode==0)
{
//blank
lcd.setCursor(0,0);lcd.print(screen[0]);
lcd.setCursor(0,3);lcd.print(" ");
drawframe(0);
delay(1000);mode=1;
digitalWrite(logled,LOW);digitalWrite(flashled,LOW);
}
if(mode==1)
{
//start
if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[0]);lcd.setCursor(12,3);lcd.write(7);drawframe(0);scredge=false;}
if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;if(startcon==1) { head=true;mode=3;} else { mode=4;}}
if(digitalRead(button3)==false && edge3==true) { edge3=false;scredge=true;mode=13;}
if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;mode=5;}
if(digitalRead(button5)==false && edge5==true) { edge5=false;scredge=true;mode=100;}
}
if(mode==4)
{
//wait for trigger
if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[3]);drawframe(0);lcd.setCursor(12,3);lcd.write(4);lcd.write(4);scredge=false;digitalWrite(flashled,HIGH);}
if(digitalRead(button3)==false && edge3==true) { edge3=false;scredge=true;head=true;mode=3;digitalWrite(flashled,LOW);}
if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;head=true;mode=0;digitalWrite(flashled,LOW);}
if(startcon==2) {
int var;
if(startch==0) { var=analogRead(input1);}
if(startch==1) { var=analogRead(input2);}
if(startch==2) { var=analogRead(input3);}
if(startch==3) { var=analogRead(input4);}
if(startch==4) { var=analogRead(input5);}
if(startch==5) { var=analogRead(input6);}
if(startch==6) { var=analogRead(input7);}
if(startch==7) { var=analogRead(input8);}
if(startch==8) { var=analogRead(input9);}
if(startch==9) { var=analogRead(input10);}
if(startch==10){ var=analogRead(input11);}
if(startch==11){ var=analogRead(input12);}
if((var>=startchval && startraise==true)||(var<=startchval && startraise==false)) { scredge=true;head=true;mode=3;digitalWrite(flashled,LOW);}
}
if(startcon==3) {
if (RTC.read(tm)) {
tmElements_t testtm;
testtm.Hour=timestart[0];testtm.Minute=timestart[1];testtm.Second=0;testtm.Day=timestart[2];testtm.Month=timestart[3];testtm.Year=CalendarYrToTm(timestart[4]);
time_t time1=makeTime(tm);
time_t time2=makeTime(testtm);
if(time1>=time2) { scredge=true;mode=3;head=true;digitalWrite(flashled,LOW);}
} else {
if (RTC.chipPresent()) {
Serial.println("The DS1307 is stopped. Please run the SetTime");
Serial.println("example to initialize the time and begin running.");
Serial.println();
} else {
Serial.println("DS1307 read error! Please check the circuitry.");
Serial.println();
}
mode=14;scredge=true;
}
}
}
if(mode==3)
{
//logging
if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[2]);drawframe(0);scredge=false;}
if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;mode=0;}
//logging active - write
if(millis()-before1>=interval) { before1=millis();digitalWrite(logled,HIGH);writeevent();digitalWrite(logled,LOW);} //log
if(millis()-before2>=450 && flash==false) { flash=true ;before2=millis();digitalWrite(flashled,HIGH);}
if(millis()-before2>=50 && flash==true ) { flash=false;before2=millis();digitalWrite(flashled,LOW );}
if(stopcon==2) {
int var;
if(startch==0) { var=analogRead(input1);}
if(startch==1) { var=analogRead(input2);}
if(startch==2) { var=analogRead(input3);}
if(startch==3) { var=analogRead(input4);}
if(startch==4) { var=analogRead(input5);}
if(startch==5) { var=analogRead(input6);}
if(startch==6) { var=analogRead(input7);}
if(startch==7) { var=analogRead(input8);}
if(startch==8) { var=analogRead(input9);}
if(startch==9) { var=analogRead(input10);}
if(startch==10){ var=analogRead(input11);}
if(startch==11){ var=analogRead(input12);}
if((var>=stopchval && stopraise==true)||(var<=stopchval && stopraise==false)) { scredge=true;head=true;
if(startcon==2 && repeat==true) { mode=4;} else { mode=0;}digitalWrite(flashled,LOW);}
}
if(stopcon==3) {
if (RTC.read(tm)) {
tmElements_t testtm;
testtm.Hour=timestop[0];testtm.Minute=timestop[1];testtm.Second=0;testtm.Day=timestop[2];testtm.Month=timestop[3];testtm.Year=CalendarYrToTm(timestop[4]);
time_t time1=makeTime(tm);
time_t time2=makeTime(testtm);
if(time1>time2) { scredge=true;head=true;if(startcon==2 && repeat==true) { mode=4;} else { mode=0;}digitalWrite(flashled,LOW);}
} else {
if (RTC.chipPresent()) {
Serial.println("The DS1307 is stopped. Please run the SetTime");
Serial.println("example to initialize the time and begin running.");
Serial.println();
} else {
Serial.println("DS1307 read error! Please check the circuitry.");
Serial.println();
}
mode=14;scredge=true;
}
}
if(stopcon==4 && recorded>=stopsamples) { scredge=true;head=true;if(startcon==2 && repeat==true) { mode=4;} else { mode=0;}digitalWrite(flashled,LOW);}
}
if(mode==2)
{
//SD failure
digitalWrite(logled,LOW);digitalWrite(flashled,LOW);
if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[1]);drawframe(0);lcd.setCursor(19,3);lcd.write(1);scredge=false;}
if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;mode=0;SD.begin(10,11,12,13);setup();}
}
if(mode==14)
{
//RTC failure
digitalWrite(logled,LOW);digitalWrite(flashled,LOW);
if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[12]);drawframe(0);lcd.setCursor(19,3);lcd.write(1);scredge=false;}
if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;mode=0;setup();}
}
if(mode==15)
{
//file exists
digitalWrite(logled,LOW);digitalWrite(flashled,LOW);
if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[13]);drawframe(0);lcd.setCursor(19,3);lcd.write(1);scredge=false;}
if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;mode=0;setup();}
}
if(mode==5)
{
//channel choose
if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[4]);lcd.setCursor(17,2);lcd.print(inttostr2(chedit));lcd.setCursor(1,3);lcd.write(8);lcd.setCursor(13,3);lcd.write(6);drawframe(1);scredge=false;}
if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;mode=0;savevariables();}
if(digitalRead(button2)==false && edge2==true) { edge2=false;scredge=true;chedit++;if(chedit>chcount)chedit=1;}
if(digitalRead(button3)==false && edge3==true) { edge3=false;scredge=true;mode=8;pos=1;}
if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;mode=6;pos=1;}
}
if(mode==51)
{
//start condition
if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[14]);
if(startcon!=1) { lcd.setCursor(13,3);lcd.write(6);}
if(startcon==1) { lcd.setCursor(14,2);lcd.print("MANUAL");}
if(startcon==2) { lcd.setCursor(7 ,2);lcd.print("CHANNEL VALUE");}
if(startcon==3) { lcd.setCursor(11,2);lcd.print("SCHEDULED");}
drawframe(1);scredge=false;
}
if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;mode=6;pos=4;}
if(digitalRead(button2)==false && edge2==true) { edge2=false;scredge=true;startcon++;if(startcon>3)startcon=1;}
if(digitalRead(button3)==false && edge3==true && startcon!=1) { edge3=false;scredge=true;pos=1;mode=51+startcon;}//53 ch,54 sch
if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;mode=52;pos=1;}
}
if(mode==52)
{
//stop condition
if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[15]);
if(stopcon!=1) { lcd.setCursor(13,3);lcd.write(6);}
if(stopcon==1) { lcd.setCursor(14,2);lcd.print("MANUAL");}
if(stopcon==2) { lcd.setCursor(7 ,2);lcd.print("CHANNEL VALUE");}
if(stopcon==3) { lcd.setCursor(11,2);lcd.print("SCHEDULED");}
if(stopcon==4) { lcd.setCursor(13,2);lcd.print("SAMPLES");}
drawframe(1);scredge=false;
}
if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;mode=51;}
if(digitalRead(button2)==false && edge2==true) { edge2=false;scredge=true;stopcon++;if(stopcon>4)stopcon=1;}
if(digitalRead(button3)==false && edge3==true && stopcon!=1) { edge3=false;scredge=true;pos=1;mode=53+stopcon;}//53 ch,54 sch,55 samples
if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;mode=7;pos=1;}
}
if(mode==53)
{
//start by channel
int ch=startch-1;
if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[16]);lcd.setCursor(0,0);lcd.print("START-CHANNEL");scredge=false;
lcd.setCursor(20-unitstr[unit[ch]].length(),0);lcd.print(unitstr[unit[ch]]);
lcd.setCursor(1,2);lcd.print(inttostr2(startch));
lcd.setCursor(5,2);lcd.print(inttostr4(startchval));
boolean neg=false;long var=map(startchval, 0, 1023, minval[ch], maxval[ch]);
if(var<0) { neg=true;} lcd.setCursor(12,2);if(neg) { lcd.print("-");} else { lcd.print(" ");} lcd.print(longtostrm6(var));
lcd.setCursor(4 ,2);if(startraise==true) { lcd.write(2);} else { lcd.write(3);}
lcd.setCursor(10,2);if(repeat==true) { lcd.print("X");} else { lcd.print("1");}
if(pos==1) { lcd.setCursor(1,3);lcd.print("##");lcd.setCursor(1,2);lcd.cursor();}
if(pos==2) { lcd.setCursor(4,2);lcd.cursor();}
if(pos==3) { lcd.setCursor(5,2);lcd.cursor();}
if(pos==4) { lcd.setCursor(6,2);lcd.cursor();}
if(pos==5) { lcd.setCursor(7,2);lcd.cursor();}
if(pos==6) { lcd.setCursor(8,2);lcd.cursor();}
if(pos==7) { lcd.setCursor(17,3);lcd.print("<##");lcd.setCursor(10,2);lcd.cursor();}
}
if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;if(pos>1) {pos--;} else { lcd.noCursor();mode=51;}}
if(digitalRead(button2)==false && edge2==true) {
if(pos==1) { startch--;if(startch==0) {startch=12;}}
if(pos==2) { startraise= !startraise;}
if(pos==3) { splitnumber4(startchval);numset[0]--;if(numset[0]<0) { numset[0]=9;} startchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
if(pos==4) { splitnumber4(startchval);numset[1]--;if(numset[1]<0) { numset[1]=9;} startchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
if(pos==5) { splitnumber4(startchval);numset[2]--;if(numset[2]<0) { numset[2]=9;} startchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
if(pos==6) { splitnumber4(startchval);numset[3]--;if(numset[3]<0) { numset[3]=9;} startchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
if(pos==7) { repeat= !repeat;}
if(startchval>1023) { startchval=1023;}
edge2=false;scredge=true;}
if(digitalRead(button3)==false && edge3==true) {
if(pos==1) { startch++;if(startch>12) {startch=1;}}
if(pos==2) { startraise= !startraise;}
if(pos==3) { splitnumber4(startchval);numset[0]++;if(numset[0]>9) { numset[0]=0;} startchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
if(pos==4) { splitnumber4(startchval);numset[1]++;if(numset[1]>9) { numset[1]=0;} startchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
if(pos==5) { splitnumber4(startchval);numset[2]++;if(numset[2]>9) { numset[2]=0;} startchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
if(pos==6) { splitnumber4(startchval);numset[3]++;if(numset[3]>9) { numset[3]=0;} startchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
if(pos==7) { repeat= !repeat;}
if(startchval>1023) { startchval=1023;}
edge3=false;scredge=true;}
if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;if(pos<7) {pos++;} else { lcd.noCursor();mode=51;}}
}
if(mode==54)
{
//scheduled start
if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[17]);scredge=false;lcd.setCursor(13,0);lcd.print("START");
lcd.setCursor(0,2);lcd.print(inttostr2(timestart[0]));
lcd.setCursor(3,2);lcd.print(inttostr2(timestart[1]));
lcd.setCursor(10,2);lcd.print(inttostr2(timestart[2]));
lcd.setCursor(13,2);lcd.print(inttostr2(timestart[3]));
lcd.setCursor(16,2);lcd.print(timestart[4]);
if(pos==1) { lcd.setCursor(1,3);lcd.print("##");lcd.setCursor(0,2);lcd.cursor();}
if(pos==2) { lcd.setCursor(3,2);lcd.cursor();}
if(pos==3) { lcd.setCursor(10,2);lcd.cursor();}
if(pos==4) { lcd.setCursor(13,2);lcd.cursor();}
if(pos==5) { lcd.setCursor(17,3);lcd.print("<##");lcd.setCursor(16,2);lcd.cursor();}
}
if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;if(pos>1) {pos--;} else { lcd.noCursor();mode=51;}}
if(digitalRead(button2)==false && edge2==true) { edge2=false;scredge=true;
if(pos==1) { timestart[0]--;if(timestart[0]<0) {timestart[0]=23;}}
if(pos==2) { timestart[1]--;if(timestart[1]<0) {timestart[1]=59;}}
if(pos==3) { timestart[2]--;if(timestart[2]<1) {timestart[2]=31;}}
if(pos==4) { timestart[3]--;if(timestart[3]<1) {timestart[3]=12;}}
if(pos==5) { timestart[4]--;if(timestart[4]<2000) {timestart[4]=2037;}}
}
if(digitalRead(button3)==false && edge3==true) { edge3=false;scredge=true;
if(pos==1) { timestart[0]++;if(timestart[0]>23) {timestart[0]=0;}}
if(pos==2) { timestart[1]++;if(timestart[1]>59) {timestart[1]=0;}}
if(pos==3) { timestart[2]++;if(timestart[2]>31) {timestart[2]=1;}}
if(pos==4) { timestart[3]++;if(timestart[3]>12) {timestart[3]=1;}}
if(pos==5) { timestart[4]++;if(timestart[4]>2037) {timestart[4]=2000;}}
}
if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;if(pos<5) {pos++;} else { lcd.noCursor();mode=51;}}
}
if(mode==55)
{
//stop by channel
int ch=stopch-1;
if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[16]);lcd.setCursor(0,0);lcd.print("STOP-CHANNEL");scredge=false;
lcd.setCursor(20-unitstr[unit[ch]].length(),0);lcd.print(unitstr[unit[ch]]);
lcd.setCursor(1,2);lcd.print(inttostr2(stopch));
lcd.setCursor(5,2);lcd.print(inttostr4(stopchval));
boolean neg=false;long var=map(stopchval, 0, 1023, minval[ch], maxval[ch]);
if(var<0) { neg=true;} lcd.setCursor(12,2);if(neg) { lcd.print("-");} else { lcd.print(" ");} lcd.print(longtostrm6(var));
lcd.setCursor(4,2);if(stopraise==true) { lcd.write(2);} else { lcd.write(3);}
if(pos==1) { lcd.setCursor(1,3);lcd.print("##");lcd.setCursor(1,2);lcd.cursor();}
if(pos==2) { lcd.setCursor(4,2);lcd.cursor();}
if(pos==3) { lcd.setCursor(5,2);lcd.cursor();}
if(pos==4) { lcd.setCursor(6,2);lcd.cursor();}
if(pos==5) { lcd.setCursor(7,2);lcd.cursor();}
if(pos==6) { lcd.setCursor(17,3);lcd.print("<##");lcd.setCursor(8,2);lcd.cursor();}
}
if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;if(pos>1) {pos--;} else {lcd.noCursor();mode=52;}}
if(digitalRead(button2)==false && edge2==true) {
if(pos==1) { stopch--;if(stopch==0) {stopch=12;}}
if(pos==2) { stopraise= !stopraise;}
if(pos==3) { splitnumber4(stopchval);numset[0]--;if(numset[0]<0) { numset[0]=9;} stopchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
if(pos==4) { splitnumber4(stopchval);numset[1]--;if(numset[1]<0) { numset[1]=9;} stopchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
if(pos==5) { splitnumber4(stopchval);numset[2]--;if(numset[2]<0) { numset[2]=9;} stopchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
if(pos==6) { splitnumber4(stopchval);numset[3]--;if(numset[3]<0) { numset[3]=9;} stopchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
if(stopchval>1023) { stopchval=1023;}
edge2=false;scredge=true;}
if(digitalRead(button3)==false && edge3==true) {
if(pos==1) { stopch++;if(stopch>12) {stopch=1;}}
if(pos==2) { stopraise= !stopraise;}
if(pos==3) { splitnumber4(stopchval);numset[0]++;if(numset[0]>9) { numset[0]=0;} stopchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
if(pos==4) { splitnumber4(stopchval);numset[1]++;if(numset[1]>9) { numset[1]=0;} stopchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
if(pos==5) { splitnumber4(stopchval);numset[2]++;if(numset[2]>9) { numset[2]=0;} stopchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
if(pos==6) { splitnumber4(stopchval);numset[3]++;if(numset[3]>9) { numset[3]=0;} stopchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
if(stopchval>1023) { stopchval=1023;}
edge3=false;scredge=true;}
if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;if(pos<6) {pos++;} else { lcd.noCursor();mode=52;}}
}
if(mode==56)
{
//scheduled stop
if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[17]);scredge=false;lcd.setCursor(14,0);lcd.print("STOP");
lcd.setCursor(0,2);lcd.print(inttostr2(timestop[0]));
lcd.setCursor(3,2);lcd.print(inttostr2(timestop[1]));
lcd.setCursor(10,2);lcd.print(inttostr2(timestop[2]));
lcd.setCursor(13,2);lcd.print(inttostr2(timestop[3]));
lcd.setCursor(16,2);lcd.print(timestop[4]);
if(pos==1) { lcd.setCursor(1,3);lcd.print("##");lcd.setCursor(0,2);lcd.cursor();}
if(pos==2) { lcd.setCursor(3,2);lcd.cursor();}
if(pos==3) { lcd.setCursor(10,2);lcd.cursor();}
if(pos==4) { lcd.setCursor(13,2);lcd.cursor();}
if(pos==5) { lcd.setCursor(17,3);lcd.print("<##");lcd.setCursor(16,2);lcd.cursor();}
}
if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;if(pos>1) {pos--;} else { lcd.noCursor();mode=52;}}
if(digitalRead(button2)==false && edge2==true) { edge2=false;scredge=true;
if(pos==1) { timestop[0]--;if(timestop[0]<0) {timestop[0]=23;}}
if(pos==2) { timestop[1]--;if(timestop[1]<0) {timestop[1]=59;}}
if(pos==3) { timestop[2]--;if(timestop[2]<1) {timestop[2]=31;}}
if(pos==4) { timestop[3]--;if(timestop[3]<1) {timestop[3]=12;}}
if(pos==5) { timestop[4]--;if(timestop[4]<2000) {timestop[4]=2037;}}
}
if(digitalRead(button3)==false && edge3==true) { edge3=false;scredge=true;
if(pos==1) { timestop[0]++;if(timestop[0]>23) {timestop[0]=0;}}
if(pos==2) { timestop[1]++;if(timestop[1]>59) {timestop[1]=0;}}
if(pos==3) { timestop[2]++;if(timestop[2]>31) {timestop[2]=1;}}
if(pos==4) { timestop[3]++;if(timestop[3]>12) {timestop[3]=1;}}
if(pos==5) { timestop[4]++;if(timestop[4]>2037) {timestop[4]=2000;}}
}
if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;if(pos<5) {pos++;} else { lcd.noCursor();mode=52;}}
}
if(mode==57)
{
//stop by samples
int ch=stopch-1;
if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[18]);scredge=false;
lcd.setCursor(12,2);lcd.print(longtostr8(stopsamples));
if(pos==1) { lcd.setCursor(1,3);lcd.print("##");lcd.setCursor(12,2);lcd.cursor();}
if(pos==2) { lcd.setCursor(13,2);lcd.cursor();}
if(pos==3) { lcd.setCursor(14,2);lcd.cursor();}
if(pos==4) { lcd.setCursor(15,2);lcd.cursor();}
if(pos==5) { lcd.setCursor(16,2);lcd.cursor();}
if(pos==6) { lcd.setCursor(17,2);lcd.cursor();}
if(pos==7) { lcd.setCursor(18,2);lcd.cursor();}
if(pos==8) { lcd.setCursor(17,3);lcd.print("<##");lcd.setCursor(19,2);lcd.cursor();}
}
if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;if(pos>1) {pos--;} else {lcd.noCursor();mode=52;}}
if(digitalRead(button2)==false && edge2==true) {
if(pos==1) { splitnumber8(stopsamples);numset[0]--;if(numset[0]<0) { numset[0]=9;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
if(pos==2) { splitnumber8(stopsamples);numset[1]--;if(numset[1]<0) { numset[1]=9;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
if(pos==3) { splitnumber8(stopsamples);numset[2]--;if(numset[2]<0) { numset[2]=9;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
if(pos==4) { splitnumber8(stopsamples);numset[3]--;if(numset[3]<0) { numset[3]=9;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
if(pos==5) { splitnumber8(stopsamples);numset[4]--;if(numset[4]<0) { numset[4]=9;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
if(pos==6) { splitnumber8(stopsamples);numset[5]--;if(numset[5]<0) { numset[5]=9;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
if(pos==7) { splitnumber8(stopsamples);numset[6]--;if(numset[6]<0) { numset[6]=9;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
if(pos==8) { splitnumber8(stopsamples);numset[7]--;if(numset[7]<0) { numset[7]=9;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
edge2=false;scredge=true;}
if(digitalRead(button3)==false && edge3==true) {
if(pos==1) { splitnumber8(stopsamples);numset[0]++;if(numset[0]>9) { numset[0]=0;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
if(pos==2) { splitnumber8(stopsamples);numset[1]++;if(numset[1]>9) { numset[1]=0;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
if(pos==3) { splitnumber8(stopsamples);numset[2]++;if(numset[2]>9) { numset[2]=0;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
if(pos==4) { splitnumber8(stopsamples);numset[3]++;if(numset[3]>9) { numset[3]=0;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
if(pos==5) { splitnumber8(stopsamples);numset[4]++;if(numset[4]>9) { numset[4]=0;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
if(pos==6) { splitnumber8(stopsamples);numset[5]++;if(numset[5]>9) { numset[5]=0;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
if(pos==7) { splitnumber8(stopsamples);numset[6]++;if(numset[6]>9) { numset[6]=0;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
if(pos==8) { splitnumber8(stopsamples);numset[7]++;if(numset[7]>9) { numset[7]=0;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
edge3=false;scredge=true;}
if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;if(pos<8) {pos++;} else { lcd.noCursor();mode=52;}}
}
if(mode==6)
{
//interval
if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[5]);drawframe(1);scredge=false;
lcd.setCursor(12,2);lcd.print(longtostri6(interval));}
if(pos==1) { lcd.setCursor(12,2);lcd.cursor();}
if(pos==2) { lcd.setCursor(13,2);lcd.cursor();}
if(pos==3) { lcd.setCursor(14,2);lcd.cursor();}
if(pos==4) { lcd.setCursor(16,2);lcd.cursor();}
if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;if(pos>1) {pos--;} else {lcd.noCursor();mode=5;}}
if(digitalRead(button2)==false && edge2==true) { edge2=false;scredge=true;
if(pos==1) { splitnumber6(interval);numset[0]--;if(numset[0]<0) { numset[0]=9;} interval=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3];}
if(pos==2) { splitnumber6(interval);numset[1]--;if(numset[1]<0) { numset[1]=9;} interval=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3];}
if(pos==3) { splitnumber6(interval);numset[2]--;if(numset[2]<0) { numset[2]=9;} interval=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3];}
if(pos==4) { splitnumber6(interval);numset[3]--;if(numset[3]<0) { numset[3]=9;} interval=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3];}
if(interval<100) { interval=100;}}
if(digitalRead(button3)==false && edge3==true) { edge3=false;scredge=true;
if(pos==1) { splitnumber6(interval);numset[0]++;if(numset[0]>9) { numset[0]=0;} interval=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3];}
if(pos==2) { splitnumber6(interval);numset[1]++;if(numset[1]>9) { numset[1]=0;} interval=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3];}
if(pos==3) { splitnumber6(interval);numset[2]++;if(numset[2]>9) { numset[2]=0;} interval=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3];}
if(pos==4) { splitnumber6(interval);numset[3]++;if(numset[3]>9) { numset[3]=0;} interval=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3];}
if(interval<100) { interval=100;}}
if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;if(pos<4) {pos++;} else {lcd.noCursor();mode=51;}}
}
if(mode==8)
{
//min
boolean neg=false;
int ch=chedit-1;
if(minval[ch]<0) { neg=true;}
if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[7]);lcd.setCursor(8,0);lcd.print(inttostr2(chedit));drawframe(1);scredge=false;
lcd.setCursor(1,3);if(pos==1) { lcd.print("##");}
lcd.setCursor(12,2);if(neg) { lcd.print("-");} else { lcd.print("+");}
lcd.print(longtostrm6(minval[ch]));
if(pos==1) { lcd.setCursor(12,2);lcd.cursor();}
if(pos==2) { lcd.setCursor(13,2);lcd.cursor();}
if(pos==3) { lcd.setCursor(14,2);lcd.cursor();}
if(pos==4) { lcd.setCursor(15,2);lcd.cursor();}
if(pos==5) { lcd.setCursor(16,2);lcd.cursor();}
if(pos==6) { lcd.setCursor(18,2);lcd.cursor();}
if(pos==7) { lcd.setCursor(19,2);lcd.cursor();}}
if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;if(pos>1) {pos--;} else {lcd.noCursor();mode=5;}}
if(digitalRead(button2)==false && edge2==true) {
if(pos==1) { minval[ch]= -minval[ch];}
if(pos==2) { splitnumber6(minval[ch]);numset[0]--;if(numset[0]<0) { numset[0]=9;} minval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
if(pos==3) { splitnumber6(minval[ch]);numset[1]--;if(numset[1]<0) { numset[1]=9;} minval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
if(pos==4) { splitnumber6(minval[ch]);numset[2]--;if(numset[2]<0) { numset[2]=9;} minval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
if(pos==5) { splitnumber6(minval[ch]);numset[3]--;if(numset[3]<0) { numset[3]=9;} minval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
if(pos==6) { splitnumber6(minval[ch]);numset[4]--;if(numset[4]<0) { numset[4]=9;} minval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
if(pos==7) { splitnumber6(minval[ch]);numset[5]--;if(numset[5]<0) { numset[5]=9;} minval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
edge2=false;scredge=true;}
if(digitalRead(button3)==false && edge3==true) {
if(pos==1) { minval[ch]= -minval[ch];}
if(pos==2) { splitnumber6(minval[ch]);numset[0]++;if(numset[0]>9) { numset[0]=0;} minval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
if(pos==3) { splitnumber6(minval[ch]);numset[1]++;if(numset[1]>9) { numset[1]=0;} minval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
if(pos==4) { splitnumber6(minval[ch]);numset[2]++;if(numset[2]>9) { numset[2]=0;} minval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
if(pos==5) { splitnumber6(minval[ch]);numset[3]++;if(numset[3]>9) { numset[3]=0;} minval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
if(pos==6) { splitnumber6(minval[ch]);numset[4]++;if(numset[4]>9) { numset[4]=0;} minval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
if(pos==7) { splitnumber6(minval[ch]);numset[5]++;if(numset[5]>9) { numset[5]=0;} minval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
edge3=false;scredge=true;}
if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;if(pos<7) {pos++;} else {lcd.noCursor();mode=9;pos=1;}}
}
if(mode==9)
{
//max
boolean neg=false;
int ch=chedit-1;
if(maxval[ch]<0) { neg=true;}
if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[8]);lcd.setCursor(8,0);lcd.print(inttostr2(chedit));drawframe(1);scredge=false;
lcd.setCursor(12,2);if(neg) { lcd.print("-");} else { lcd.print("+");}
lcd.print(longtostrm6(maxval[ch]));
if(pos==1) { lcd.setCursor(12,2);lcd.cursor();}
if(pos==2) { lcd.setCursor(13,2);lcd.cursor();}
if(pos==3) { lcd.setCursor(14,2);lcd.cursor();}
if(pos==4) { lcd.setCursor(15,2);lcd.cursor();}
if(pos==5) { lcd.setCursor(16,2);lcd.cursor();}
if(pos==6) { lcd.setCursor(18,2);lcd.cursor();}
if(pos==7) { lcd.setCursor(19,2);lcd.cursor();}}
if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;if(pos>1) {pos--;} else {lcd.noCursor();mode=8;pos=7;}}
if(digitalRead(button2)==false && edge2==true) {
if(pos==1) { maxval[ch]= -maxval[ch];}
if(pos==2) { splitnumber6(maxval[ch]);numset[0]--;if(numset[0]<0) { numset[0]=9;} maxval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
if(pos==3) { splitnumber6(maxval[ch]);numset[1]--;if(numset[1]<0) { numset[1]=9;} maxval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
if(pos==4) { splitnumber6(maxval[ch]);numset[2]--;if(numset[2]<0) { numset[2]=9;} maxval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
if(pos==5) { splitnumber6(maxval[ch]);numset[3]--;if(numset[3]<0) { numset[3]=9;} maxval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
if(pos==6) { splitnumber6(maxval[ch]);numset[4]--;if(numset[4]<0) { numset[4]=9;} maxval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
if(pos==7) { splitnumber6(maxval[ch]);numset[5]--;if(numset[5]<0) { numset[5]=9;} maxval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
edge2=false;scredge=true;}
if(digitalRead(button3)==false && edge3==true) {
if(pos==1) { maxval[ch]= -maxval[ch];}
if(pos==2) { splitnumber6(maxval[ch]);numset[0]++;if(numset[0]>9) { numset[0]=0;} maxval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
if(pos==3) { splitnumber6(maxval[ch]);numset[1]++;if(numset[1]>9) { numset[1]=0;} maxval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
if(pos==4) { splitnumber6(maxval[ch]);numset[2]++;if(numset[2]>9) { numset[2]=0;} maxval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
if(pos==5) { splitnumber6(maxval[ch]);numset[3]++;if(numset[3]>9) { numset[3]=0;} maxval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
if(pos==6) { splitnumber6(maxval[ch]);numset[4]++;if(numset[4]>9) { numset[4]=0;} maxval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
if(pos==7) { splitnumber6(maxval[ch]);numset[5]++;if(numset[5]>9) { numset[5]=0;} maxval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
edge3=false;scredge=true;}
if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;if(pos<7) {pos++;} else {lcd.noCursor();mode=10;}}
}
if(mode==10)
{
//unit
int ch=chedit-1;
if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[9]);lcd.setCursor(8,0);lcd.print(inttostr2(chedit));drawframe(1);
lcd.setCursor(18-unitstr[unit[ch]].length(),2);lcd.print("["+unitstr[unit[ch]]);
lcd.setCursor(10,2);lcd.print(inttostr2(unit[ch]+1));scredge=false;}
if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;mode=9;pos=7;}
if(digitalRead(button2)==false && edge2==true) { edge2=false;unit[ch]--;if(unit[ch]<0) { unit[ch]=49;} scredge=true;}
if(digitalRead(button3)==false && edge3==true) { edge3=false;unit[ch]++;if(unit[ch]>49) { unit[ch]=0;} scredge=true;}
if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;mode=5;}
}
if(mode==7)
{
//time and date
if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[6]);lcd.setCursor(18,1);lcd.print(inttostr2(chcount));scredge=false;}
if(millis()-before>=1000)
{
before1=millis();
if (RTC.read(tm)) {
lcd.setCursor(0,2);
lcd.print(inttostr2(tm.Hour)+":"+inttostr2(tm.Minute)+":"+inttostr2(tm.Second)+" "+inttostr2(tm.Day)+"."+inttostr2(tm.Month)+"."+tmYearToCalendar(tm.Year));
} else {
if (RTC.chipPresent()) {
Serial.println("The DS1307 is stopped. Please run the SetTime");
Serial.println("example to initialize the time and begin running.");
Serial.println();
} else {
Serial.println("DS1307 read error! Please check the circuitry.");
Serial.println();
}
mode=14;scredge=true;
}
}
if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;mode=52;}
if(digitalRead(button2)==false && edge2==true) { edge2=false;scredge=true;chcount--;if(chcount<1) { chcount=12;}}
if(digitalRead(button3)==false && edge3==true) { edge3=false;scredge=true;chcount++;if(chcount>12) { chcount=1;}}
if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;mode=11;pos=1;
rtcset[0]=tm.Hour;rtcset[1]=tm.Minute;rtcset[2]=tm.Second;rtcset[3]=tm.Day;rtcset[4]=tm.Month;rtcset[5]=tmYearToCalendar(tm.Year);}
}
if(mode==11)
{
//rtc
if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[10]);scredge=false;
lcd.setCursor(12,1);lcd.print(inttostr2(rtcset[0]));
lcd.setCursor(15,1);lcd.print(inttostr2(rtcset[1]));
lcd.setCursor(18,1);lcd.print(inttostr2(rtcset[2]));
lcd.setCursor(10,2);lcd.print(inttostr2(rtcset[3]));
lcd.setCursor(13,2);lcd.print(inttostr2(rtcset[4]));
lcd.setCursor(16,2);lcd.print(rtcset[5]);
if(pos==1) { lcd.setCursor(1,3);lcd.print("##");lcd.setCursor(12,1);lcd.cursor();}
if(pos==2) { lcd.setCursor(15,1);lcd.cursor();}
if(pos==3) { lcd.setCursor(18,1);lcd.cursor();}
if(pos==4) { lcd.setCursor(10,2);lcd.cursor();}
if(pos==5) { lcd.setCursor(13,2);lcd.cursor();}
if(pos==6) { lcd.setCursor(17,3);lcd.print("Set");lcd.setCursor(16,2);lcd.cursor();}
}
if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;if(pos>1) {pos--;} else {lcd.noCursor();mode=7;}}
if(digitalRead(button2)==false && edge2==true) { edge2=false;scredge=true;
if(pos==1) { rtcset[0]--;if(rtcset[0]<0) {rtcset[0]=23;}}
if(pos==2) { rtcset[1]--;if(rtcset[1]<0) {rtcset[1]=59;}}
if(pos==3) { rtcset[2]--;if(rtcset[2]<0) {rtcset[2]=59;}}
if(pos==4) { rtcset[3]--;if(rtcset[3]<1) {rtcset[3]=31;}}
if(pos==5) { rtcset[4]--;if(rtcset[4]<1) {rtcset[4]=12;}}
if(pos==6) { rtcset[5]--;if(rtcset[5]<2000) {rtcset[5]=2037;}}
}
if(digitalRead(button3)==false && edge3==true) { edge3=false;scredge=true;
if(pos==1) { rtcset[0]++;if(rtcset[0]>23) {rtcset[0]=0;}}
if(pos==2) { rtcset[1]++;if(rtcset[1]>59) {rtcset[1]=0;}}
if(pos==3) { rtcset[2]++;if(rtcset[2]>59) {rtcset[2]=0;}}
if(pos==4) { rtcset[3]++;if(rtcset[3]>31) {rtcset[3]=1;}}
if(pos==5) { rtcset[4]++;if(rtcset[4]>12) {rtcset[4]=1;}}
if(pos==6) { rtcset[5]++;if(rtcset[5]>2037) {rtcset[5]=2000;}}
}
if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;if(pos<6) {pos++;} else {mode=12;}}
}
if(mode==12)
{ //RTS set notify
lcd.noCursor();
lcd.setCursor(0,3);lcd.print(" TIME & DATE SET ");
setTime(rtcset[0],rtcset[1],rtcset[2],rtcset[3],rtcset[4],rtcset[5]);
RTC.set(now());
delay(1000);scredge=true;mode=11;
}
if(mode==13)
{
//overview
int ch=chedit-1;
boolean neg=false;
if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[11]);lcd.setCursor(1,3);lcd.write(8);
lcd.setCursor(17,0);lcd.print(inttostr2(chedit));
if(minval[ch]<0) { neg=true;} lcd.setCursor(4,1);if(neg) { lcd.print("-");} else { lcd.print(" ");} lcd.print(longtostrm6(minval[ch]));
neg=false;
if(maxval[ch]<0) { neg=true;} lcd.setCursor(4,2);if(neg) { lcd.print("-");} else { lcd.print(" ");} lcd.print(longtostrm6(maxval[ch]));
lcd.setCursor(20-unitstr[unit[ch]].length(),1);lcd.print(unitstr[unit[ch]]);
scredge=false;}
if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;mode=0;}
if(digitalRead(button2)==false && edge2==true) { edge2=false;scredge=true;chedit++;if(chedit>chcount) { chedit=1;}}
long var;
if(ch==0) { var=analogRead(input1);}
if(ch==1) { var=analogRead(input2);}
if(ch==2) { var=analogRead(input3);}
if(ch==3) { var=analogRead(input4);}
if(ch==4) { var=analogRead(input5);}
if(ch==5) { var=analogRead(input6);}
if(ch==6) { var=analogRead(input7);}
if(ch==7) { var=analogRead(input8);}
if(ch==8) { var=analogRead(input9);}
if(ch==9) { var=analogRead(input10);}
if(ch==10){ var=analogRead(input11);}
if(ch==11){ var=analogRead(input12);}
lcd.setCursor(13,2);lcd.print("In:"+str4(String(var)));
var=map(var, 0, 1023, minval[ch], maxval[ch]);
if(var<0) { neg=true;} lcd.setCursor(12,3);if(neg) { lcd.print("-");} else { lcd.print(" ");} lcd.print(longtostrm6(var));delay(50);
}
if(mode==100)
{
//debug
// if(scredge==true) { lcd.clear();lcd.setCursor(0,0);lcd.print("DEBUG");scredge=false;}
lcd.clear();
tmElements_t testtm;
testtm.Hour=timestart[0];testtm.Minute=timestart[1];testtm.Second=0;testtm.Day=timestart[2];testtm.Month=timestart[3];testtm.Year=CalendarYrToTm(timestart[4]);
RTC.read(tm);
time_t time1=makeTime(tm);
time_t time2=makeTime(testtm);
if(time1<time2) { lcd.setCursor(0,0);lcd.print("-");} else { lcd.setCursor(0,0);lcd.print("+");}
lcd.setCursor(0,2);
lcd.print(inttostr2(tm.Hour)+":"+inttostr2(tm.Minute)+":"+inttostr2(tm.Second)+" "+inttostr2(tm.Day)+"."+inttostr2(tm.Month)+"."+tmYearToCalendar(tm.Year));
lcd.setCursor(0,3);
lcd.print(inttostr2(testtm.Hour)+":"+inttostr2(testtm.Minute)+":"+inttostr2(testtm.Second)+" "+inttostr2(testtm.Day)+"."+inttostr2(testtm.Month)+"."+tmYearToCalendar(testtm.Year));
delay(100);
if(digitalRead(button5)==false && edge5==true) { edge5=false;scredge=true;mode=1;}
}
}
- Prílohy
-
- data logger.pdf
- (72.95 KiB) 86 stiahnutí
0
-
- Zaslúžilý člen
- Príspevky: 1375
- Dátum registrácie: 22 Jan 2012, 19:24
- Bydlisko: Nové Mesto nad Váhom
- Vek: 43
Re: 12-kanalovy Data Logger
Mimochodom,uz 2 mesiace spat som si vyrobil prvu periferiu(s predstihom).
Jedna sa o diferencialny zosilovac pre meranie prudu pre shunt-rezistory 75mΩ.
Kalibrovatelny offset a gain.
Ako referencia nuly je pouzita zabudovana referencia v LM317,ktora je cca 1.25V.
+1.25V je nasledne negovane na -1.25V a cez nulovaci trimer a pomocne predradne rezistory(kvoli zmenseniu rozsahu) je offsetovany vystup.
Podobne redukovany chod ma aj gain trimer(predradnikom a bocnikmi),ktorym je kalibrovane zosilnenie 66,6666~ (0-75mV -> 0-5V).
Tento vyrobok vypada trosku lepsie zvnutra,pretoze sa jedna o jednoduchu DPS.
Jedna sa o diferencialny zosilovac pre meranie prudu pre shunt-rezistory 75mΩ.
Kalibrovatelny offset a gain.
Ako referencia nuly je pouzita zabudovana referencia v LM317,ktora je cca 1.25V.
+1.25V je nasledne negovane na -1.25V a cez nulovaci trimer a pomocne predradne rezistory(kvoli zmenseniu rozsahu) je offsetovany vystup.
Podobne redukovany chod ma aj gain trimer(predradnikom a bocnikmi),ktorym je kalibrovane zosilnenie 66,6666~ (0-75mV -> 0-5V).
Tento vyrobok vypada trosku lepsie zvnutra,pretoze sa jedna o jednoduchu DPS.
- Prílohy
-
- current probe 2.pdf
- (62.74 KiB) 84 stiahnutí
0
Re: 12-kanalovy Data Logger
Máš tam přesný poměry těch 10k/2k páru ve vstupu, nebo ten zesilovač měří s velkou CM konverzí? Samozřejmě záleží jak moc je celé zapojení plovoucí vůči měřenému napětí na odporu.
Vzhledem k ceně ad826 se divím, že jsi rovnou nepoužil diferenční zesilovač, který by tento problém aspoň částečně řešil, například LT1990?
Vzhledem k ceně ad826 se divím, že jsi rovnou nepoužil diferenční zesilovač, který by tento problém aspoň částečně řešil, například LT1990?
0
It's better to be hated for who you are, than to be loved for who you are not.
-
- Zaslúžilý člen
- Príspevky: 1375
- Dátum registrácie: 22 Jan 2012, 19:24
- Bydlisko: Nové Mesto nad Váhom
- Vek: 43
Re: 12-kanalovy Data Logger
Niektore pojmy som nepochopil. Co je CM konverzia? Ako to myslis,plavajuce zapojenie voci meranemu napatiu?
Neviem,kolko stoji AD826,ale mal som ho v sufliku,tak som ho pouzil.
Presnosti vstupnych delicov som nijako extra neriesil,ale su z jednej varky.
Na kalibraciu tam mam dva trimre,jednym sa nastavuje offset a druhym gain.
To mi staci a je to dostatocne presne pre moje pouzitie.
Neviem,kolko stoji AD826,ale mal som ho v sufliku,tak som ho pouzil.
Presnosti vstupnych delicov som nijako extra neriesil,ale su z jednej varky.
Na kalibraciu tam mam dva trimre,jednym sa nastavuje offset a druhym gain.
To mi staci a je to dostatocne presne pre moje pouzitie.
0
Re: 12-kanalovy Data Logger
Jde o to, že pokud nejsou poměry těchto odporů stejné, tak dochází ke konverzi souhlasného napětí na vstupech diferenčního zesilovače na diferenční napětí, které je pak zesilováno. U diferenčního zesilovače se požaduje, aby měl minimální zesíleni (maximální potlačení) tohoto souhlasného napětí na vstupech. Toto zapojení bude fungovat uspokojivě jenom pokud bude souhlasné napětí na vstupech zesilovače nízké.
Příkladem může být, že kdyby jsi měl snímací odpor na 12V větvi, tak by se ti na výstupu objevilo napětí 0,390V (v nejhorším případě pro 1% odpory), aniž by snímacím odporem tekl jakýkoliv proud.
Odvození zde:
http://masteringelectronicsdesign.com/t ... or-part-1/
Kalkulačka maximální konverze pro danou toleranci rezistorů zde:
http://masteringelectronicsdesign.com/d ... alculator/
Příkladem může být, že kdyby jsi měl snímací odpor na 12V větvi, tak by se ti na výstupu objevilo napětí 0,390V (v nejhorším případě pro 1% odpory), aniž by snímacím odporem tekl jakýkoliv proud.
Odvození zde:
http://masteringelectronicsdesign.com/t ... or-part-1/
Kalkulačka maximální konverze pro danou toleranci rezistorů zde:
http://masteringelectronicsdesign.com/d ... alculator/
0
It's better to be hated for who you are, than to be loved for who you are not.