Networking is sharing
#include <DHT.h>
#include <DHT_U.h>
#include <Servo.h>
#define DHTTYPE DHT11
#define DHT0PIN 5
#define DHT1PIN 6
#define DHT2PIN 7
#define SERVO0PIN 10
#define SERVO1PIN 9
#define SERVO2PIN 8
#define PHOTO0PIN A0
#define PHOTO1PIN A1
#define PHOTO2PIN A2
#define BUTTON0PIN 2
#define BUTTON1PIN 3
#define BUTTON2PIN 4
Servo mservo;
DHT dht2(DHT2PIN, DHTTYPE);
String inputString = ""; // a string to hold incoming data
boolean stringComplete = false; // whether the string is complete
void setup() {
// initialize serial:
Serial.begin(9600);
mservo.attach(SERVO0PIN);
dht2.begin();
// reserve 200 bytes for the inputString:
inputString.reserve(200);
}
void loop() {
if (stringComplete) {
switch (inputString.charAt(0)) {
case 'S':
setServo(inputString);
break;
default:
break;
}
inputString = "";
stringComplete = false;
}
}
void setServo(String command) {
int pos = command.substring(1).toInt();
mservo.write(pos);
delay(1000);
}
float oldH;
float oldT;
void readDHT() {
float h = dht2.readHumidity();
float t = dht2.readTemperature();
if (isnan(h) || isnan(t)) {
}
else {
if (h != oldH) {
Serial.print("H");
Serial.println(h);
oldH = h;
}
if (t != oldT) {
Serial.print("T");
Serial.println(t);
oldT = t;
}
}
}
void serialEvent() {
while (Serial.available()) {
// get the new byte:
char inChar = (char)Serial.read();
// add it to the inputString:
inputString += inChar;
// if the incoming character is a newline, set a flag
// so the main loop can do something about it:
if (inChar == '\n') {
stringComplete = true;
}
}
}
#define GPIN 2
#define RPIN 11
String inputString = ""; // a string to hold incoming data
boolean stringComplete = false; // whether the string is complete
int prevVal;
void setup() {
// initialize serial:
Serial.begin(9600);
// reserve 200 bytes for the inputString:
inputString.reserve(1);
pinMode(GPIN, OUTPUT);
pinMode(RPIN, OUTPUT);
digitalWrite(RPIN, LOW);
digitalWrite(GPIN, LOW);
prevVal = 0;
}
void loop() {
// print the string when a newline arrives:
//Serial.println("test");
if (stringComplete) {
Serial.println(inputString);
switch(inputString.charAt(0)){
case 'H':
break;
case 'T':
ledTemp(inputString);
break;
}
// clear the string:
inputString = "";
stringComplete = false;
}
int val;
val = analogRead(A0);
if(val != prevVal) {
prevVal = val;
val = map(val, 0, 1023, 0, 180);
Serial.print("S");
Serial.println(val);
}
}
void ledTemp(String s) {
int temp = s.substring(1).toInt();
analogWrite(RPIN, map(temp, 20, 40, 0, 1023));
}
void serialEvent() {
while (Serial.available()) {
// get the new byte:
char inChar = (char)Serial.read();
inputString += inChar;
if (inChar == '\n') {
stringComplete = true;
}
}
}
#include <DHT.h>
#include <Servo.h>
#define DHTTYPE DHT11
#define DHT0PIN 7
#define DHT1PIN 6
#define DHT2PIN 5
#define SERVO0PIN 10
#define SERVO1PIN 9
#define SERVO2PIN 8
#define PHOTO0PIN A0
#define PHOTO1PIN A1
#define PHOTO2PIN A2
#define BUTTON0PIN 2
#define BUTTON1PIN 3
#define BUTTON2PIN 4
#define TIMER_PERIOD 200
#define SERVOANGLEOPEN 10
#define SERVOANGLECLOSE 160
#define SERVOANGLEDEFAULT 90
int Temp = 30;
int Hyst = 1;
DHT dht0(DHT0PIN, DHTTYPE);
DHT dht1(DHT1PIN, DHTTYPE);
DHT dht2(DHT2PIN, DHTTYPE);
DHT dht[] = {dht0, dht1, dht2};
Servo s0;
Servo s1;
Servo s2;
Servo s[] = {s0, s1, s2};
int sPin[] = {SERVO0PIN, SERVO1PIN, SERVO2PIN};
int sValues[] = {SERVOANGLEDEFAULT, SERVOANGLEDEFAULT, SERVOANGLEDEFAULT};
float te[] = {0, 0, 0};
float hu[] = {0, 0, 0};
char photoPin[] = {PHOTO0PIN, PHOTO1PIN, PHOTO2PIN};
char buttonPin[] = {BUTTON0PIN, BUTTON1PIN, BUTTON2PIN};
int interruptCounter = 0;
String inputString = "";
boolean stringComplete = false;
void setup() {
setupDHT();
//setupServo();
setupButton();
inputString.reserve(200);
Serial.begin(9600);
}
void setupDHT() {
dht0.begin();
dht1.begin();
dht2.begin();
}
/* void setupServo() {
s0.attach(SERVO0PIN);
s1.attach(SERVO1PIN);
s2.attach(SERVO2PIN);
}*/
void setupButton() {
pinMode(BUTTON0PIN, INPUT);
pinMode(BUTTON1PIN, INPUT);
pinMode(BUTTON2PIN, INPUT);
}
void loop() {
delay(10);
// put your main code here, to run repeatedly:
if (stringComplete) {
processSerial(inputString);
inputString = "";
stringComplete = false;
}
interruptCounter++;
if (interruptCounter > TIMER_PERIOD) {
interruptCounter = 0;
for(int i = 0; i < 3 ; i++ ) {
float t = readTemp(i);
float h = readHumid(i);
if (!isnan(h) && !isnan(t)) {
hu[i] = h;
te[i] = t;
}
}
}
/* for(int z = 0; z < 3; z++) {
checkTemp(z);
}*/
}
//Hysteresis. At 31° => Open door. At 29° => Close door
void checkTemp(int moduleNumber) {
if(te[moduleNumber] >= Temp + Hyst) { // Changer signe
if(readServoAngle(moduleNumber) != SERVOANGLEOPEN) {
moveServo(moduleNumber, SERVOANGLEOPEN);
}
}
else {
if(te[moduleNumber] <= Temp - Hyst) {
if(readServoAngle(moduleNumber) != SERVOANGLECLOSE) {
moveServo(moduleNumber, SERVOANGLECLOSE);
}
}
}
}
void processSerial(String serialString) {
switch (serialString.charAt(0)) {
case 'M':
processModuleCommand(serialString);
break;
default:
break;
}
}
void processModuleCommand(String serialString) {
int moduleNumber = serialString.substring(1).toInt();
String command = getNextPart(serialString,':');
switch (command.charAt(0)) {
case 'S':
sendModuleStatus(moduleNumber);
break;
case 'D':
handleDoor(moduleNumber, command);
break;
case 'P':
moveServoCommand(moduleNumber, command);
break;
default:
break;
}
}
/*
* M0: => Selection Module (M : Module; 0,1,2 : Module 0,1,2)
*
* S => Status : M0>D1/T20/H90/L95/S120/B1 (D : Door 1Open/0Closed, T : Temp, H: Humidity, L: Luminosity, S: Servo °, B : Button 1Open/0Closed)
* D1 => Open Door
* D0 => Close Door
*/
void sendModuleStatus(int moduleNumber) {
int l = readLuminosity(moduleNumber);
int sa = readServoAngle(moduleNumber);
int b = readButton(moduleNumber);
Serial.print("M");
Serial.print(moduleNumber);
Serial.print(">T");
Serial.print(te[moduleNumber]);
Serial.print("/H");
Serial.print(hu[moduleNumber]);
Serial.print("/L");
Serial.print(l);
Serial.print("/S");
Serial.print(sa);
Serial.print("/B");
Serial.println(b);
}
float readTemp(int moduleNumber) {
return dht[moduleNumber].readTemperature();
}
float readHumid(int moduleNumber) {
return dht[moduleNumber].readHumidity();
}
int readLuminosity(int moduleNumber) {
int sVal = analogRead(photoPin[moduleNumber]);
int percent = sVal * (100 / 1023);
return sVal;
}
int readServoAngle(int moduleNumber) {
return sValues[moduleNumber];
}
int readButton(int moduleNumber) {
return digitalRead(buttonPin[moduleNumber]);
}
void handleDoor(int moduleNumber, String command) {
int oc = command.substring(1).toInt();
if(oc < 1) {
moveServo(moduleNumber, SERVOANGLECLOSE);
}
else {
moveServo(moduleNumber, SERVOANGLEOPEN);
}
}
void moveServoCommand(int moduleNumber, String command) {
int angle = command.substring(1).toInt();
moveServo(moduleNumber, angle);
}
void moveServo(int moduleNumber, int angle) {
sValues[moduleNumber] = angle;
s[moduleNumber].attach(sPin[moduleNumber]);
s[moduleNumber].write(angle);
delay(1000);
s[moduleNumber].detach();
}
//Cut the string at the specified length and return the right side.
String getNextPart(String s, char separator) {
for(int i = 0; i < s.length(); i++) {
if(s[i] == separator) {
return s.substring(i+1);
}
}
return "";
}
void serialEvent() {
while (Serial.available()) {
// get the new byte:
char inChar = (char)Serial.read();
// add it to the inputString:
inputString += inChar;
// if the incoming character is a newline, set a flag
// so the main loop can do something about it:
if (inChar == '\n') {
Serial.println(inputString);
stringComplete = true;
}
}
}
#include <SoftwareSerial.h>
#define BUTTONPIN 8
#define LEDPIN 2
SoftwareSerial mySerial(0, 1); // RX, TX
boolean openclose = true;
int buttonState;
int lastButtonState = LOW;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
void setup() {
// set the data rate for the SoftwareSerial port
mySerial.begin(9600);
pinMode(BUTTONPIN, INPUT);
pinMode(LEDPIN, OUTPUT);
digitalWrite(LEDPIN, LOW);
}
void loop() { // run over and over
int reading = digitalRead(BUTTONPIN);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == HIGH) {
setDoor();
}
}
}
lastButtonState = reading;
}
void setDoor() {
if(openclose) {
digitalWrite(LEDPIN, HIGH);
mySerial.write("M0:D0\n");
openclose = false;
}
else {
if(!openclose) {
digitalWrite(LEDPIN, LOW);
mySerial.write("M0:D1\n");
openclose = true;
}
}
}
It was a litlle complex when so few connectors available but it worked, see below! Summary :
This assignment was really nice and was a huge chunk of the electronic work I will have to make for my final project