Segundo Sistema de Enxugamento V24
/*
* Wilson Bueno - 16/08/2022
* V 24 - Funcional
* Uso alternativo do caracter °: lcd.print(" \xDF");
* Alterações para o segundo dispositivo de enxugamento
* Colocando a versão no display e serial
*/
#include "RTClib.h" //biblioteca do RTC
#include "max6675.h" // biblioteca do shield max6675
//#include <SoftwareSerial.h> // biblioteca para bluetooth - retirado para diminuir o lag
#include <SPI.h> // biblioteca comunicação serial
#include <SD.h> // biblioteca cartão SD
//#include <dht.h> // biblioteca sensor umidade e temp - retirado para diminuir o lag
#include <LiquidCrystal.h> // biblioteca LCD
//Array of bytes - grade (°) special caracter - pode usar tb: lcd.print(" \xDF");
byte slash[8]= {
B01100, // B stands for binary formatter and the 5 numbers are the pixels
B10010,
B01100,
B00000,
B00000,
B00000,
B00000,
B00000,
};
const int lederroPin = 37;
//Initialize the library by associating any needed LCD interface pin with the arduino pin number it is connected to
const int rs = 39, en = 41, d4 = 43, d5 = 45, d6 = 47, d7 = 49;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
//RTC
RTC_DS1307 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
/*
//Bluetooth
SoftwareSerial serial1(51, 53); // RX, TX do Bluetooth - padrão 10 e 11
// Used to identify graphing values
String graphTag = "Graph:";
// Used to identify the separation of values inside the stream
char valueSeparatorCharacter = '&';
// Used to identify the end of the stream. This will apply for both the serial monitor and graph
char terminationSeparatorCharacter = '$';
//Humidity and tempertures sensor - vai usar?
dht DHT;
uint32_t timer = 0;
const int chipSelect = 10;
*/
//LCD millis time base
unsigned long millisdisplaytime = millis();
//Open file on SD card
File logfile;
void error(char *str) {
Serial.print("error: ");
Serial.println(str);
while(1);
}
//Thermocouples modules max6675
//1st thermocouple
int so1Pin = 22;// SO=Serial Out do shield termopar
int cs1Pin = 24;// CS = chip select CS pin do shield termopar
int sck1Pin = 26;// SCK = Serial Clock pin do shield termopar
//2nd thermocouple
int so2Pin = 28;// SO=Serial Out do shield termopar
int cs2Pin = 30;// CS = chip select CS pin do shield termopar
int sck2Pin = 32;// SCK = Serial Clock pin do shield termopar
//3rd thermocouple
int so3Pin = 34;// SO=Serial Out do shield termopar
int cs3Pin = 36;// CS = chip select CS pin do shield termopar
int sck3Pin = 38;// SCK = Serial Clock pin do shield termopar
//4th thermocouple
int so4Pin = 40;// SO=Serial Out do shield termopar
int cs4Pin = 42;// CS = chip select CS pin do shield termopar
int sck4Pin = 44;// SCK = Serial Clock pin do shield termopar
//MAX6675 instance
MAX6675 robojax1(sck1Pin, cs1Pin, so1Pin);
MAX6675 robojax2(sck2Pin, cs2Pin, so2Pin);
MAX6675 robojax3(sck3Pin, cs3Pin, so3Pin);
MAX6675 robojax4(sck4Pin, cs4Pin, so4Pin);
//Analogic channels for Time to Dry
int correcao=204.7; // correção para mostrar em tensão
float entradaA8 = 8; // variável que define que a porta A8 é flutuante
float entradaA9 = 9; // variável que define que a porta A9 é flutuante
float entradaA10 = 10; // variável que define que a porta A10 é flutuante
float entradaA11 = 11; // variável que define que a porta A11 é flutuante
// float entradaA12 = 12; // variável que define que a porta A12 é flutuante
// float entradaA13 = 13; // variável que define que a porta A13 é flutuante
// float entradaA14 = 14; // variável que define que a porta A13 é flutuante
// float entradaA15 = 15; // variável que define que a porta A13 é flutuante
//Variáveis para serial e cartão (*)
float val1 = 0; //variável que guarda o valor lido na analógica
float val2 = 0; //variável que guarda o valor lido na analógica
float val3 = 0; //variável que guarda o valor lido na analógica
float val4 = 0; //variável que guarda o valor lido na analógica
// float val5 = 0; //variável que guarda o valor lido na analógica
// float val6 = 0; //variável que guarda o valor lido na analógica
// float val7 = 0; //variável que guarda o valor lido na analógica
// float val8 = 0; //variável que guarda o valor lido na analógica
//Variáveis para LCD
int val10 = 0; //variável que guarda o valor lido na analógica
int val11 = 0; //variável que guarda o valor lido na analógica
int val12 = 0; //variável que guarda o valor lido na analógica
int val13 = 0; //variável que guarda o valor lido na analógica
// int val14 = 0; //variável que guarda o valor lido na analógica
// int val15 = 0; //variável que guarda o valor lido na analógica
// int val16 = 0; //variável que guarda o valor lido na analógica
// int val17 = 0; //variável que guarda o valor lido na analógica
//Serial date for PLX-DAQ Excel files
int ROW = 0;
int LABEL = 1;
//loop do STARTING no LCD
int x = 1;
//============================================================================
void setup() {
//Set up the LCD's number of columns and rows:
lcd.begin(16, 2); //4 linhas por causa dos menus
lcd.createChar(7, slash); // Create a custom character for use on the LCD. Up to eight characters of 5x8 pixels are supported
//Alimentação Led de erro
pinMode (lederroPin, OUTPUT); // VCC
//inicialização serial
//serial1.begin(9600); // Para o bluetooth
Serial.begin(9600); //inicialização serial
Serial.println("V24 16/08/22");
Serial.println("CLEARDATA"); // reset da comunicação serial
Serial.println("LABEL,Time,val1,val2,val3,val4,val5,val6,val7,val8,Temp1,Temp2,Temp3,Temp4,ROW"); // nomeia as colunas
//SD card
Serial.print("Initializing SD card...");
pinMode(10, OUTPUT); //shield SD
//See if the card is present and can be initialized:
if (!SD.begin(10, 11, 12, 13)) {
Serial.println("Card failed, or not present");
digitalWrite(lederroPin, HIGH); // turn the LED on (HIGH is the voltage level)
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("* FAIL ON *");
lcd.setCursor(3, 1);
lcd.print("* SD CARD *");
while (1) ;
}
Serial.println("card initialized.");
char caracter;
DateTime now = rtc.now();
//Create a new file sequencial on SD card
char filename[] = "LOGGER00.TXT";
for (uint8_t i = 0; i < 1000; i++)
{
filename[6] = i/10 + '0';
filename[7] = i%10 + '0';
if (! SD.exists(filename)) {
// only open a new file if it doesn't exist
logfile = SD.open(filename, FILE_WRITE);
digitalWrite(lederroPin, LOW); // turn the LED off by making the voltage LOW
//loop para correr o STARTING
while (x<=17) {
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("R&D MARELLI");
lcd.print(" ");
lcd.setCursor(x, 1);
lcd.print("V24-16.08.22");
delay(500);
x++;
}
x = 0;
break; // leave the loop!
}
}
if (! logfile) {
error("couldnt create file");
Serial.println("Fail to create file");
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("* FAIL ON *");
lcd.setCursor(3, 1);
lcd.print("* SD CARD *");
digitalWrite(lederroPin, HIGH); // turn the LED on (HIGH is the voltage level)
}
Serial.print("Logging to: ");
Serial.println(filename);
//Relógio RTC
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("* FAIL ON *");
lcd.setCursor(7, 1);
lcd.print("* RTC *");
digitalWrite(lederroPin, HIGH); // turn the LED on (HIGH is the voltage level)
while (1);
}
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running!");
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("* FAIL ON *");
lcd.setCursor(7, 1);
lcd.print("* RTC *");
digitalWrite(lederroPin, HIGH); // turn the LED on (HIGH is the voltage level)
}
// Ajuste data e hora - following line sets the RTC to the date & time this sketch was compiled
//rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
//rtc.adjust(DateTime(2020, 12, 30, 11, 41, 0));
}
//===================================================================
void loop(void){
//char caracter;
DateTime now = rtc.now();
/*
//DHT - humidity and temperature sensor
DHT.read11(A1); // chama método de leitura da classe dht,pino A1
//Retirando os decimais dos valores de DT11
int umi = (DHT.humidity);
int tempe = (DHT.temperature);
//Bluetooth
serial1.print(graphTag);
serial1.print(val1 / correcao); //Umidade 1
serial1.print(valueSeparatorCharacter);
serial1.print(val2 / correcao); //Umidade 2
serial1.print(valueSeparatorCharacter);
serial1.print(val3 / correcao); //Umidade 3
serial1.print(valueSeparatorCharacter);
serial1.print(val4 / correcao); //Umidade 4
serial1.print(valueSeparatorCharacter);
serial1.print(val5 / correcao); //Umidade 5
serial1.print(valueSeparatorCharacter);
serial1.print(val6 / correcao); //Umidade 6
serial1.print(terminationSeparatorCharacter);
*/
val1 = analogRead(entradaA8); // faz a leitura da entrada A8
val2 = analogRead(entradaA9); // faz a leitura da entrada A9
val3 = analogRead(entradaA10); // faz a leitura da entrada A10
val4 = analogRead(entradaA11); // faz a leitura da entrada A11
// val5 = analogRead(entradaA12); // faz a leitura da entrada A12
// val6 = analogRead(entradaA13); // faz a leitura da entrada A13
// val7 = analogRead(entradaA14); // faz a leitura da entrada A14
// val8 = analogRead(entradaA15); // faz a leitura da entrada A15
val10 = analogRead(entradaA8); // faz a leitura da entrada A8
val11 = analogRead(entradaA9); // faz a leitura da entrada A9
val12 = analogRead(entradaA10); // faz a leitura da entrada A10
val13 = analogRead(entradaA11); // faz a leitura da entrada A11
// val14 = analogRead(entradaA12); // faz a leitura da entrada A12
// val15 = analogRead(entradaA13); // faz a leitura da entrada A13
// val16 = analogRead(entradaA14); // faz a leitura da entrada A14
// val17 = analogRead(entradaA15); // faz a leitura da entrada A15
//Condicionais
//if (entradaA8 < 370) {
//val1 = 800; }
//Dados via serial
ROW++; //Excel lines increment
Serial.print("DATA,TIME,"); // inicia a impressão de dados, sempre iniciando
Serial.print(val1 / correcao);
Serial.print(",");
Serial.print(val2 / correcao);
Serial.print(",");
Serial.print(val3 / correcao);
Serial.print(",");
Serial.print(val4 / correcao);
Serial.print(",");
// Serial.print(val5 / correcao);
// Serial.print(",");
// Serial.print(val6 / correcao);
// Serial.print(",");
// Serial.print(val7 / correcao);
// Serial.print(",");
// Serial.print(val8 / correcao);
// Serial.print(",");
Serial.print(robojax1.readCelsius()); // termopar 1
Serial.print(",");
Serial.print(robojax2.readCelsius()); // termopar 2
Serial.print(",");
Serial.print(robojax3.readCelsius()); // termopar 3
Serial.print(",");
Serial.print(robojax4.readCelsius()); // termopar 4
Serial.print(",");
Serial.println(ROW);
//SD Card
logfile.print(now.day(), DEC);
logfile.print('/');
logfile.print(now.month(), DEC);
logfile.print('/');
logfile.print(now.year(), DEC);
//logfile.print(" (");
//logfile.print(daysOfTheWeek[now.dayOfTheWeek()]);
//logfile.print(") ");
logfile.print(" , ");
logfile.print(now.hour(), DEC);
logfile.print(':');
logfile.print(now.minute(), DEC);
logfile.print(':');
logfile.print(now.second(), DEC);
logfile.print(" , ");
//logfile.print(m/1000); // milliseconds since start
logfile.print(" , ");
logfile.print(val1 / correcao);
logfile.print(" , ");
logfile.print(val2 / correcao);
logfile.print(" , ");
logfile.print(val3 / correcao);
logfile.print(" , ");
logfile.print(val4 / correcao);
logfile.print(" , ");
// logfile.print(val5 / correcao);
// logfile.print(" , ");
// logfile.print(val6 / correcao);
// logfile.print(" , ");
// logfile.print(val7 / correcao);
// logfile.print(" , ");
// logfile.print(val8 / correcao);
// logfile.print(" , ");
logfile.print(robojax1.readCelsius());
logfile.print(" , ");
logfile.print(robojax2.readCelsius());
logfile.print(" , ");
logfile.print(robojax3.readCelsius());
logfile.print(" , ");
logfile.print(robojax4.readCelsius());
logfile.println(" , ");
//Vai usar??
//Serial.print(umi);
//Serial.print(tempe);
//Serial.print(DHT.humidity);
//Serial.print(" %");
//Serial.print(DHT.temperature);
//Serial.println(" °C");
//Draft : Início dados RTC
// Serial.print(m/1000); // milliseconds since start
// Serial.print(" , ");
// Serial.print(now.day(), DEC);
// Serial.print('/');
// Serial.print(now.month(), DEC);
// Serial.print('/');
// Serial.print(now.year(), DEC);
// Serial.print(" (");
// Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
// Serial.print(") ");
// Serial.print(" , ");
// Serial.print(now.hour(), DEC);
// Serial.print(':');
// Serial.print(now.minute(), DEC);
// Serial.print(':');
// Serial.print(now.second(), DEC);
// Serial.print(" , ");
// logfile.print(DHT.humidity);
// logfile.print(" % ");
// logfile.print(DHT.temperature);
// logfile.print(" °C ");
// if ((millis() - syncTime) < SYNC_INTERVAL) return; {
// syncTime = millis();
// }
// blink LED to show we are syncing data to the card & updating FAT!
delay(400);
//LCD
displaytime();
logfile.flush();
}
//To speed up the recording of file on SD card
void displaytime(){
DateTime now = rtc.now();
if((millis() - millisdisplaytime) < 800){
//LCD page 1
lcd.clear();
lcd.setCursor(1, 1);
lcd.print(val10 / correcao);
lcd.print(".0 ");
lcd.print(val11 / correcao);
lcd.print(".0 ");
lcd.print(val12 / correcao);
lcd.print(".0 ");
lcd.print(val13 / correcao);
lcd.print(".0 ");
lcd.setCursor(1, 0);
// lcd.print(val14 / correcao);
// lcd.print(".0 ");
lcd.print("PT1 PT2 PT3 PT4");
// lcd.print(val15 / correcao);
// lcd.print(".0 ");
// lcd.print(val16 / correcao);
// lcd.print(".0 ");
// lcd.print(val17 / correcao);
// lcd.print(".0 ");
//adicionar saídas
/*lcd.print(now.day(), DEC);
lcd.print(now.hour(), DEC);
lcd.print(':');
lcd.print(now.minute(), DEC);
lcd.print(':');
lcd.print(now.second(), DEC);*/
}
else {
//LCD page 2
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(robojax1.readCelsius()); // termopar 1
lcd.print("\xDF");//opção à montagem do caracter °
//lcd.write(7); // Writes a character to the LCD
lcd.print("C ");
lcd.print(robojax2.readCelsius()); // termopar 1
lcd.write(7); // Writes a character to the LCD
lcd.print("C ");
lcd.setCursor(0, 1);
lcd.print(robojax3.readCelsius()); // termopar 1
lcd.write(7); // Writes a character to the LCD
lcd.print("C ");
lcd.print(robojax4.readCelsius()); // termopar 1
lcd.write(7); // Writes a character to the LCD
lcd.print("C ");
}
if((millis() - millisdisplaytime) > 800){
millisdisplaytime = millis();
}
}
Comentários
Postar um comentário