#include #include #include "TSYS01.h" #include "MS5837.h" #include "ping1d.h" #include // define multiplexers' adresses QWIICMUX myMux; #define pingSerial Serial1 static Ping1D ping { pingSerial }; // define pressure and temp sensors TSYS01 TempSensor; MS5837 PresSensor; // Define 2 value struct for PING Altimeter data struct PingData { float distance; float confidence; }; unsigned long TimeStamp; float TempAcc, PressAcc; // Pins allocation const byte MainRelayPin = 11; // Relay 2 enable pin const byte LightPin = 12; // Relay 2 enable pin const byte VBEoutPin = 46; // VBE output pin - not all Digital legs are PWM !!! const byte VBEinPin = A0; // VBE input pin unsigned long currentMillis, PreviousMillis = 0; float TempReading, PresReading, PressVBE; float SensorsBottom[7], SensorsTop[7]; byte currentPortNumber; //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= SETUP void setup() { // initialize serial communications at 115200 bps: Serial.begin(115200); Serial.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= STARTING SETUP -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= "); Serial.setTimeout(600000); Wire.begin(); if (myMux.begin(0x70) == false) { Serial.println("Bottom Mux not detected. Freezing..."); while (1); } Serial.println("Bottom Mux detected"); currentPortNumber = myMux.getPort(); Serial.print("Bottom Mux CurrentPort: "); Serial.println(currentPortNumber); if (myMux.begin(0x71) == false) { Serial.println("Top Mux not detected. Freezing..."); while (1); } Serial.println("Top Mux detected"); currentPortNumber = myMux.getPort(); Serial.print("Top Mux Current Port: "); Serial.println(currentPortNumber); delay(2000); pinMode(MainRelayPin, OUTPUT); pinMode(LightPin, OUTPUT); // pinMode(TopMUXAdrsPin, OUTPUT); // //digitalWrite(TopMUXAdrsPin, HIGH); // // digitalWrite(MainRelayPin, HIGH); // enable main relay // digitalWrite(LightPin, HIGH); // enable main relay // delay(3000); // digitalWrite(LightPin, LOW); // enable main relay // delay(1000); // digitalWrite(LightPin, HIGH); // enable main relay // delay(3000); // digitalWrite(LightPin, LOW); // enable main relay //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= BOTTOM MUX SENSORS myMux.begin(0x70); currentPortNumber = myMux.getPort(); Serial.print("Bottom Mux CurrentPort: "); Serial.println(currentPortNumber); myMux.setPort(0); myMux.enablePort(0); while (!PresSensor.init()) { Serial.println("Init failed!"); Serial.println("Are SDA/SCL connected correctly?"); Serial.println("Blue Robotics Bar30: White=SDA, Green=SCL"); Serial.println("\n\n\n"); delay(1000); } PresSensor.read(); myMux.disablePort(0); SensorsBottom[0] = PresSensor.pressure(); Serial.print("VBE Pressure: "); Serial.print(SensorsBottom[0]); Serial.println(" mbar"); Serial.println(""); myMux.setPort(1); myMux.enablePort(1); TempSensor.init(); TempSensor.read(); myMux.disablePort(1); SensorsBottom[2] = PresSensor.pressure(); Serial.print("Press 1: "); Serial.print(SensorsBottom[2]); Serial.print(" mbar | "); myMux.setPort(3); myMux.enablePort(3); TempSensor.init(); TempSensor.read(); myMux.disablePort(3); SensorsBottom[1] = TempSensor.temperature(); Serial.println("BOTTOM: "); Serial.print("Temp 1: "); Serial.print(SensorsBottom[1]); Serial.print(" deg C | "); myMux.setPort(2); myMux.enablePort(2); while (!PresSensor.init()) { Serial.println("Init failed!"); Serial.println("Are SDA/SCL connected correctly?"); Serial.println("Blue Robotics Bar30: White=SDA, Green=SCL"); Serial.println("\n\n\n"); delay(1000); } PresSensor.read(); myMux.disablePort(2); SensorsBottom[3] = TempSensor.temperature(); Serial.print("Temp 2: "); Serial.print(SensorsBottom[3]); Serial.print(" deg C | "); myMux.setPort(4); myMux.enablePort(4); while (!PresSensor.init()) { Serial.println("Init failed!"); Serial.println("Are SDA/SCL connected correctly?"); Serial.println("Blue Robotics Bar30: White=SDA, Green=SCL"); Serial.println("\n\n\n"); delay(1000); } PresSensor.read(); myMux.disablePort(4); SensorsBottom[4] = PresSensor.pressure(); Serial.print("Press 2: "); Serial.print(SensorsBottom[4]); Serial.println(" mbar "); Serial.println(""); //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= TOP MUX SENSORS myMux.begin(0x71); myMux.setPort(0); myMux.enablePort(0); TempSensor.init(); TempSensor.read(); myMux.disablePort(0); SensorsTop[0] = TempSensor.temperature(); Serial.println("Accumulator: "); Serial.print("Temp: "); Serial.print(SensorsTop[0]); Serial.print(" deg C | "); myMux.setPort(1); myMux.enablePort(1); while (!PresSensor.init()) { Serial.println("Init failed!"); Serial.println("Are SDA/SCL connected correctly?"); Serial.println("Blue Robotics Bar30: White=SDA, Green=SCL"); Serial.println("\n\n\n"); delay(1000); } PresSensor.read(); myMux.disablePort(1); SensorsTop[1] = PresSensor.pressure(); Serial.print("Press: "); Serial.print(SensorsTop[1]); Serial.println(" mbar"); Serial.println(""); myMux.setPort(2); myMux.enablePort(2); TempSensor.init(); TempSensor.read(); myMux.disablePort(2); SensorsTop[2] = TempSensor.temperature(); Serial.println("TOP: "); Serial.print("Temp 1: "); Serial.print(SensorsTop[2]); Serial.print(" deg C | "); myMux.setPort(3); myMux.enablePort(3); TempSensor.init(); TempSensor.read(); myMux.disablePort(3); SensorsTop[3] = TempSensor.temperature(); Serial.print("Temp 2: "); Serial.print(SensorsTop[3]); Serial.print(" deg C | "); myMux.setPort(4); myMux.enablePort(4); while (!PresSensor.init()) { Serial.println("Init failed!"); Serial.println("Are SDA/SCL connected correctly?"); Serial.println("Blue Robotics Bar30: White=SDA, Green=SCL"); Serial.println("\n\n\n"); delay(1000); } PresSensor.read(); myMux.disablePort(4); SensorsTop[4] = PresSensor.pressure(); Serial.print("Press 1: "); Serial.print(SensorsTop[4]); Serial.print(" mbar | "); myMux.setPort(5); myMux.enablePort(5); while (!PresSensor.init()) { Serial.println("Init failed!"); Serial.println("Are SDA/SCL connected correctly?"); Serial.println("Blue Robotics Bar30: White=SDA, Green=SCL"); Serial.println("\n\n\n"); delay(1000); } PresSensor.read(); myMux.disablePort(5); SensorsTop[5] = PresSensor.pressure(); Serial.print(" Press 2: "); Serial.print(SensorsTop[5]); Serial.println(" mbar "); Serial.println(""); Serial.println(""); // //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= PING SETUP // // pingSerial.begin(115200); // // while (!ping.initialize()) { // // Serial.println("\nPing device failed to initialize!"); // // Serial.println("Are the Ping rx/tx wired correctly?"); // // Serial.println("Green wire to TX / White wire to RX"); // // delay(2000); // // } // // // while (!PresSensor.init()) { // // Serial.println("Pressure Sensor Init failed!"); // // Serial.println("Are SDA/SCL connected correctly?"); // // Serial.println("Blue Robotics Bar30: White=SDA, Green=SCL"); // // Serial.println("\n\n\n"); // // } // // // // PresSensor.setModel(MS5837::MS5837_30BA); // // PresSensor.setFluidDensity(1029); // kg/m^3 (997 freshwater, 1029 for seawater) // // // // PresSensor.init(); // // PresSensor.read(); // // PresReading = PresSensor.pressure(); // // Serial.print("Pressure: "); // // Serial.print(PresReading); // // Serial.println(" mbar"); // // // while (!TempSensor.init()) { // // Serial.println("Temperature Sensor Init failed!"); // // Serial.println("Are SDA/SCL connected correctly?"); // // Serial.println("Blue Robotics Bar30: White=SDA, Green=SCL"); // // Serial.println("\n\n\n"); // // } // // // TempSensor.init(); // // TempSensor.read(); // // TempReading = TempSensor.temperature(); // // Serial.print("Temperature: "); // // Serial.print(TempReading); // // Serial.println(" deg C"); delay(2000); Serial.println(" "); Serial.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= SETUP COMPLETE -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= "); Serial.println(" "); Serial.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= VOID LOOP START -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= "); //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= END of SETUP } //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= VOID LOOP void loop() { //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= BOTTOM MUX SENSORS myMux.begin(0x70); currentPortNumber = myMux.getPort(); Serial.print("Bottom Mux CurrentPort: "); Serial.println(currentPortNumber); Serial.println(""); myMux.setPort(0); myMux.enablePort(0); PresSensor.init(); PresSensor.read(); myMux.disablePort(0); SensorsBottom[0] = PresSensor.pressure(); Serial.print("VBE Pressure: "); Serial.print(SensorsBottom[0]); Serial.println(" mbar"); Serial.println(""); myMux.setPort(1); myMux.enablePort(1); TempSensor.read(); myMux.disablePort(1); SensorsBottom[1] = TempSensor.temperature(); Serial.println("BOTTOM: "); Serial.print("Temp 1: "); Serial.print(SensorsBottom[1]); Serial.print(" deg C | "); myMux.setPort(3); myMux.enablePort(3); TempSensor.read(); myMux.disablePort(3); SensorsBottom[3] = TempSensor.temperature(); Serial.print("Temp 2: "); Serial.print(SensorsBottom[3]); Serial.print(" deg C | "); myMux.setPort(2); myMux.enablePort(2); PresSensor.init(); PresSensor.read(); myMux.disablePort(2); SensorsBottom[2] = PresSensor.pressure(); Serial.print("Press 1: "); Serial.print(SensorsBottom[2]); Serial.print(" mbar | "); myMux.setPort(4); myMux.enablePort(4); PresSensor.init(); PresSensor.read(); myMux.disablePort(4); SensorsBottom[4] = PresSensor.pressure(); Serial.print("Press 2: "); Serial.print(SensorsBottom[4]); Serial.println(" mbar "); Serial.println(""); //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= TOP MUX SENSORS myMux.begin(0x71); myMux.setPort(2); myMux.enablePort(2); TempSensor.read(); myMux.disablePort(2); SensorsTop[2] = TempSensor.temperature(); Serial.println("TOP: "); Serial.print("Temp 1: "); Serial.print(SensorsTop[2]); Serial.print(" deg C | "); myMux.setPort(3); myMux.enablePort(3); TempSensor.read(); myMux.disablePort(3); SensorsTop[3] = TempSensor.temperature(); Serial.print("Temp 2: "); Serial.print(SensorsTop[3]); Serial.print(" deg C | "); myMux.setPort(4); myMux.enablePort(4); PresSensor.init(); PresSensor.read(); myMux.disablePort(4); SensorsTop[4] = PresSensor.pressure(); Serial.print("Press 1: "); Serial.print(SensorsTop[4]); Serial.print(" mbar | "); myMux.setPort(5); myMux.enablePort(5); PresSensor.init(); PresSensor.read(); myMux.disablePort(5); SensorsTop[5] = PresSensor.pressure(); Serial.print("Press 2: "); Serial.print(SensorsTop[5]); Serial.println(" mbar "); Serial.println(""); myMux.setPort(0); myMux.enablePort(0); TempSensor.read(); myMux.disablePort(0); SensorsTop[0] = TempSensor.temperature(); Serial.println("Accumulator: "); Serial.print("Temp: "); Serial.print(SensorsTop[0]); Serial.print(" deg C | "); myMux.setPort(1); myMux.enablePort(1); PresSensor.init(); PresSensor.read(); myMux.disablePort(1); SensorsTop[1] = PresSensor.pressure(); Serial.print("Press: "); Serial.print(SensorsTop[1]); Serial.println(" mbar | "); Serial.println(""); Serial.println(" "); // Serial.println("-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= VOID LOOP COMPLETE -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= "); // Serial.println(" "); delay(2000); //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= END of VOID LOOP } /* This example is targeted toward the arduino platform This example demonstrates the most simple usage of the Blue Robotics Ping1D c++ API in order to obtain distance and confidence reports from the device. This API exposes the full functionality of the Ping1D Echosounder Communication is performed with a Blue Robotics Ping1D Echosounder Serail Comms - Green wire to TX / White wire to RX */ struct PingData AltPing() { struct PingData PingDF; if (ping.update()) { PingDF.distance = ping.distance(); // Serial.print("Distance: "); // Serial.print(PingDF.distance); PingDF.confidence = ping.confidence(); // Serial.print("\tConfidence: "); // Serial.println(PingDF.confidence); } else { Serial.println("No update received!"); PingDF.distance = 0; PingDF.confidence = 0; } // Toggle the LED to show that the program is running // digitalWrite(ledPin, !digitalRead(ledPin)); return PingDF; }