Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Arduino Coding Help!! I am trying to combine 3 arduino projects into one compreh

ID: 3871530 • Letter: A

Question

Arduino Coding Help!!

I am trying to combine 3 arduino projects into one comprehensive project. The project scope is as followed:

Arduino mega board to set up a temperature, humidity, barometer pressure, and light intensity sensor with a passive infrared sensor. The device will have led functionality to give a visual representation of the sensor ranges, it will also email the primary user if the sensors read information outside of the preset ranges. A Nokia Liquid Crystal Display will give a visual read out of all real time collected data. We will be including a set of Arduino speakers to give an auditory warning incase the email or visual warnings are neglected. All the data will be saved on a mico SD card in a .cvs file with real time clock, Said data will be encrypted and decrypted using a algorithm.

the code thta I am using is below:

Email sample

#include <ESP8266WiFi.h>
#include "DHT.h"

const char* ssid     = "ZyXEL";      // SSID of local network
const char* password = "YourPasswordGoesHere";   // Password on network

WiFiClient client;
char servername[]="educ8s.tv"; // remote server we will connect to
String result;

float temperature;
float humidity;

#define DHTPIN D8

#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

void setup() {
dht.begin();
delay(2000);
Serial.begin(115200);
Serial.println("Connecting");
WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
    delay(100);
}
Serial.println("Connected");
delay(1000);
readSensor();
String temperatureString = String(temperature,1);
String humidityString = String(humidity,1);
sendDataToServer(temperatureString,humidityString);
}

void loop() {

}

void sendDataToServer(String temperature, String humidity)
{
if (client.connect(servername, 80)) { //starts client connection, checks for connection
    Serial.println("connected");
    client.println("GET /send_email.php?temperature="+temperature+"&humidity="+humidity+" HTTP/1.1"); //Send data
    client.println("Host: educ8s.tv");
    client.println("Connection: close"); //close 1.1 persistent connection
    client.println(); //end of get request
}
else {
    Serial.println("connection failed"); //error message if no client connect
    Serial.println();
}

while(client.connected() && !client.available()) delay(1); //waits for data
while (client.connected() || client.available()) { //connected or data available
    char c = client.read(); //gets byte from ethernet buffer
      result = result+c;
    }

client.stop(); //stop client
Serial.println(result);

}


void readSensor()
{

humidity = dht.readHumidity();
temperature = dht.readTemperature();
Serial.println("Temperature:");
Serial.println(temperature);
Serial.println("Humidity:");
Serial.println(humidity);

}

Weather Station Code

#include <BH1750.h>
#include "DHT.h"
#include <SFE_BMP180.h>
#include <Wire.h>
#include <LCD5110_Graph.h>
#include "LowPower.h"

#define ALTITUDE 216.0 // Altitude in Sparta, Greece

#define DHTPIN 4

#define DHTTYPE DHT22

LCD5110 lcd(9,10,11,13,12);

SFE_BMP180 pressure;
extern unsigned char SmallFont[];
extern unsigned char TinyFont[];
float temperature;
int lightIntensity = 0;

DHT dht(DHTPIN, DHTTYPE);
BH1750 lightMeter;

void setup(void) {
initLCD();
lightMeter.begin();
pressure.begin();
}

void loop() {

float humidity, pressure;
readLight();
if(lightIntensity>30)
{
lcd.disableSleep();
dht.begin();
delay(400);
humidity = dht.readHumidity();
temperature = dht.readTemperature();
pressure = readPressure();

lcd.clrScr();
char tempF[6];
char humF[6];
char pressF[7];

dtostrf(temperature, 5, 1, tempF);
dtostrf(humidity, 5, 1, humF);
dtostrf(pressure, 5, 1, pressF);

//Print UI
lcd.setFont(TinyFont);
lcd.print("TEMP",LEFT+17,0);
lcd.print("HUM",LEFT+62,0);
lcd.print("PRESSURE",CENTER,30);

lcd.setFont(SmallFont);
//Printing Temperature
lcd.print(tempF,LEFT,10);
lcd.print("~C",LEFT+30,10);

//Printing Humidity
lcd.print(humF,LEFT+45,10);
lcd.print("%",RIGHT,10);

//Printing Pressure
lcd.print(pressF,12,40);
lcd.print(" hPa",48,40);

lcd.update();

sleepForTwoMinutes();
}else
{
    lcd.enableSleep();
    sleepForTwoMinutes();
}
}


void initLCD()
{
lcd.InitLCD();
lcd.setFont(TinyFont);
lcd.print("Weather Station v0.5",CENTER,0);
lcd.update();
}

void sleepForTwoMinutes()
{

for(int i=0;i<15;i++)
     LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
}
void readLight()
{
delay(10);
lightIntensity = lightMeter.readLightLevel();
}

float readPressure()
{
char status;
double T,P,p0,a;

status = pressure.startTemperature();
if (status != 0)
{
    delay(status);
    status = pressure.getTemperature(T);
    if (status != 0)
    {
      status = pressure.startPressure(3);
      if (status != 0)
      {
        delay(status);
        status = pressure.getPressure(P,T);
        if (status != 0)
        {
          p0 = pressure.sealevel(P,ALTITUDE);     
          return p0;
        }
      }
    }
}
}

Data Logger Code

#include <LowPower.h>
#include <BH1750.h>
#include <SFE_BMP180.h>
#include <DHT.h>
#include <Wire.h>
#include "Sodaq_DS3231.h"
#include <SD.h>
#include <SPI.h>


#define DHTPIN 2
#define DHTTYPE DHT22   // DHT 22 (AM2302)

#define ALTITUDE 216.0 // Altitude in Sparta, Greece
char TEMPERATURE = 'C' ; //Change it to F to log degrees Fahrenheit
int INTERVAL = 1; //interval of measurements in minutes
DateTime dt(2015, 12, 14, 9, 28, 40, 1); //Date and time

int CS_PIN = 10;
int ledPin = 7;
int POWERPIN = 3;

File file;
DHT dht(DHTPIN,DHTTYPE);
SFE_BMP180 pressureSensor;
BH1750 lightMeter;
int id = 0;

void setup ()
{
   pinMode(POWERPIN, OUTPUT);
   digitalWrite(POWERPIN,HIGH);
   pinMode(ledPin, OUTPUT);
   initializeSD();

    //rtc.setDateTime(dt); //Adjust date-time as defined 'dt' above
}

void loop ()
{
    String temperature;
    String humidity;
    String light;
    String pressure;
    String entryId;
    String dateEntry;
    id++;
  
    digitalWrite(POWERPIN,HIGH);
    digitalWrite(ledPin,HIGH);
  
    delay(2000);
    initSensors();
    delay(10000);
  
    entryId = String(id);
    humidity = String(dht.readHumidity());
    if(TEMPERATURE =='F')
    {
      temperature = String(dht.readTemperature(true));
    }else
    {
      temperature = String(dht.readTemperature());
    }
  
    pressure = readPressure();
    light = readLight();
    dateEntry = DateLogEntry();

    String entry = entryId+","+dateEntry+","+temperature+","+humidity+","+pressure+","+light;  
    writeEntryToFile(entry);
    delay(2000);
    sleepForMinutes(INTERVAL);
  
}

void initSensors()
{

   Wire.begin();
   rtc.begin();
   dht.begin();
   pressureSensor.begin();
   lightMeter.begin();
}

void sleepForMinutes(int interval)
{
int i=0;
int seconds = interval*60;
int iterations = seconds/8;
    for (byte i = 0; i <= A5; i++)
    {
    pinMode (i, OUTPUT);    // changed as per below
    digitalWrite (i, LOW); //     ditto
    }

digitalWrite(POWERPIN,LOW);
for(i=0;i<iterations;i++)
{
    LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
}
}


float readPressureFromSensor()
{
char status;
double T,P,p0,a;

status = pressureSensor.startTemperature();
if (status != 0)
{
    delay(status);
    status = pressureSensor.getTemperature(T);
    if (status != 0)
    {
      status = pressureSensor.startPressure(3);
      if (status != 0)
      {
        delay(status);
        status = pressureSensor.getPressure(P,T);
        if (status != 0)
        {
          p0 = pressureSensor.sealevel(P,ALTITUDE);     
          return p0;
        }
      }
    }
}
}

String DateLogEntry()
{

String dateEntry;
String year;
String month;
String day;
String hour;
String minute;

DateTime now = rtc.now();
year = String(now.year());
month = String(now.month());
day = String(now.date());

if(now.hour()<10)
{
    hour = "0"+String(now.hour());
}else
{
    hour = String(now.hour());
}

    if(now.minute()<10)
{
    minute = "0"+String(now.minute());
}else
{
    minute = String(now.minute());
}

dateEntry = month+"/"+day+"/"+year+" "+hour+":"+minute;
return dateEntry;
}

String readLight()
{
uint16_t lux = lightMeter.readLightLevel();
return String(lux);
}

String readPressure()
{
String pressure;
pressure = String(readPressureFromSensor());
return pressure;
}

void initializeSD()
{
pinMode(10, OUTPUT); // change this to 53 on a mega // don't follow this!!
digitalWrite(10, HIGH); // Add this line
if (SD.begin(CS_PIN))
{
    digitalWrite(ledPin,LOW);
} else
{
    digitalWrite(ledPin,LOW);
    delay(1000);
    digitalWrite(ledPin,HIGH);
    delay(1000);
     digitalWrite(ledPin,LOW);
    delay(1000);
    digitalWrite(ledPin,HIGH);
    return;
}
}

int openFileToWrite(char filename[])
{
file = SD.open(filename, FILE_WRITE);

if (file)
{
    digitalWrite(ledPin,HIGH);
    delay(200);
    digitalWrite(ledPin,LOW);
    delay(200);
    digitalWrite(ledPin,HIGH);
    delay(200);
    digitalWrite(ledPin,LOW);
    return 1;
} else
{
    return 0;
}
}

int writeToFile(String text)
{
if (file)
{
    file.println(text);
    return 1;
} else
{
    return 0;
}
}

void closeFile()
{
if (file)
{
    file.close();
}
}

void writeEntryToFile(String entry)
{
openFileToWrite("log.txt");
writeToFile(entry);
closeFile();
}

Explanation / Answer

#include "DHT.h"

const char* ssid     = "ZyXEL";      // SSID of local network
const char* password = "YourPasswordGoesHere";   // Password on network

WiFiClient client;
char servername[]="educ8s.tv"; // remote server we will connect to
String result;

float temperature;
float humidity;

#define DHTPIN D8

#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

void setup() {
dht.begin();
delay(2000);
Serial.begin(115200);
Serial.println("Connecting");
WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
    delay(100);
}
Serial.println("Connected");
delay(1000);
readSensor();
String temperatureString = String(temperature,1);
String humidityString = String(humidity,1);
sendDataToServer(temperatureString,humidityString);
}

void loop() {

}

void sendDataToServer(String temperature, String humidity)
{
if (client.connect(servername, 80)) { //starts client connection, checks for connection
    Serial.println("connected");
    client.println("GET /send_email.php?temperature="+temperature+"&humidity="+humidity+" HTTP/1.1"); //Send data
    client.println("Host: educ8s.tv");
    client.println("Connection: close"); //close 1.1 persistent connection
    client.println(); //end of get request
}
else {
    Serial.println("connection failed"); //error message if no client connect
    Serial.println();
}

while(client.connected() && !client.available()) delay(1); //waits for data
while (client.connected() || client.available()) { //connected or data available
    char c = client.read(); //gets byte from ethernet buffer
      result = result+c;
    }

client.stop(); //stop client
Serial.println(result);

}


void readSensor()
{

humidity = dht.readHumidity();
temperature = dht.readTemperature();
Serial.println("Temperature:");
Serial.println(temperature);
Serial.println("Humidity:");
Serial.println(humidity);

}

Weather Station Code

#include <BH1750.h>
#include "DHT.h"
#include <SFE_BMP180.h>
#include <Wire.h>
#include <LCD5110_Graph.h>
#include "LowPower.h"

#define ALTITUDE 216.0 // Altitude in Sparta, Greece

#define DHTPIN 4

#define DHTTYPE DHT22

LCD5110 lcd(9,10,11,13,12);

SFE_BMP180 pressure;
extern unsigned char SmallFont[];
extern unsigned char TinyFont[];
float temperature;
int lightIntensity = 0;

DHT dht(DHTPIN, DHTTYPE);
BH1750 lightMeter;

void setup(void) {
initLCD();
lightMeter.begin();
pressure.begin();
}

void loop() {

float humidity, pressure;
readLight();
if(lightIntensity>30)
{
lcd.disableSleep();
dht.begin();
delay(400);
humidity = dht.readHumidity();
temperature = dht.readTemperature();
pressure = readPressure();

lcd.clrScr();
char tempF[6];
char humF[6];
char pressF[7];

dtostrf(temperature, 5, 1, tempF);
dtostrf(humidity, 5, 1, humF);
dtostrf(pressure, 5, 1, pressF);

//Print UI
lcd.setFont(TinyFont);
lcd.print("TEMP",LEFT+17,0);
lcd.print("HUM",LEFT+62,0);
lcd.print("PRESSURE",CENTER,30);

lcd.setFont(SmallFont);
//Printing Temperature
lcd.print(tempF,LEFT,10);
lcd.print("~C",LEFT+30,10);

//Printing Humidity
lcd.print(humF,LEFT+45,10);
lcd.print("%",RIGHT,10);

//Printing Pressure
lcd.print(pressF,12,40);
lcd.print(" hPa",48,40);

lcd.update();

sleepForTwoMinutes();
}else
{
    lcd.enableSleep();
    sleepForTwoMinutes();
}
}


void initLCD()
{
lcd.InitLCD();
lcd.setFont(TinyFont);
lcd.print("Weather Station v0.5",CENTER,0);
lcd.update();
}

void sleepForTwoMinutes()
{

for(int i=0;i<15;i++)
     LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
}
void readLight()
{
delay(10);
lightIntensity = lightMeter.readLightLevel();
}

float readPressure()
{
char status;
double T,P,p0,a;

status = pressure.startTemperature();
if (status != 0)
{
    delay(status);
    status = pressure.getTemperature(T);
    if (status != 0)
    {
      status = pressure.startPressure(3);
      if (status != 0)
      {
        delay(status);
        status = pressure.getPressure(P,T);
        if (status != 0)
        {
          p0 = pressure.sealevel(P,ALTITUDE);     
          return p0;
        }
      }
    }
}
}

Data Logger Code

#include <LowPower.h>
#include <BH1750.h>
#include <SFE_BMP180.h>
#include <DHT.h>
#include <Wire.h>
#include "Sodaq_DS3231.h"
#include <SD.h>
#include <SPI.h>


#define DHTPIN 2
#define DHTTYPE DHT22   // DHT 22 (AM2302)

#define ALTITUDE 216.0 // Altitude in Sparta, Greece
char TEMPERATURE = 'C' ; //Change it to F to log degrees Fahrenheit
int INTERVAL = 1; //interval of measurements in minutes
DateTime dt(2015, 12, 14, 9, 28, 40, 1); //Date and time

int CS_PIN = 10;
int ledPin = 7;
int POWERPIN = 3;

File file;
DHT dht(DHTPIN,DHTTYPE);
SFE_BMP180 pressureSensor;
BH1750 lightMeter;
int id = 0;

void setup ()
{
   pinMode(POWERPIN, OUTPUT);
   digitalWrite(POWERPIN,HIGH);
   pinMode(ledPin, OUTPUT);
   initializeSD();

    //rtc.setDateTime(dt); //Adjust date-time as defined 'dt' above
}

void loop ()
{
    String temperature;
    String humidity;
    String light;
    String pressure;
    String entryId;
    String dateEntry;
    id++;
  
    digitalWrite(POWERPIN,HIGH);
    digitalWrite(ledPin,HIGH);
  
    delay(2000);
    initSensors();
    delay(10000);
  
    entryId = String(id);
    humidity = String(dht.readHumidity());
    if(TEMPERATURE =='F')
    {
      temperature = String(dht.readTemperature(true));
    }else
    {
      temperature = String(dht.readTemperature());
    }
  
    pressure = readPressure();
    light = readLight();
    dateEntry = DateLogEntry();

    String entry = entryId+","+dateEntry+","+temperature+","+humidity+","+pressure+","+light;  
    writeEntryToFile(entry);
    delay(2000);
    sleepForMinutes(INTERVAL);
  
}

void initSensors()
{

   Wire.begin();
   rtc.begin();
   dht.begin();
   pressureSensor.begin();
   lightMeter.begin();
}

void sleepForMinutes(int interval)
{
int i=0;
int seconds = interval*60;
int iterations = seconds/8;
    for (byte i = 0; i <= A5; i++)
    {
    pinMode (i, OUTPUT);    // changed as per below
    digitalWrite (i, LOW); //     ditto
    }

digitalWrite(POWERPIN,LOW);
for(i=0;i<iterations;i++)
{
    LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
}
}


float readPressureFromSensor()
{
char status;
double T,P,p0,a;

status = pressureSensor.startTemperature();
if (status != 0)
{
    delay(status);
    status = pressureSensor.getTemperature(T);
    if (status != 0)
    {
      status = pressureSensor.startPressure(3);
      if (status != 0)
      {
        delay(status);
        status = pressureSensor.getPressure(P,T);
        if (status != 0)
        {
          p0 = pressureSensor.sealevel(P,ALTITUDE);     
          return p0;
        }
      }
    }
}
}

String DateLogEntry()
{

String dateEntry;
String year;
String month;
String day;
String hour;
String minute;

DateTime now = rtc.now();
year = String(now.year());
month = String(now.month());
day = String(now.date());

if(now.hour()<10)
{
    hour = "0"+String(now.hour());
}else
{
    hour = String(now.hour());
}

    if(now.minute()<10)
{
    minute = "0"+String(now.minute());
}else
{
    minute = String(now.minute());
}

dateEntry = month+"/"+day+"/"+year+" "+hour+":"+minute;
return dateEntry;
}

String readLight()
{
uint16_t lux = lightMeter.readLightLevel();
return String(lux);
}

String readPressure()
{
String pressure;
pressure = String(readPressureFromSensor());
return pressure;
}

void initializeSD()
{
pinMode(10, OUTPUT); // change this to 53 on a mega // don't follow this!!
digitalWrite(10, HIGH); // Add this line
if (SD.begin(CS_PIN))
{
    digitalWrite(ledPin,LOW);
} else
{
    digitalWrite(ledPin,LOW);
    delay(1000);
    digitalWrite(ledPin,HIGH);
    delay(1000);
     digitalWrite(ledPin,LOW);
    delay(1000);
    digitalWrite(ledPin,HIGH);
    return;
}
}

int openFileToWrite(char filename[])
{
file = SD.open(filename, FILE_WRITE);

if (file)
{
    digitalWrite(ledPin,HIGH);
    delay(200);
    digitalWrite(ledPin,LOW);
    delay(200);
    digitalWrite(ledPin,HIGH);
    delay(200);
    digitalWrite(ledPin,LOW);
    return 1;
} else
{
    return 0;
}
}

int writeToFile(String text)
{
if (file)
{
    file.println(text);
    return 1;
} else
{
    return 0;
}
}

void closeFile()
{
if (file)
{
    file.close();
}
}

void writeEntryToFile(String entry)
{
openFileToWrite("log.txt");
writeToFile(entry);
closeFile();
}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote