// string thing prototype // may 2005 ben dove // ben@bdove.net int MultPlex_val = 0; // the delay between switching the inputs on the multiplexer int MultPlex_delay = 1; int value1 = 0; int value2 = 0; int value3 = 0; int value4 = 0; int inpin1 = 0; int inpin2 = 1; int inpin3 = 2; int inpin4 = 3; int inpin5 = 4; int outpin1 = 0; int outpin2 = 1; int outpin3 = 2; int outpin4 = 3; int outpin5 = 24; int outpin6 = 25; int outpin7 = 26; int outpin8 = 27; int outpin9 = 28; int lastupdate = 0; // arrays for the last 10 values read from the capacitance sensors int index1 = 0; int values1[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; int index2 = 0; int values2[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; int index3 = 0; int values3[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; int index4 = 0; int values4[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; int Vib1 = 0; // value for the delay in switching the solenoids, determines rod vibration int Vib2 = 0; int Vib3 = 0; int Vib4 = 0; int switchPin1 = 8; // digital pin to attach the switch int switchPin2 = 9; int switchPin3 = 10; int switchPin4 = 11; int switchPin5 = 12; int switchPin6 = 13; int switchPin7 = 14; int switchPin8 = 15; int switchPin9 = 16; int switchPin10 = 17; int switchPin11 = 18; int switchPin12 = 19; int switch_value1 = 0; // initialise all digital pins int switch_value2 = 0; int switch_value3 = 0; int switch_value4 = 0; int switch_value5 = 0; int switch_value6 = 0; int switch_value7 = 0; int switch_value8 = 0; int switch_value9 = 0; int switch_value10 = 0; int switch_value11 = 0; int switch_value12 = 0; void setup() { beginSerial(19200); pinMode(outpin1, OUTPUT); pinMode(outpin2, OUTPUT); pinMode(outpin3, OUTPUT); pinMode(outpin4, OUTPUT); pinMode(outpin5, OUTPUT); pinMode(outpin6, OUTPUT); pinMode(outpin7, OUTPUT); pinMode(outpin8, OUTPUT); pinMode(outpin9, OUTPUT); digitalWrite(outpin5, LOW); digitalWrite(outpin6, LOW); digitalWrite(outpin7, LOW); digitalWrite(outpin8, LOW); digitalWrite(outpin9, LOW); pinMode(switchPin1, INPUT); } void loop() { Vib1 = 0; Vib2 = 0; Vib3 = 0; Vib4 = 0; value1 = analogRead(inpin1); // read the value of analog pin 1 value2 = analogRead(inpin2); // read the value of analog pin 2 value3 = analogRead(inpin3); // read the value of analog pin 3 value4 = analogRead(inpin4); // read the value of analog pin 4 delay (2); if(digitalRead(switchPin1) == HIGH){ switch_value1 = 0; }else{ switch_value1 = 1; } if(digitalRead(switchPin2) == HIGH){ switch_value2 = 0; }else{ switch_value2 = 1; } if(digitalRead(switchPin3) == HIGH){ switch_value3 = 0; }else{ switch_value3 = 1; } if(digitalRead(switchPin4) == HIGH){ switch_value4 = 0; }else{ switch_value4 = 1; } if(digitalRead(switchPin5) == HIGH){ switch_value5 = 0; }else{ switch_value5 = 1; } if(digitalRead(switchPin6) == HIGH){ switch_value6 = 0; }else{ switch_value6 = 1; } if(digitalRead(switchPin7) == HIGH){ switch_value7 = 0; }else{ switch_value7 = 1; } if(digitalRead(switchPin8) == HIGH){ switch_value8 = 0; }else{ switch_value8 = 1; } if(digitalRead(switchPin9) == HIGH){ switch_value9 = 0; }else{ switch_value9 = 1; } if(digitalRead(switchPin10) == HIGH){ switch_value10 = 0; }else{ switch_value10 = 1; } if(digitalRead(switchPin11) == HIGH){ switch_value11 = 0; }else{ switch_value11 = 1; } if(digitalRead(switchPin12) == HIGH){ switch_value12 = 0; }else{ switch_value12 = 1; } //delay(2); serialWrite(47); // send start serial header serialWrite(value1 / 4); // send value 1 serialWrite(value2 / 4); // send value 2 serialWrite(value3 / 4); // send value 3 serialWrite(value4 / 4); // send value 4 digitalWrite(outpin5, LOW); digitalWrite(outpin6, LOW); digitalWrite(outpin7, LOW); digitalWrite(outpin8, LOW); digitalWrite(outpin9, LOW); MultPlex_val = analogRead(inpin5); // read the value of analog pin 1 (value 5) serialWrite(MultPlex_val / 4); // write the scaled value to the serial port delay(MultPlex_delay); // start the multiplexer (analogue) reading digitalWrite(outpin5, HIGH); digitalWrite(outpin6, LOW); digitalWrite(outpin7, LOW); digitalWrite(outpin8, LOW); digitalWrite(outpin9, LOW); MultPlex_val = analogRead(inpin5); // read the value of analog pin 1 (value 6) serialWrite(MultPlex_val / 4); // write the scaled value to the serial port delay(MultPlex_delay); digitalWrite(outpin5, LOW); digitalWrite(outpin6, HIGH); digitalWrite(outpin7, LOW); digitalWrite(outpin8, LOW); digitalWrite(outpin9, LOW); MultPlex_val = analogRead(inpin5); // read the value of analog pin 1 (value 7) serialWrite(MultPlex_val / 4); // write the scaled value to the serial port delay(MultPlex_delay); digitalWrite(outpin5, HIGH); digitalWrite(outpin6, HIGH); digitalWrite(outpin7, LOW); digitalWrite(outpin8, LOW); digitalWrite(outpin9, LOW); MultPlex_val = analogRead(inpin5); // read the value of analog pin 1 (value 8) serialWrite(MultPlex_val / 4); // write the scaled value to the serial port delay(MultPlex_delay); digitalWrite(outpin5, LOW); digitalWrite(outpin6, LOW); digitalWrite(outpin7, HIGH); digitalWrite(outpin8, LOW); digitalWrite(outpin9, LOW); MultPlex_val = analogRead(inpin5); // read the value of analog pin 1 (value 9) serialWrite(MultPlex_val / 4); // write the scaled value to the serial port delay(MultPlex_delay); digitalWrite(outpin5, HIGH); digitalWrite(outpin6, LOW); digitalWrite(outpin7, HIGH); digitalWrite(outpin8, LOW); digitalWrite(outpin9, LOW); MultPlex_val = analogRead(inpin5); // read the value of analog pin 1 (value 10) serialWrite(MultPlex_val / 4); // write the scaled value to the serial port delay(MultPlex_delay); digitalWrite(outpin5, LOW); digitalWrite(outpin6, HIGH); digitalWrite(outpin7, HIGH); digitalWrite(outpin8, LOW); digitalWrite(outpin9, LOW); MultPlex_val = analogRead(inpin5); // read the value of analog pin 1 (value 11) serialWrite(MultPlex_val / 4); // write the scaled value to the serial port delay(MultPlex_delay); digitalWrite(outpin5, HIGH); digitalWrite(outpin6, HIGH); digitalWrite(outpin7, HIGH); digitalWrite(outpin8, LOW); digitalWrite(outpin9, LOW); MultPlex_val = analogRead(inpin5); // read the value of analog pin 1 (value 12) serialWrite(MultPlex_val / 4); // write the scaled value to the serial port // end of multiplexer reading serialWrite(switch_value1); // send value 13 serialWrite(switch_value2); // send value 14 serialWrite(switch_value3); // send value 15 serialWrite(switch_value4); // send value 16 serialWrite(switch_value5); // send value 17 serialWrite(switch_value6); // send value 18 serialWrite(switch_value7); // send value 19 serialWrite(switch_value8); // send value 20 serialWrite(switch_value9); // send value 21 serialWrite(switch_value10); // send value 22 serialWrite(switch_value11); // send value 23 serialWrite(switch_value12); // send value 24 serialWrite(48); // send serial end header // store the last 10 readings from each capacitance sensor, // in an array, to get an average, and gradual vibration // fade out when a rod is released if (millis() - lastupdate > 20){ values1[index1] = value1/30; index1 = index1 + 1; values2[index2] = value2/30; index2 = index2 + 1; values3[index3] = value3/30; index3 = index3 + 1; values4[index4] = value4/30; index4 = index4 + 1; if (index1 > 9) index1 = 0; if (index2 > 9) index2 = 0; if (index3 > 9) index3 = 0; if (index4 > 9) index4 = 0; lastupdate = millis(); } // cycle through the arrays of each capacitance value to // determine the vibration frequency/solenoid switching delay // using the last 10 readings in the arrays filled up before int n; for(n=0; n<10; n++) { Vib1 = Vib1 + values1[n]; Vib2 = Vib2 + values2[n]; Vib3 = Vib3 + values3[n]; Vib4 = Vib4 + values4[n]; } Vib1 = Vib1/20; Vib2 = Vib2/20; Vib3 = Vib3/20; Vib4 = Vib4/20; // make the solenoids switch on and off to vibrate the rods // reversed to fix solenoids sequence in the current prototype digitalWrite(outpin1, HIGH); delay(Vib4); digitalWrite(outpin1, LOW); delay(Vib4); digitalWrite(outpin2, HIGH); delay(Vib3); digitalWrite(outpin2, LOW); delay(Vib3); digitalWrite(outpin3, HIGH); delay(Vib2); digitalWrite(outpin3, LOW); delay(Vib2); digitalWrite(outpin4, HIGH); delay(Vib1); digitalWrite(outpin4, LOW); delay(Vib1); }