photon sketch for senior design
int btn_0 = A4;
int btn_1 = A3;
int btn_2 = A2;
int btn_3 = A1;
int btn_reset = A0;
int btn_reset_value = 0;
int btn_0_value = 0;
int btn_1_value = 0;
int btn_2_value = 0;
int btn_3_value = 0;
float btn_0_voltage = 0.00;
float btn_1_voltage = 0.00;
float btn_2_voltage = 0.00;
float btn_3_voltage = 0.00;
// find voltage conversion ratio for calculations
double v_ref = 3.0;
double input_res = 4095;
// voltage conversion ratio
float vcr = v_ref / input_res;
int green = D4;
int yellow = D3;
int red = D2;
int blue = D1;
int device_id;
char *fault_flag;
char *fault_name;
char *fault_channels;
String logic_fault_flag = "false";
String logic_fault_name = "nofault";
String logic_fault_channels = "000000";
String logic_previous_state = "000000";
String logic_in_01_flag = "0";
String previous_logic_in_01_flag = "0";
String logic_in_02_flag = "0";
String previous_logic_in_02_flag = "0";
String logic_in_03_flag = "0";
String previous_logic_in_03_flag = "0";
String logic_in_04_flag = "0";
String previous_logic_in_04_flag = "0";
String logic_in_05_flag = "0";
String previous_logic_in_05_flag = "0";
String logic_in_06_flag = "0";
String previous_logic_in_06_flag = "0";
char post_device_datum_murmuring[255];
// Working Yay!
char post_device_name[255];
const char device_name[] = "randomDeviceFourth";
int led2 = D7;
void setup() {
device_id = 2;
pinMode(led2, OUTPUT);
// set the pinmode for led pins as output
pinMode(red, OUTPUT);
pinMode(blue, OUTPUT);
pinMode(green, OUTPUT);
pinMode(yellow, OUTPUT);
sprintf(post_device_name, "{\"name\": \"%s\"}", device_name);
}
void loop() {
digitalWrite(led2, HIGH);
delay(3000);
digitalWrite(led2, LOW);
delay(250);
digitalWrite(led2, HIGH);
delay(1000);
digitalWrite(led2, LOW);
delay(250);
digitalWrite(led2, HIGH);
delay(500);
digitalWrite(led2, LOW);
delay(250);
digitalWrite(led2, HIGH);
delay(500);
digitalWrite(led2, LOW);
delay(250);
digitalWrite(led2, HIGH);
delay(250);
digitalWrite(led2, LOW);
delay(250);
digitalWrite(led2, HIGH);
delay(250);
digitalWrite(led2, LOW);
delay(250);
digitalWrite(led2, HIGH);
delay(250);
digitalWrite(led2, LOW);
delay(250);
digitalWrite(led2, HIGH);
delay(3000);
// get the state of the buttons
btn_0_value = analogRead(btn_0);
btn_1_value = analogRead(btn_1);
btn_2_value = analogRead(btn_2);
btn_3_value = analogRead(btn_3);
btn_reset_value = analogRead(btn_reset);
// calculate the voltage
btn_0_voltage = btn_0_value * vcr;
btn_1_voltage = btn_1_value * vcr;
btn_2_voltage = btn_2_value * vcr;
btn_3_voltage = btn_3_value * vcr;
// account for the reset button
if ( btn_reset_value > 500 ) {
digitalWrite(red, LOW);
digitalWrite(blue, LOW);
digitalWrite(green, LOW);
digitalWrite(yellow, LOW);
// reset individual flags
logic_in_01_flag = "0";
logic_in_02_flag = "0";
logic_in_03_flag = "0";
logic_in_04_flag = "0";
logic_in_05_flag = "0";
logic_in_06_flag = "0";
// reset main flag
logic_fault_flag = "false";
delay(250);
}
// if the first button is pressed, turn on/off LED
if (btn_0_value > 500) {
digitalWrite(green, HIGH);
Serial.print("Button 1, Green Fault!\n");
Serial.print("Value: ");
Serial.print(btn_0_value);
Serial.print("\nVoltage: ");
Serial.print(btn_0_voltage);
Serial.print("\n\n");
// set individual flag
logic_in_01_flag = "1";
}
// if the second button is pressed, turn on/off LED
if (btn_1_value > 500) {
digitalWrite(yellow, HIGH);
Serial.print("Button 2, Yellow Fault!\n");
Serial.print("Value: ");
Serial.print(btn_1_value);
Serial.print("\nVoltage: ");
Serial.print(btn_1_voltage);
Serial.print("\n\n");
// set individual flag
logic_in_02_flag = "1";
}
// if the third button is pressed, turn on/off LED
if (btn_2_value > 500) {
digitalWrite(red, HIGH);
Serial.print("Button 3, Red Fault!\n");
Serial.print("Value: ");
Serial.print(btn_2_value);
Serial.print("\nVoltage: ");
Serial.print(btn_2_voltage);
Serial.print("\n\n");
// set individual flag
logic_in_03_flag = "1";
}
// if the fourth button is pressed, turn on/off LED
if (btn_3_value > 500) {
digitalWrite(blue, HIGH);
Serial.print("Button 4, Blue Fault!\n");
Serial.print("Value: ");
Serial.print(btn_3_value);
Serial.print("\nVoltage: ");
Serial.print(btn_3_voltage);
Serial.print("\n\n");
// set individual flag
logic_in_04_flag = "1";
}
logic_fault_channels = logic_in_01_flag + logic_in_02_flag + logic_in_03_flag + logic_in_04_flag + logic_in_05_flag + logic_in_06_flag;
if (logic_previous_state != logic_fault_channels) {
Serial.print("Something changed, send a notification\n");
logic_previous_state = logic_fault_channels;
if (logic_fault_channels != "000000") {
logic_fault_flag = "true";
if (logic_in_01_flag == "1") {
if (previous_logic_in_01_flag != logic_in_01_flag) {
previous_logic_in_01_flag = logic_in_01_flag;
fault_flag = "true";
fault_name = "channel01";
fault_channels = "100000";
sprintf(post_device_datum_murmuring, "{\"flag\":\"%s\",\"name\":\"%s\",\"channels\":\"%s\",\"device_id\":%u}", fault_flag, fault_name, fault_channels, device_id);
Particle.publish("post_device_datum_murmuring", post_device_datum_murmuring, 60, PRIVATE);
Serial.print("channel1\n");
delay(1000);
}
}
if (logic_in_02_flag == "1") {
if (previous_logic_in_02_flag != logic_in_02_flag) {
previous_logic_in_02_flag = logic_in_02_flag;
fault_flag = "true";
fault_name = "channel02";
fault_channels = "010000";
sprintf(post_device_datum_murmuring, "{\"flag\":\"%s\",\"name\":\"%s\",\"channels\":\"%s\",\"device_id\":%u}", fault_flag, fault_name, fault_channels, device_id);
Particle.publish("post_device_datum_murmuring", post_device_datum_murmuring, 60, PRIVATE);
Serial.print("channel2\n");
delay(1000);
}
}
if (logic_in_03_flag == "1") {
if (previous_logic_in_03_flag != logic_in_03_flag) {
previous_logic_in_03_flag = logic_in_03_flag;
fault_flag = "true";
fault_name = "channel03";
fault_channels = "001000";
sprintf(post_device_datum_murmuring, "{\"flag\":\"%s\",\"name\":\"%s\",\"channels\":\"%s\",\"device_id\":%u}", fault_flag, fault_name, fault_channels, device_id);
Particle.publish("post_device_datum_murmuring", post_device_datum_murmuring, 60, PRIVATE);
Serial.print("channel3\n");
delay(1000);
}
}
if (logic_in_04_flag == "1") {
if (previous_logic_in_04_flag != logic_in_04_flag) {
previous_logic_in_04_flag = logic_in_04_flag;
fault_flag = "true";
fault_name = "channel04";
fault_channels = "000100";
sprintf(post_device_datum_murmuring, "{\"flag\":\"%s\",\"name\":\"%s\",\"channels\":\"%s\",\"device_id\":%u}", fault_flag, fault_name, fault_channels, device_id);
Particle.publish("post_device_datum_murmuring", post_device_datum_murmuring, 60, PRIVATE);
Serial.print("channel4\n");
delay(1000);
}
}
if (logic_in_05_flag == "1") {
if (previous_logic_in_05_flag != logic_in_05_flag) {
previous_logic_in_05_flag = logic_in_05_flag;
fault_flag = "true";
fault_name = "channel05";
fault_channels = "000010";
sprintf(post_device_datum_murmuring, "{\"flag\":\"%s\",\"name\":\"%s\",\"channels\":\"%s\",\"device_id\":%u}", fault_flag, fault_name, fault_channels, device_id);
Particle.publish("post_device_datum_murmuring", post_device_datum_murmuring, 60, PRIVATE);
Serial.print("channel5\n");
delay(1000);
}
}
if (logic_in_06_flag == "1") {
if (previous_logic_in_06_flag != logic_in_06_flag) {
previous_logic_in_06_flag = logic_in_06_flag;
fault_flag = "true";
fault_name = "channel06";
fault_channels = "000001";
sprintf(post_device_datum_murmuring, "{\"flag\":\"%s\",\"name\":\"%s\",\"channels\":\"%s\",\"device_id\":%u}", fault_flag, fault_name, fault_channels, device_id);
Particle.publish("post_device_datum_murmuring", post_device_datum_murmuring, 60, PRIVATE);
Serial.print("channel6\n");
delay(1000);
}
}
} else if (logic_fault_channels == "000000") {
logic_fault_flag = "false";
fault_flag = "false";
fault_name = "channel00";
fault_channels = "000000";
sprintf(post_device_datum_murmuring, "{\"flag\":\"%s\",\"name\":\"%s\",\"channels\":\"%s\",\"device_id\":%u}", fault_flag, fault_name, fault_channels, device_id);
Particle.publish("post_device_datum_murmuring", post_device_datum_murmuring, 60, PRIVATE);
Serial.print("channel0\n");
delay(1000);
}
Serial.print("Fault Flag: " + logic_fault_flag);
Serial.print("\n");
Serial.print("Fault Channels: " + logic_fault_channels);
Serial.print("\n");
} else {
Serial.print("no change in faults, no notification\n");
Serial.print("Fault Flag: " + logic_fault_flag);
Serial.print("\n");
Serial.print("Fault Channels: " + logic_fault_channels);
Serial.print("\n");
}
Serial.print("\n");
digitalWrite(led2, HIGH);
delay(150);
digitalWrite(led2, LOW);
delay(150);
digitalWrite(led2, HIGH);
delay(150);
digitalWrite(led2, LOW);
delay(150);
digitalWrite(led2, HIGH);
delay(150);
digitalWrite(led2, LOW);
delay(150);
digitalWrite(led2, HIGH);
delay(150);
digitalWrite(led2, LOW);
delay(150);
digitalWrite(led2, HIGH);
delay(150);
digitalWrite(led2, LOW);
delay(10000);
//Particle.publish("myfaults_post_device", post_device_name, 60, PRIVATE);
}
int btn_0 = A4;
int btn_1 = A3;
int btn_2 = A2;
int btn_3 = A1;
int btn_reset = A0;
int btn_reset_value = 0;
int btn_0_value = 0;
int btn_1_value = 0;
int btn_2_value = 0;
int btn_3_value = 0;
float btn_0_voltage = 0.00;
float btn_1_voltage = 0.00;
float btn_2_voltage = 0.00;
float btn_3_voltage = 0.00;
// find voltage conversion ratio for calculations
double v_ref = 3.0;
double input_res = 4095;
// voltage conversion ratio
float vcr = v_ref / input_res;
int green = D4;
int yellow = D3;
int red = D2;
int blue = D1;
int device_id;
char *fault_flag;
char *fault_name;
char *fault_channels;
String logic_fault_flag = "false";
String logic_fault_name = "nofault";
String logic_fault_channels = "000000";
String logic_previous_state = "000000";
String logic_in_01_flag = "0";
String previous_logic_in_01_flag = "0";
String logic_in_02_flag = "0";
String previous_logic_in_02_flag = "0";
String logic_in_03_flag = "0";
String previous_logic_in_03_flag = "0";
String logic_in_04_flag = "0";
String previous_logic_in_04_flag = "0";
String logic_in_05_flag = "0";
String previous_logic_in_05_flag = "0";
String logic_in_06_flag = "0";
String previous_logic_in_06_flag = "0";
char post_device_datum[255];
// Working Yay!
char post_device_name[255];
const char device_name[] = "randomDeviceFourth";
int led2 = D7;
void setup() {
device_id = 13;
pinMode(led2, OUTPUT);
// set the pinmode for led pins as output
pinMode(red, OUTPUT);
pinMode(blue, OUTPUT);
pinMode(green, OUTPUT);
pinMode(yellow, OUTPUT);
sprintf(post_device_name, "{\"name\": \"%s\"}", device_name);
}
void loop() {
digitalWrite(led2, HIGH);
delay(3000);
digitalWrite(led2, LOW);
delay(250);
digitalWrite(led2, HIGH);
delay(1000);
digitalWrite(led2, LOW);
delay(250);
digitalWrite(led2, HIGH);
delay(500);
digitalWrite(led2, LOW);
delay(250);
digitalWrite(led2, HIGH);
delay(500);
digitalWrite(led2, LOW);
delay(250);
digitalWrite(led2, HIGH);
delay(250);
digitalWrite(led2, LOW);
delay(250);
digitalWrite(led2, HIGH);
delay(250);
digitalWrite(led2, LOW);
delay(250);
digitalWrite(led2, HIGH);
delay(250);
digitalWrite(led2, LOW);
delay(250);
digitalWrite(led2, HIGH);
delay(3000);
// get the state of the buttons
btn_0_value = analogRead(btn_0);
btn_1_value = analogRead(btn_1);
btn_2_value = analogRead(btn_2);
btn_3_value = analogRead(btn_3);
btn_reset_value = analogRead(btn_reset);
// calculate the voltage
btn_0_voltage = btn_0_value * vcr;
btn_1_voltage = btn_1_value * vcr;
btn_2_voltage = btn_2_value * vcr;
btn_3_voltage = btn_3_value * vcr;
// account for the reset button
if ( btn_reset_value > 500 ) {
digitalWrite(red, LOW);
digitalWrite(blue, LOW);
digitalWrite(green, LOW);
digitalWrite(yellow, LOW);
// reset individual flags
logic_in_01_flag = "0";
logic_in_02_flag = "0";
logic_in_03_flag = "0";
logic_in_04_flag = "0";
logic_in_05_flag = "0";
logic_in_06_flag = "0";
// reset main flag
logic_fault_flag = "false";
delay(250);
}
// if the first button is pressed, turn on/off LED
if (btn_0_value > 500) {
digitalWrite(green, HIGH);
Serial.print("Button 1, Green Fault!\n");
Serial.print("Value: ");
Serial.print(btn_0_value);
Serial.print("\nVoltage: ");
Serial.print(btn_0_voltage);
Serial.print("\n\n");
// set individual flag
logic_in_01_flag = "1";
}
// if the second button is pressed, turn on/off LED
if (btn_1_value > 500) {
digitalWrite(yellow, HIGH);
Serial.print("Button 2, Yellow Fault!\n");
Serial.print("Value: ");
Serial.print(btn_1_value);
Serial.print("\nVoltage: ");
Serial.print(btn_1_voltage);
Serial.print("\n\n");
// set individual flag
logic_in_02_flag = "1";
}
// if the third button is pressed, turn on/off LED
if (btn_2_value > 500) {
digitalWrite(red, HIGH);
Serial.print("Button 3, Red Fault!\n");
Serial.print("Value: ");
Serial.print(btn_2_value);
Serial.print("\nVoltage: ");
Serial.print(btn_2_voltage);
Serial.print("\n\n");
// set individual flag
logic_in_03_flag = "1";
}
// if the fourth button is pressed, turn on/off LED
if (btn_3_value > 500) {
digitalWrite(blue, HIGH);
Serial.print("Button 4, Blue Fault!\n");
Serial.print("Value: ");
Serial.print(btn_3_value);
Serial.print("\nVoltage: ");
Serial.print(btn_3_voltage);
Serial.print("\n\n");
// set individual flag
logic_in_04_flag = "1";
}
logic_fault_channels = logic_in_01_flag + logic_in_02_flag + logic_in_03_flag + logic_in_04_flag + logic_in_05_flag + logic_in_06_flag;
if (logic_previous_state != logic_fault_channels) {
Serial.print("Something changed, send a notification\n");
logic_previous_state = logic_fault_channels;
if (logic_fault_channels != "000000") {
logic_fault_flag = "true";
if (logic_in_01_flag == "1") {
if (previous_logic_in_01_flag != logic_in_01_flag) {
previous_logic_in_01_flag = logic_in_01_flag;
fault_flag = "true";
fault_name = "channel01";
fault_channels = "100000";
sprintf(post_device_datum, "{\"flag\":\"%s\",\"name\":\"%s\",\"channels\":\"%s\",\"device_id\":%u}", fault_flag, fault_name, fault_channels, device_id);
Particle.publish("post_device_datum", post_device_datum, 60, PRIVATE);
Serial.print("channel1\n");
delay(1000);
}
}
if (logic_in_02_flag == "1") {
if (previous_logic_in_02_flag != logic_in_02_flag) {
previous_logic_in_02_flag = logic_in_02_flag;
fault_flag = "true";
fault_name = "channel02";
fault_channels = "010000";
sprintf(post_device_datum, "{\"flag\":\"%s\",\"name\":\"%s\",\"channels\":\"%s\",\"device_id\":%u}", fault_flag, fault_name, fault_channels, device_id);
Particle.publish("post_device_datum", post_device_datum, 60, PRIVATE);
Serial.print("channel2\n");
delay(1000);
}
}
if (logic_in_03_flag == "1") {
if (previous_logic_in_03_flag != logic_in_03_flag) {
previous_logic_in_03_flag = logic_in_03_flag;
fault_flag = "true";
fault_name = "channel03";
fault_channels = "001000";
sprintf(post_device_datum, "{\"flag\":\"%s\",\"name\":\"%s\",\"channels\":\"%s\",\"device_id\":%u}", fault_flag, fault_name, fault_channels, device_id);
Particle.publish("post_device_datum", post_device_datum, 60, PRIVATE);
Serial.print("channel3\n");
delay(1000);
}
}
if (logic_in_04_flag == "1") {
if (previous_logic_in_04_flag != logic_in_04_flag) {
previous_logic_in_04_flag = logic_in_04_flag;
fault_flag = "true";
fault_name = "channel04";
fault_channels = "000100";
sprintf(post_device_datum, "{\"flag\":\"%s\",\"name\":\"%s\",\"channels\":\"%s\",\"device_id\":%u}", fault_flag, fault_name, fault_channels, device_id);
Particle.publish("post_device_datum", post_device_datum, 60, PRIVATE);
Serial.print("channel4\n");
delay(1000);
}
}
if (logic_in_05_flag == "1") {
if (previous_logic_in_05_flag != logic_in_05_flag) {
previous_logic_in_05_flag = logic_in_05_flag;
fault_flag = "true";
fault_name = "channel05";
fault_channels = "000010";
sprintf(post_device_datum, "{\"flag\":\"%s\",\"name\":\"%s\",\"channels\":\"%s\",\"device_id\":%u}", fault_flag, fault_name, fault_channels, device_id);
Particle.publish("post_device_datum", post_device_datum, 60, PRIVATE);
Serial.print("channel5\n");
delay(1000);
}
}
if (logic_in_06_flag == "1") {
if (previous_logic_in_06_flag != logic_in_06_flag) {
previous_logic_in_06_flag = logic_in_06_flag;
fault_flag = "true";
fault_name = "channel06";
fault_channels = "000001";
sprintf(post_device_datum, "{\"flag\":\"%s\",\"name\":\"%s\",\"channels\":\"%s\",\"device_id\":%u}", fault_flag, fault_name, fault_channels, device_id);
Particle.publish("post_device_datum", post_device_datum, 60, PRIVATE);
Serial.print("channel6\n");
delay(1000);
}
}
} else if (logic_fault_channels == "000000") {
logic_fault_flag = "false";
fault_flag = "false";
fault_name = "channel00";
fault_channels = "000000";
sprintf(post_device_datum, "{\"flag\":\"%s\",\"name\":\"%s\",\"channels\":\"%s\",\"device_id\":%u}", fault_flag, fault_name, fault_channels, device_id);
Particle.publish("post_device_datum", post_device_datum, 60, PRIVATE);
Serial.print("channel0\n");
delay(1000);
}
Serial.print("Fault Flag: " + logic_fault_flag);
Serial.print("\n");
Serial.print("Fault Channels: " + logic_fault_channels);
Serial.print("\n");
} else {
Serial.print("no change in faults, no notification\n");
Serial.print("Fault Flag: " + logic_fault_flag);
Serial.print("\n");
Serial.print("Fault Channels: " + logic_fault_channels);
Serial.print("\n");
}
Serial.print("\n");
digitalWrite(led2, HIGH);
delay(150);
digitalWrite(led2, LOW);
delay(150);
digitalWrite(led2, HIGH);
delay(150);
digitalWrite(led2, LOW);
delay(150);
digitalWrite(led2, HIGH);
delay(150);
digitalWrite(led2, LOW);
delay(150);
digitalWrite(led2, HIGH);
delay(150);
digitalWrite(led2, LOW);
delay(150);
digitalWrite(led2, HIGH);
delay(150);
digitalWrite(led2, LOW);
delay(10000);
//Particle.publish("myfaults_post_device", post_device_name, 60, PRIVATE);
}