first commit

This commit is contained in:
kicap 2024-08-15 02:51:18 +08:00
commit 67b9810478
8 changed files with 309 additions and 0 deletions

5
.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
.pio
.vscode/.browse.c_cpp.db*
.vscode/c_cpp_properties.json
.vscode/launch.json
.vscode/ipch

10
.vscode/extensions.json vendored Normal file
View File

@ -0,0 +1,10 @@
{
// See http://go.microsoft.com/fwlink/?LinkId=827846
// for the documentation about the extensions.json format
"recommendations": [
"platformio.platformio-ide"
],
"unwantedRecommendations": [
"ms-vscode.cpptools-extension-pack"
]
}

39
include/README Normal file
View File

@ -0,0 +1,39 @@
This directory is intended for project header files.
A header file is a file containing C declarations and macro definitions
to be shared between several project source files. You request the use of a
header file in your project source file (C, C++, etc) located in `src` folder
by including it, with the C preprocessing directive `#include'.
```src/main.c
#include "header.h"
int main (void)
{
...
}
```
Including a header file produces the same results as copying the header file
into each source file that needs it. Such copying would be time-consuming
and error-prone. With a header file, the related declarations appear
in only one place. If they need to be changed, they can be changed in one
place, and programs that include the header file will automatically use the
new version when next recompiled. The header file eliminates the labor of
finding and changing all the copies as well as the risk that a failure to
find one copy will result in inconsistencies within a program.
In C, the usual convention is to give header files names that end with `.h'.
It is most portable to use only letters, digits, dashes, and underscores in
header file names, and at most one dot.
Read more about using header files in official GCC documentation:
* Include Syntax
* Include Operation
* Once-Only Headers
* Computed Includes
https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html

46
lib/README Normal file
View File

@ -0,0 +1,46 @@
This directory is intended for project specific (private) libraries.
PlatformIO will compile them to static libraries and link into executable file.
The source code of each library should be placed in an own separate directory
("lib/your_library_name/[here are source files]").
For example, see a structure of the following two libraries `Foo` and `Bar`:
|--lib
| |
| |--Bar
| | |--docs
| | |--examples
| | |--src
| | |- Bar.c
| | |- Bar.h
| | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
| |
| |--Foo
| | |- Foo.c
| | |- Foo.h
| |
| |- README --> THIS FILE
|
|- platformio.ini
|--src
|- main.c
and a contents of `src/main.c`:
```
#include <Foo.h>
#include <Bar.h>
int main (void)
{
...
}
```
PlatformIO Library Dependency Finder will find automatically dependent
libraries scanning project source files.
More information about PlatformIO Library Dependency Finder
- https://docs.platformio.org/page/librarymanager/ldf.html

15
platformio.ini Normal file
View File

@ -0,0 +1,15 @@
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:uno]
platform = atmelavr
board = uno
framework = arduino
monitor_speed = 115200

3
readme.md Normal file
View File

@ -0,0 +1,3 @@
## shrimp-embankment-arduino-uno
#### this is the code for arduino uno which connected to 2 ultrasonic, 3 ph sensor , 3 salinity sensor , and one 2 channel relay

180
src/main.cpp Normal file
View File

@ -0,0 +1,180 @@
#include <Arduino.h>
#include <SoftwareSerial.h>
// Define pins for sensor 1
#define TRIG_PIN_1 9
#define ECHO_PIN_1 10
// Define pins for sensor 2
#define TRIG_PIN_2 11
#define ECHO_PIN_2 12
// Define pins for relay channels
#define RELAY_PIN_1 4
#define RELAY_PIN_2 5
#define SensorPin1 A0 // pH meter Analog output to Arduino Analog Input 0
#define SensorPin2 A1 // pH meter Analog output to Arduino Analog Input 1
float calibration_value1 = 21.34 + 5.8; // Calibration value for Sensor 1
float calibration_value2 = 21.34 + 7.5; // Calibration value for Sensor 1
SoftwareSerial mySerial(2, 3); // RX, TX , Software serial from ESP-01 to Arduino
int i = 0;
float processPHsensor(int pin, float calibration_value)
{
int buf[10];
int temp;
unsigned long int avgValue;
// Read and smooth the sensor data
for (int i = 0; i < 10; i++)
{
buf[i] = analogRead(pin);
delay(10);
}
// Sort the values
for (int i = 0; i < 9; i++)
{
for (int j = i + 1; j < 10; j++)
{
if (buf[i] > buf[j])
{
temp = buf[i];
buf[i] = buf[j];
buf[j] = temp;
}
}
}
// Calculate the average of the middle 6 values
avgValue = 0;
for (int i = 2; i < 8; i++)
avgValue += buf[i];
// Convert the average value to pH
float phValue = (float)avgValue * 5.0 / 1024 / 6;
phValue = -5.70 * phValue + calibration_value;
return phValue;
}
long measureDistance(int trigPin, int echoPin)
{
// Clear the trigger
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Send a 10 microsecond pulse to the trigger
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Read the pulse duration
return pulseIn(echoPin, HIGH);
}
void setup()
{
Serial.begin(115200);
mySerial.begin(115200);
// initialize ph sensor
pinMode(SensorPin1, INPUT);
pinMode(SensorPin2, INPUT);
// Initialize sensor 1
pinMode(TRIG_PIN_1, OUTPUT);
pinMode(ECHO_PIN_1, INPUT);
// Initialize sensor 2
pinMode(TRIG_PIN_2, OUTPUT);
pinMode(ECHO_PIN_2, INPUT);
// Initialize relay pins
pinMode(RELAY_PIN_1, OUTPUT);
pinMode(RELAY_PIN_2, OUTPUT);
// Ensure relays are off at the start
digitalWrite(RELAY_PIN_1, LOW);
digitalWrite(RELAY_PIN_2, LOW);
// delay(1000);
}
void loop()
{
// String IncomingStr = "";
// bool flag = false;
// // Check if data is available from ESP-01
// while (mySerial.available()) {
// IncomingStr = mySerial.readString();
// flag = true;
// }
// if (flag) {
// String response = IncomingStr + ", Back from Arduino " + i + " times";
// Serial.println(response); // Print to Serial monitor for debugging
// mySerial.print("aran"); // Send response back to ESP-01
// mySerial.print(i);
// mySerial.print ("\n");
// i++;
// }
// Measure distance for sensor 1
long duration1 = measureDistance(TRIG_PIN_1, ECHO_PIN_1);
float distance1 = (duration1 / 2.0) * 0.0344;
// Measure distance for sensor 2
long duration2 = measureDistance(TRIG_PIN_2, ECHO_PIN_2);
float distance2 = (duration2 / 2.0) * 0.0344;
float phValue1 = processPHsensor(SensorPin1, calibration_value1);
float phValue2 = processPHsensor(SensorPin2, calibration_value2);
// float phValue2 = processPHsensor(SensorPin2, calibration_value2);
// Print the pH values to the serial monitor
Serial.print("Distance1: ");
Serial.print(distance1);
Serial.print("cm ,Distance2: ");
Serial.print(distance2);
Serial.println("cm ");
Serial.print("pH Value 1: ");
Serial.println(phValue1);
Serial.print("pH Value 2: ");
Serial.println(phValue2);
if (distance1 <= 30)
{
digitalWrite(RELAY_PIN_1, HIGH);
digitalWrite(RELAY_PIN_2, LOW);
}
else if (distance1 >= 60)
{
digitalWrite(RELAY_PIN_2, HIGH);
digitalWrite(RELAY_PIN_1, LOW);
}
else
{
digitalWrite(RELAY_PIN_1, LOW);
digitalWrite(RELAY_PIN_2, LOW);
}
mySerial.print(distance1);
mySerial.print(",");
mySerial.print(distance2);
mySerial.print(",");
mySerial.print(phValue1);
mySerial.print(",");
mySerial.print(phValue2);
mySerial.print("\n");
delay(2000);
}

11
test/README Normal file
View File

@ -0,0 +1,11 @@
This directory is intended for PlatformIO Test Runner and project tests.
Unit Testing is a software testing method by which individual units of
source code, sets of one or more MCU program modules together with associated
control data, usage procedures, and operating procedures, are tested to
determine whether they are fit for use. Unit testing finds problems early
in the development cycle.
More information about PlatformIO Unit Testing:
- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html