/******************************************************************************* EPM Board Verification Test Software 2017-06-16 J. Belicki Samples one EPM Enter in distance and number of Samples Pulse long and short, prints to serial monitor , , , *******************************************************************************/ // EPM SN, Change for each test! int EPM1_SN = 7; int EPM2_SN = 11; int EPM3_SN = 18; // Pinouts on board const int EPM1 = 5; const int EPM2 = 4; const int EPM3 = 3; const int ReadPin1 = A9; const int ReadPin2 = A8; const int ReadPin3 = A7; const int MagCtrl = 14; // Set number of bits for ADC resolution const int Resolution = 13; // Waveform timing, in microseconds const int PulseWait = 500; const int PulseDelay = 10000; const int ADCWait = 900; const int PulseEnd = 50; const int ResetDelay = 5000; // Number of times to sample EPM int Samples = 1000; int Read1; int Read2; int Read3; // EPM1 float ReadShort1; int ReadShort1_1; int ReadShort1_2; int ReadShort1_3; int ReadShort1_4; int ReadShort1_5; float ReadLong1; int ReadLong1_1; int ReadLong1_2; int ReadLong1_3; int ReadLong1_4; int ReadLong1_5; // EPM2 float ReadShort2; int ReadShort2_1; int ReadShort2_2; int ReadShort2_3; int ReadShort2_4; int ReadShort2_5; float ReadLong2; int ReadLong2_1; int ReadLong2_2; int ReadLong2_3; int ReadLong2_4; int ReadLong2_5; // EPM3 float ReadShort3; int ReadShort3_1; int ReadShort3_2; int ReadShort3_3; int ReadShort3_4; int ReadShort3_5; float ReadLong3; int ReadLong3_1; int ReadLong3_2; int ReadLong3_3; int ReadLong3_4; int ReadLong3_5; float Distance; float Force; int fieldIndex = 0; float values[2]; //String EPM = "SN18"; //String EPM = "SN11"; //String EPM = "SN07"; const int ADCWaitShort = 450; const int ADCWaitLong = 900; /****************************************************************************** Setup Loop ******************************************************************************/ void setup() { pinMode(EPM1, OUTPUT); pinMode(EPM2, OUTPUT); pinMode(EPM3, OUTPUT); pinMode(ReadPin1, INPUT); pinMode(ReadPin2, INPUT); pinMode(ReadPin3, INPUT); pinMode(MagCtrl, OUTPUT); analogReadResolution(Resolution); digitalWrite(EPM1, LOW); digitalWrite(EPM2, LOW); digitalWrite(EPM3, LOW); digitalWrite(MagCtrl, HIGH); Serial.begin(9600); Serial.println("Connected"); delay(1000); } /****************************************************************************** Main Loop ******************************************************************************/ void loop() { if (Serial.available() > 0) { for (fieldIndex = 0; fieldIndex < 2; fieldIndex++) { values[fieldIndex] = Serial.parseFloat(); } Distance = values[0]; fieldIndex = 0; // Do long pulse, short pulse and print values MagMultPulse(Distance, EPM1_SN, EPM2_SN, EPM3_SN); } } /****************************************************************************** Pule EPM Multiple Time, Long and Short Pulse ******************************************************************************/ void MagMultPulse(float j, int x, int y, int z) { // (Distance, Force, EPM) digitalWrite(MagCtrl, LOW); for (int i = 0; i < 1000; i++) { delayMicroseconds(PulseWait); // Pulse Magnet 1 digitalWrite(EPM1, HIGH); delayMicroseconds(450); ReadShort1_1 = analogRead(ReadPin1); ReadShort1_2 = analogRead(ReadPin1); ReadShort1_3 = analogRead(ReadPin1); ReadShort1_4 = analogRead(ReadPin1); ReadShort1_5 = analogRead(ReadPin1); delayMicroseconds(450); ReadLong1_1 = analogRead(ReadPin1); ReadLong1_2 = analogRead(ReadPin1); ReadLong1_3 = analogRead(ReadPin1); ReadLong1_4 = analogRead(ReadPin1); ReadLong1_5 = analogRead(ReadPin1); delayMicroseconds(PulseEnd); digitalWrite(EPM1, LOW); // Wait for next pulse delayMicroseconds(PulseDelay); // Pulse Magnet 2 digitalWrite(EPM2, HIGH); delayMicroseconds(450); ReadShort2_1 = analogRead(ReadPin2); ReadShort2_2 = analogRead(ReadPin2); ReadShort2_3 = analogRead(ReadPin2); ReadShort2_4 = analogRead(ReadPin2); ReadShort2_5 = analogRead(ReadPin2); delayMicroseconds(450); ReadLong2_1 = analogRead(ReadPin2); ReadLong2_2 = analogRead(ReadPin2); ReadLong2_3 = analogRead(ReadPin2); ReadLong2_4 = analogRead(ReadPin2); ReadLong2_5 = analogRead(ReadPin2); delayMicroseconds(PulseEnd); digitalWrite(EPM2, LOW); // Wait for next pulse delayMicroseconds(PulseDelay); // Pulse Magnet 3 digitalWrite(EPM3, HIGH); delayMicroseconds(450); ReadShort3_1 = analogRead(ReadPin3); ReadShort3_2 = analogRead(ReadPin3); ReadShort3_3 = analogRead(ReadPin3); ReadShort3_4 = analogRead(ReadPin3); ReadShort3_5 = analogRead(ReadPin3); delayMicroseconds(450); ReadLong3_1 = analogRead(ReadPin3); ReadLong3_2 = analogRead(ReadPin3); ReadLong3_3 = analogRead(ReadPin3); ReadLong3_4 = analogRead(ReadPin3); ReadLong3_5 = analogRead(ReadPin3); delayMicroseconds(PulseEnd); digitalWrite(EPM3, LOW); // Calculate EPM1 ReadShort1 = ReadShort1_1 + ReadShort1_2 + ReadShort1_3 + ReadShort1_4 + ReadShort1_5; ReadLong1 = ReadLong1_1 + ReadLong1_2 + ReadLong1_3 + ReadLong1_4 + ReadLong1_5; ReadShort1 = ReadShort1 / 5; ReadLong1 = ReadLong1 / 5; // Calculate EPM2 ReadShort2 = ReadShort2_1 + ReadShort2_2 + ReadShort2_3 + ReadShort2_4 + ReadShort2_5; ReadLong2 = ReadLong2_1 + ReadLong2_2 + ReadLong2_3 + ReadLong2_4 + ReadLong2_5; ReadShort2 = ReadShort2 / 5; ReadLong2 = ReadLong2 / 5; // Calculate EPM3 ReadShort3 = ReadShort3_1 + ReadShort3_2 + ReadShort3_3 + ReadShort3_4 + ReadShort3_5; ReadLong3 = ReadLong3_1 + ReadLong3_2 + ReadLong3_3 + ReadLong3_4 + ReadLong3_5; ReadShort3 = ReadShort3 / 5; ReadLong3 = ReadLong3 / 5; Serial.print(j); // Distance Serial.print(", "); Serial.print(x); // EPM1 SN Serial.print(", "); Serial.print(ReadShort1); Serial.print(", "); Serial.print(ReadLong1); Serial.print(", "); Serial.print(y); // EPM2 SN Serial.print(", "); Serial.print(ReadShort2); Serial.print(", "); Serial.print(ReadLong2); Serial.print(", "); Serial.print(z); // EPM2 SN Serial.print(", "); Serial.print(ReadShort3); Serial.print(", "); Serial.print(ReadLong3); Serial.print("\n"); } digitalWrite(MagCtrl, HIGH); /****************************************************************************** Data format: Distance, Short EPM1, Long EPM1, Short EPM2, Long EPM2, Short EPM3, Long EPM3, ******************************************************************************/ }