
TCP-client with round robin communication -> Added extra function to select address of client with joystick
main.cpp
- Committer:
- timonclaerhout
- Date:
- 2020-11-08
- Revision:
- 1:61982a2230eb
- Parent:
- 0:1a75d762a447
File content as of revision 1:61982a2230eb:
#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); 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(ð); 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"); 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]; 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 }