TCP-client with round robin communication -> Added extra function to select address of client with joystick

Dependencies:   C12832 LM75B

Revision:
1:61982a2230eb
Parent:
0:1a75d762a447
--- a/main.cpp	Sat Mar 07 19:29:08 2020 +0000
+++ b/main.cpp	Sun Nov 08 13:12:21 2020 +0000
@@ -1,34 +1,142 @@
 #include "mbed.h"
 #include "EthernetInterface.h"
+#include "LM75B.h"
+#include "C12832.h"
+#include <string>
 
+//Using Arduino pin notation
+C12832 lcd(D11, D13, D12, D7, D10);
+LM75B sensor(D14,D15);
+
+//Potentiometer
+AnalogIn pot (A0);
+
+//Joystick
+DigitalIn left(A4);
+DigitalIn right(A5);
+DigitalIn select(D4);
 
-DigitalOut led(LED1);
+void select_state(){
+        while(1){
+                lcd.cls();
+                lcd.locate(0,3);
+                lcd.printf("Select State by moving the joystick \n");
+                lcd.printf("And select by pressing the joystick \n");
+                if(left) {
+                    lcd.cls();
+                    lcd.printf("The node is a reciever");
+                    sender = false;
+                    }
+                if(right){
+                    lcd.cls();
+                    lcd.printf("The node is a sender");
+                    sender = true;
+                    }
+                if(select){
+                    lcd.cls();
+                    break;
+                    }
+            }
+    }
+    
+void select_address(){
+        while(1){
+                lcd.cls();
+                lcd.locate(0,3);
+                lcd.printf("Select your address by moving the joystick \n");
+                lcd.printf("And select by pressing the joystick");
+                if(left && id_of_sender > 0) {
+                    lcd.cls();
+                    id_of_sender -= 1;
+                    lcd.printf("The address is: 192.168.0.", id_of_sender);
+                    }
+                if(right && id_of_sender < 255){
+                    lcd.cls();
+                    id_of_sender += 1;
+                    lcd.printf("The address is: 192.168.0.", id_of_sender);
+                    }
+                if(select){
+                    lcd.cls();
+                    break;
+                    }
+            }
+    }
+    
+void select_reciever_id(){
+        while(1){
+                lcd.cls();
+                lcd.locate(0,3);
+                lcd.printf("Select reciever id by moving the joystick \n");
+                lcd.printf("And select by pressing the joystick");
+                if(left && id_of_reciever > 0) {
+                    lcd.cls();
+                    id_of_reciever -= 1;
+                    lcd.printf("The reciever id is: ", id_of_reciever);
+                    }
+                if(right && id_of_reciever < 255){
+                    lcd.cls();
+                    id_of_reciever += 1;
+                    lcd.printf("The reciever id is: ", id_of_reciever);
+                    }
+                if(select){
+                    lcd.cls();
+                    break;
+                    }
+            }
+    }
+    
+void store_all_values(){
+    char upperbyte = (temperature >> 8) & 0xFF;
+    char lowerbyte = temperature & 0xFF;
+    char potentiometer = pot/1024 * 256;
+    buffer[0] = upperbyte;
+    buffer[1] = lowerbyte;
+    buffer[2] = potentiometer;
+    buffer[3] = id_of_sender;
+    }
+    
+void send_all_values(){
+    socket.send(buffer,4);
+    }
+    
+void connect_server(){
+    TCPSocket socket;
+    string address_reciever = "192.168.0." + id_of_reciever;
+    socket.open(&eth);
+    socket.connect(address_reciever,4000);
+    }
+
+void connect_network(){
+    EthernetInterface eth;
+    string address_sender = "192.168.0." + id_of_sender;
+    eth.set_network(address_sender,"255.255.255.0","192.168.0.1");
+    eth.connect();
+    }
 
 int main()
 {
     printf("Client example\n\r");
-
-    EthernetInterface eth;
-    eth.set_network("192.168.0.39","255.255.255.0","192.168.0.1");
-    eth.connect();
-
+    
     printf("The client IP address is '%s'\n\r", eth.get_ip_address());
-
-
-
+    
+    bool sender = false;
+    char id_of_sender = 1;
+    char id_of_reciever = 1;
+    char buffer[4];
 
-    TCPSocket socket;
-
-    socket.open(&eth);
-    socket.connect("192.168.0.40",4000);
-
-    char rbuffer[64];
-    int rcount = socket.recv(rbuffer, sizeof rbuffer);
-    printf("received: %d\r\n", rcount);
-    printf(rbuffer);
-
-    socket.close();
-
+    uint16_t temperature = sensor.temp();
+    
+    select_address(); //What is the IP-address of the node
+    select_reciever_id(); //each node wether sender/reciever needs to select reciever id (round-robin)
+    select_state(); // is node a Sender or Reciever?
+    if(sender){
+        connect_network(); //Setup network
+        connect_server(); //Connect to server (reciever)
+        store_all_values(); //store the data in buffer
+        send_all_values();  //send data of buffer to reciever
+        sender = false; //if packet is send, node becomes reciever again (round-robin)
+        }
+    socket.close(); //close communication
 }