You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
358 lines
12 KiB
Arduino
358 lines
12 KiB
Arduino
1 year ago
|
/*
|
||
|
WEAVER
|
||
|
// board info: LilyGO TTGO T8 ESP32-S2 - with SD Card Slot
|
||
|
// board select: ESP32S2 DEV Module
|
||
|
|
||
|
current USB port: 142300
|
||
|
|
||
|
|
||
|
|
||
|
TO DO
|
||
|
define pins for all the inputs!
|
||
|
fix socket part
|
||
|
redefine range for leftover parameters?
|
||
|
*/
|
||
|
|
||
|
|
||
|
#define socketSensorOut1 45 // PCB: 8 //socket1 out
|
||
|
#define socketSensorOut2 42 // PCB: 16 // socket2
|
||
|
#define socketSensorOut3 40 // PCB: 7 // socket3
|
||
|
#define socketSensorOut4 41 // PCB: 15 // socket4
|
||
|
|
||
|
#define socketSensorIn1 45 // PCB: 8 // socket1 in
|
||
|
#define socketSensorIn2 42 // PCB: 16 // socket2
|
||
|
#define socketSensorIn3 40 // PCB: 7 // socket3
|
||
|
#define socketSensorIn4 41 // PCB: 15 // socket4
|
||
|
|
||
|
#define sensor1 1 // PCB: 46 // potentiometer: pattern1_1
|
||
|
#define sensor2 2 // PCB: 37 // potentiometer: pattern1_2
|
||
|
#define sensor3 3 // PCB: 36 // potentiometer: pattern1_3
|
||
|
#define sensor5 4 // PCB: 45 // potentiometer: pattern2_1
|
||
|
#define sensor6 5 // PCB: 38 // potentiometer: pattern2_2
|
||
|
#define sensor7 6 // PCB: 35 // potentiometer: pattern2_3
|
||
|
#define sensor9 7 // PCB: 42 // potentiometer: pattern3_1
|
||
|
#define sensor10 8 // PCB: 39 // potentiometer: pattern3_2
|
||
|
#define sensor11 16 // PCB: 34 // potentiometer: pattern3_3
|
||
|
#define sensor13 15 // PCB: 41 // potentiometer: pattern4_1
|
||
|
#define sensor14 20 // PCB: 40 // potentiometer: pattern4_2
|
||
|
#define sensor15 19 // PCB: 33 // potentiometer: pattern4_3
|
||
|
|
||
|
#define sensor21 13 // PCB: 13 // potentiometer: patternFactor (*each position in pattern)
|
||
|
#define sensor22 12 // PCB: 12 // potentiometer: patchFactor (*each pattern in patch)
|
||
|
#define sensor23 11 // PCB: 11 // potentiometer: patchworkFactor (*patch)
|
||
|
#define sensorLED 0 // PCB: 0 // LED
|
||
|
|
||
|
|
||
|
String pattern1 = "";
|
||
|
String pattern2 = "";
|
||
|
String pattern3 = "";
|
||
|
String pattern4 = "";
|
||
|
|
||
|
String patch1 = "";
|
||
|
String patch2 = "";
|
||
|
|
||
|
int socketOutput[] = {socketSensorOut1, socketSensorOut2, socketSensorOut3, socketSensorOut4};
|
||
|
int socketInput[] = {socketSensorIn1, socketSensorIn2, socketSensorIn3, socketSensorIn4};
|
||
|
|
||
|
|
||
|
|
||
|
String input;
|
||
|
String newData;
|
||
|
String output;
|
||
|
String moduleID = "#WV";
|
||
|
|
||
|
|
||
|
// the setup routine runs once when you press reset:
|
||
|
void setup() {
|
||
|
// initialize serial and serial1 communication at 115200 and 9600 bits per second:
|
||
|
Serial.begin(115200); //goes to serial monitor, just for debugging purposes
|
||
|
Serial1.begin(9600); // goes to the next module via patch cable (use transmit pin TX on IO17 and also connect to GND)
|
||
|
|
||
|
Serial1.setTimeout(100); // there is a small bug, so there needs to be a checksum?
|
||
|
|
||
|
// set mode for digital input to not give floating values, but either 0 or 1:
|
||
|
pinMode(sensorLED, OUTPUT); // set LED pin to output
|
||
|
//LED initial state
|
||
|
digitalWrite(sensorLED, LOW);
|
||
|
|
||
|
digitalWrite(socketSensorOut1, LOW);
|
||
|
digitalWrite(socketSensorOut2, LOW);
|
||
|
digitalWrite(socketSensorOut3, LOW);
|
||
|
digitalWrite(socketSensorOut4, LOW);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
// the loop routine runs over and over again forever:
|
||
|
void loop() {
|
||
|
|
||
|
|
||
|
// sensor 1: pattern1_1
|
||
|
// read analog input
|
||
|
int sensorValue1 = analogRead(sensor1);
|
||
|
// redefine range for font:
|
||
|
int value1 = map(sensorValue1, 0, 8191, 400, 1);
|
||
|
// use value1 to define first position of pattern1: not get int but string with pattern1.1:
|
||
|
String pattern1_1 = "";
|
||
|
if(value1 >= 1 && value1 < 2) {pattern1_1 = "a";} // if value1 is bigger than or equal to 1 and value1 is smaller than or equal to 100: a
|
||
|
else if(value1 >= 2 && value1 <= 245) {pattern1_1 = "b";} // else if value1 is bigger than or equal to 101 and value1 is smaller than or equal to 200: b
|
||
|
else if(value1 >= 246 && value1 <= 397) {pattern1_1 = "c";}
|
||
|
else if(value1 >= 398 && value1 <= 400) {pattern1_1 = "d";}
|
||
|
|
||
|
// sensor 2: pattern1_2
|
||
|
int sensorValue2 = analogRead(sensor2);
|
||
|
int value2 = map(sensorValue2, 0, 8191, 400, 1);
|
||
|
String pattern1_2 = "";
|
||
|
if(value2 >= 1 && value2 < 2) {pattern1_2 = "a";}
|
||
|
else if(value2 >= 2 && value2 <= 245) {pattern1_2 = "b";}
|
||
|
else if(value2 >= 246 && value2 <= 397) {pattern1_2 = "c";}
|
||
|
else if(value2 >= 398 && value2 <= 400) {pattern1_2 = "d";}
|
||
|
|
||
|
// sensor 3: pattern1_3
|
||
|
int sensorValue3 = analogRead(sensor3);
|
||
|
int value3 = map(sensorValue3, 0, 8191, 400, 1);
|
||
|
String pattern1_3 = "";
|
||
|
if(value3 >= 1 && value3 < 2) {pattern1_3 = "a";}
|
||
|
else if(value3 >= 2 && value3 <= 245) {pattern1_3 = "b";}
|
||
|
else if(value3 >= 246 && value3 <= 397) {pattern1_3 = "c";}
|
||
|
else if(value3 >= 398 && value3 <= 400) {pattern1_3 = "d";}
|
||
|
|
||
|
// sensor 5: pattern2_1
|
||
|
int sensorValue5 = analogRead(sensor5);
|
||
|
int value5 = map(sensorValue5, 0, 8191, 400, 1);
|
||
|
String pattern2_1 = "";
|
||
|
if(value5 >= 1 && value5 < 2) {pattern2_1 = "a";}
|
||
|
else if(value5 >= 2 && value5 <= 245) {pattern2_1 = "b";}
|
||
|
else if(value5 >= 246 && value5 <= 397) {pattern2_1 = "c";}
|
||
|
else if(value5 >= 398 && value5 <= 400) {pattern2_1 = "d";}
|
||
|
|
||
|
// sensor 6: pattern2_2
|
||
|
int sensorValue6 = analogRead(sensor6);
|
||
|
int value6 = map(sensorValue6, 0, 8191, 400, 1);
|
||
|
String pattern2_2 = "";
|
||
|
if(value6 >= 1 && value6 < 2) {pattern2_2 = "a";}
|
||
|
else if(value6 >= 2 && value6 <= 245) {pattern2_2 = "b";}
|
||
|
else if(value6 >= 246 && value6 <= 397) {pattern2_2 = "c";}
|
||
|
else if(value6 >= 398 && value6 <= 400) {pattern2_2 = "d";}
|
||
|
|
||
|
// sensor 7: pattern2_3
|
||
|
int sensorValue7 = analogRead(sensor7);
|
||
|
int value7 = map(sensorValue7, 0, 8191, 400, 1);
|
||
|
String pattern2_3 = "";
|
||
|
if(value7 >= 1 && value7 < 2) {pattern2_3 = "a";}
|
||
|
else if(value7 >= 2 && value7 <= 245) {pattern2_3 = "b";}
|
||
|
else if(value7 >= 246 && value7 <= 397) {pattern2_3 = "c";}
|
||
|
else if(value7 >= 398 && value7 <= 400) {pattern2_3 = "d";}
|
||
|
|
||
|
// sensor 9: pattern3_1
|
||
|
int sensorValue9 = analogRead(sensor9);
|
||
|
int value9 = map(sensorValue9, 0, 8191, 400, 1);
|
||
|
String pattern3_1 = "";
|
||
|
if(value9 >= 1 && value9 < 2) {pattern3_1 = "a";}
|
||
|
else if(value9 >= 2 && value9 <= 245) {pattern3_1 = "b";}
|
||
|
else if(value9 >= 246 && value9 <= 397) {pattern3_1 = "c";}
|
||
|
else if(value9 >= 398 && value9 <= 400) {pattern3_1 = "d";}
|
||
|
|
||
|
// sensor 10: pattern3_2
|
||
|
int sensorValue10 = analogRead(sensor10);
|
||
|
int value10 = map(sensorValue10, 0, 8191, 400, 1);
|
||
|
String pattern3_2 = "";
|
||
|
if(value10 >= 1 && value10 < 2) {pattern3_2 = "a";}
|
||
|
else if(value10 >= 2 && value10 <= 245) {pattern3_2 = "b";}
|
||
|
else if(value10 >= 246 && value10 <= 397) {pattern3_2 = "c";}
|
||
|
else if(value10 >= 398 && value10 <= 400) {pattern3_2 = "d";}
|
||
|
|
||
|
// sensor 11: pattern3_3
|
||
|
int sensorValue11 = analogRead(sensor11);
|
||
|
int value11 = map(sensorValue11, 0, 8191, 400, 1);
|
||
|
String pattern3_3 = "";
|
||
|
if(value11 >= 1 && value11 < 2) {pattern3_3 = "a";}
|
||
|
else if(value11 >= 2 && value11 <= 245) {pattern3_3 = "b";}
|
||
|
else if(value11 >= 246 && value11 <= 397) {pattern3_3 = "c";}
|
||
|
else if(value11 >= 398 && value11 <= 400) {pattern3_3 = "d";}
|
||
|
|
||
|
// sensor 13: pattern4_1
|
||
|
int sensorValue13 = analogRead(sensor13);
|
||
|
int value13 = map(sensorValue13, 0, 8191, 400, 1);
|
||
|
String pattern4_1 = "";
|
||
|
if(value13 >= 1 && value13 < 2) {pattern4_1 = "a";}
|
||
|
else if(value13 >= 2 && value13 <= 245) {pattern4_1 = "b";}
|
||
|
else if(value13 >= 246 && value13 <= 397) {pattern4_1 = "c";}
|
||
|
else if(value13 >= 398 && value13 <= 400) {pattern4_1 = "d";}
|
||
|
|
||
|
// sensor 14: pattern4_2
|
||
|
int sensorValue14 = analogRead(sensor14);
|
||
|
int value14 = map(sensorValue14, 0, 8191, 400, 1);
|
||
|
String pattern4_2 = "";
|
||
|
if(value14 >= 1 && value14 < 2) {pattern4_2 = "a";}
|
||
|
else if(value14 >= 2 && value14 <= 245) {pattern4_2 = "b";}
|
||
|
else if(value14 >= 246 && value14 <= 397) {pattern4_2 = "c";}
|
||
|
else if(value14 >= 398 && value14 <= 400) {pattern4_2 = "d";}
|
||
|
|
||
|
// sensor 15: pattern4_3
|
||
|
int sensorValue15 = analogRead(sensor15);
|
||
|
int value15 = map(sensorValue15, 0, 8191, 400, 1);
|
||
|
String pattern4_3 = "";
|
||
|
if(value15 >= 1 && value15 < 2) {pattern4_3 = "a";}
|
||
|
else if(value15 >= 2 && value15 <= 245) {pattern4_3 = "b";}
|
||
|
else if(value15 >= 246 && value15 <= 397) {pattern4_3 = "c";}
|
||
|
else if(value15 >= 398 && value15 <= 400) {pattern4_3 = "d";}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
// now generate patterns 1 - 4
|
||
|
pattern1 = String(pattern1_1) + String(pattern1_2) + String(pattern1_3);
|
||
|
pattern2 = String(pattern2_1) + String(pattern2_2) + String(pattern2_3);
|
||
|
pattern3 = String(pattern3_1) + String(pattern3_2) + String(pattern3_3);
|
||
|
pattern4 = String(pattern4_1) + String(pattern4_2) + String(pattern4_3);
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
String container = "";
|
||
|
for (int i=0; i<4; i++) { //int starts at 0 and counts up to length of output)
|
||
|
|
||
|
pinMode(socketOutput[i], OUTPUT);
|
||
|
digitalWrite(socketOutput[i], LOW); //turn digital writes to HIGH
|
||
|
for (int o=0; o<4; o++) {
|
||
|
if (i!= o) {
|
||
|
pinMode(socketInput[o], INPUT);
|
||
|
pinMode(socketInput[o], INPUT_PULLUP);
|
||
|
bool state = digitalRead(socketInput[o]);
|
||
|
//Serial.println(state);
|
||
|
if (state==LOW){ //if one of the inputs is high, it is connected to this output
|
||
|
//Serial.println("pair:"+ String(i+1)+ String(o+1));
|
||
|
String pair = String(i+1)+ String(o+1);
|
||
|
//Serial.println(pair);
|
||
|
container = container + pair;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
digitalWrite(socketOutput[i], HIGH);
|
||
|
|
||
|
}
|
||
|
|
||
|
Serial.println(container);
|
||
|
if (container == "1221") {
|
||
|
patch1 = pattern1 + pattern2;
|
||
|
patch2 = pattern2 + pattern1;
|
||
|
}
|
||
|
else if (container == "1331") {
|
||
|
patch1 = pattern1 + pattern3;
|
||
|
patch2 = pattern3 + pattern1;
|
||
|
}
|
||
|
else if (container == "1441") {
|
||
|
patch1 = pattern1 + pattern4;
|
||
|
patch2 = pattern4 + pattern1;
|
||
|
}
|
||
|
else if (container == "2332") {
|
||
|
patch1 = pattern2 + pattern3;
|
||
|
patch2 = pattern3 + pattern2;
|
||
|
}
|
||
|
else if (container == "2442") {
|
||
|
patch1 = pattern2 + pattern4;
|
||
|
patch2 = pattern4 + pattern2;
|
||
|
}
|
||
|
else if (container == "3443") {
|
||
|
patch1 = pattern3 + pattern4;
|
||
|
patch2 = pattern4 + pattern3;
|
||
|
}
|
||
|
else if (container == "12213443") {
|
||
|
patch1 = pattern1 + pattern2;
|
||
|
patch2 = pattern3 + pattern4;
|
||
|
}
|
||
|
else if (container == "13243142") {
|
||
|
patch1 = pattern1 + pattern3;
|
||
|
patch2 = pattern2 + pattern4;
|
||
|
}
|
||
|
else if (container == "14233241") {
|
||
|
patch1 = pattern1 + pattern4;
|
||
|
patch2 = pattern2 + pattern3;
|
||
|
}
|
||
|
else if (container == "") {
|
||
|
patch1 = "";
|
||
|
patch2 = "";
|
||
|
Serial.println("no patch");
|
||
|
}
|
||
|
container = "";
|
||
|
|
||
|
Serial.println(String(patch1) + String(patch2));
|
||
|
|
||
|
|
||
|
// now read leftover parameters
|
||
|
|
||
|
//sensor21: patternFactor (*each position in pattern)
|
||
|
// read analog input
|
||
|
int sensorValue21 = analogRead(sensor21);
|
||
|
// redefine range:
|
||
|
int value21 = map(sensorValue21, 0, 8191, 8191, 0);
|
||
|
int patternFactor = 0;
|
||
|
if(value21 >= 0 && value21 < 1) {patternFactor = 1;}
|
||
|
else if(value21 >= 1 && value21 <= 3300) {patternFactor = 2;}
|
||
|
else if(value21 >= 3301 && value21 <= 8000) {patternFactor = 3;}
|
||
|
else if(value21 >= 8001 && value21 <= 8191) {patternFactor = 4;}
|
||
|
|
||
|
|
||
|
//sensor22: patchFactor (*each pattern in patch)
|
||
|
// read analog input
|
||
|
int sensorValue22 = analogRead(sensor22);
|
||
|
// redefine range:
|
||
|
int value22 = map(sensorValue22, 0, 8191, 8191, 0);
|
||
|
int patchFactor = 0;
|
||
|
if(value22 >= 0 && value22 < 1) {patchFactor = 1;}
|
||
|
else if(value22 >= 1 && value22 <= 3300) {patchFactor = 2;}
|
||
|
else if(value22 >= 3301 && value22 <= 8000) {patchFactor = 3;}
|
||
|
else if(value22 >= 8001 && value22 <= 8191) {patchFactor = 4;}
|
||
|
|
||
|
|
||
|
|
||
|
//sensor23: patchworkFactor (*patch)
|
||
|
// read analog input
|
||
|
int sensorValue23 = analogRead(sensor23);
|
||
|
// redefine range:
|
||
|
int patchworkFactor = map(sensorValue23, 0, 8191, 15, 1);
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
String all_parameters = "&&&" + String(moduleID) + "," + String(pattern1_1) + "," + String(pattern1_2) + "," + String(pattern1_3) + "," + String(pattern2_1) + "," + String(pattern2_2) + "," + String(pattern2_3) + "," + String(pattern3_1) + "," + String(pattern3_2) + "," + String(pattern3_3) + "," + String(pattern4_1) + "," + String(pattern4_2) + "," + String(pattern4_3) + "," + String(patch1) + "," + String(patch2) + "," + String(patternFactor) + "," + String(patchFactor) + "," + String(patchworkFactor) + "&&&";
|
||
|
Serial.println(all_parameters);
|
||
|
|
||
|
|
||
|
//put all the above values in a string to define the new data from this module:
|
||
|
newData = "&&&" + String(moduleID) + "," + String(patch1) + "," + String(patch2) + "," + String(patternFactor) + "," + String(patchFactor) + "," + String(patchworkFactor) + "&&&";
|
||
|
|
||
|
|
||
|
|
||
|
//Receive data from previous module (RX):
|
||
|
input = Serial1.readStringUntil('\n'); // read received data until line break and store in input variable
|
||
|
|
||
|
//LED
|
||
|
if (input != "") {
|
||
|
digitalWrite(sensorLED, HIGH); //turn LED on
|
||
|
}
|
||
|
else {
|
||
|
digitalWrite(sensorLED, LOW); //turn LED off
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
output = input + newData;
|
||
|
|
||
|
//Send data to next module (TX):
|
||
|
Serial1.println(output); //the data received + new data
|
||
|
|
||
|
//Print data on Serial Monitor:
|
||
|
Serial.println("This is the input I received: " + input);
|
||
|
Serial.println("Weaver, new data: " + newData);
|
||
|
Serial.println("This is the output I send: " + output);
|
||
|
|
||
|
|
||
|
}
|