diff --git a/include/README b/include/README deleted file mode 100644 index 194dcd4..0000000 --- a/include/README +++ /dev/null @@ -1,39 +0,0 @@ - -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 diff --git a/include/config.h b/include/config.h new file mode 100644 index 0000000..3447b0e --- /dev/null +++ b/include/config.h @@ -0,0 +1,43 @@ +#pragma once +#include + +// Ethernet +#define IP_ADDRESS "192.168.0.55" +#define IP_PORT 8888 +byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; + +// Pins +#define ETHERNET_INT 3 +#define ETHERNET_CS 10 +#define ETHERNET_RESET A1 + +#define HALL_INT 2 +#define PRESSURE_READ A7 +#define BUTTON_READ A6 +#define DISPLAY_ACTIVE_READ 9 + +#define STATUS_LED_1 8 +#define STATUS_LED_2 A0 + +#define SR_LATCH 5 +#define SR_CLOCK 6 +#define SR_DATA 7 +#define SR_OUTPUT_ENABLE A3 +#define SR_CLEAR A2 + +// Shift register output pins +#define VALVE_01 1 +#define VALVE_02 2 +#define VALVE_03 3 +#define VALVE_04 4 +#define VALVE_05 5 +#define VALVE_06 6 +#define VALVE_07 7 +#define VALVE_08 8 +#define VALVE_09 9 +#define VALVE_10 10 +#define VALVE_11 11 +#define VALVE_12 12 + +#define ERROR_LAMP 15 +#define PUMP_ON_LAMP 16 \ No newline at end of file diff --git a/lib/README b/lib/README deleted file mode 100644 index 6debab1..0000000 --- a/lib/README +++ /dev/null @@ -1,46 +0,0 @@ - -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 a 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 -#include - -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 diff --git a/platformio.ini b/platformio.ini index 96febe7..fd9a812 100644 --- a/platformio.ini +++ b/platformio.ini @@ -12,3 +12,6 @@ platform = atmelavr board = nanoatmega328 framework = arduino +lib_deps = + arduino-libraries/Ethernet@^2.0.1 + https://git.kleiax.de/PlatformIO-Libs/Shiftregister.git#v1.0 diff --git a/src/main.cpp b/src/main.cpp index 58b344c..c4dd086 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,9 +1,61 @@ #include +#include +#include + +#include "config.h" + +char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; +char ReplyBuffer[UDP_TX_PACKET_MAX_SIZE]; + +EthernetUDP Udp; void setup() { - // put your setup code here, to run once: + Serial.begin(115200); + Serial.println("Irrigation Arduino"); + + Ethernet.init(ETHERNET_CS); + IPAddress ip; + ip.fromString(IP_ADDRESS); + Ethernet.begin(mac, ip); + + if (Ethernet.hardwareStatus() == EthernetNoHardware) { + Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :("); + while (true) + delay(1); + } + + if (Ethernet.linkStatus() == LinkOFF) + Serial.println("Ethernet cable is not connected."); + + Udp.begin(IP_PORT); } void loop() { - // put your main code here, to run repeatedly: -} \ No newline at end of file + // if there's data available, read a packet + int packetSize = Udp.parsePacket(); + if (packetSize) { + Serial.print("Received packet of size "); + Serial.println(packetSize); + Serial.print("From "); + IPAddress remote = Udp.remoteIP(); + for (int i=0; i < 4; i++) { + Serial.print(remote[i], DEC); + if (i < 3) { + Serial.print("."); + } + } + Serial.print(", port "); + Serial.println(Udp.remotePort()); + + // read the packet into packetBuffer + Udp.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE); + Serial.println("Contents:"); + Serial.println(packetBuffer); + + // send a reply to the IP address and port that sent us the packet we received + Udp.beginPacket(Udp.remoteIP(), Udp.remotePort()); + Udp.write(ReplyBuffer); + Udp.endPacket(); + } + delay(10); +}