/******************************************************************************* 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 , , , *******************************************************************************/ // 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; float ReadShort1 = 0; int ReadShort1_1 = 0; int ReadShort1_2 = 0; int ReadShort1_3 = 0; int ReadShort1_4 = 0; int ReadShort1_5 = 0; float ReadLong1 = 0; int ReadLong1_1 = 0; int ReadLong1_2 = 0; int ReadLong1_3 = 0; int ReadLong1_4 = 0; int ReadLong1_5 = 0; float z; int ReadShort2; int ReadShort3; int ReadLong2; int ReadLong3; float Distance; float Force; int fieldIndex = 0; float values[2]; //String EPM = "SN18"; //String EPM = "SN11"; //String EPM = "SN19"; 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]; Force = values[1]; // Intensity fieldIndex = 0; // Do long pulse, short pulse and print values MagMultPulse(Distance, Force, EPM1); } } /****************************************************************************** Pule EPM Multiple Time, Long and Short Pulse ******************************************************************************/ void MagMultPulse(float j, float k, String x) { // (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); 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; z = ReadLong1 - 1.5 * ReadShort1; // Wait for next pulse // delayMicroseconds(PulseDelay); delayMicroseconds(10000); /* // Pulse Magnet 2 digitalWrite(EPM2, HIGH); delayMicroseconds(450); ReadShort2 = analogRead(ReadPin2); delayMicroseconds(450); ReadLong2 = analogRead(ReadPin2); delayMicroseconds(PulseEnd); digitalWrite(EPM2, LOW); // Wait for next pulse delayMicroseconds(PulseDelay); // Pulse Magnet 3 digitalWrite(EPM3, HIGH); delayMicroseconds(450); ReadShort3 = analogRead(ReadPin3); delayMicroseconds(450); ReadLong3 = analogRead(ReadPin3); delayMicroseconds(PulseEnd); digitalWrite(EPM3, LOW); */ Serial.print(x); // EPM SN Serial.print(", "); Serial.print(j); // Distance Serial.print(", "); Serial.print(k); // Force Serial.print(", "); Serial.print(ReadShort1); Serial.print(", "); Serial.print(ReadLong1); Serial.print(", "); Serial.print(z); /* Serial.print(", "); Serial.print(ReadShort2); Serial.print(", "); Serial.print(ReadLong2); 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, ******************************************************************************/ }