bunch of tesitng for F746NG

Dependencies:   BSP_DISCO_F746NG F746_GUI F7_Ethernet LCD_DISCO_F746NG SimpleSocket TMP36 GZ TS_DISCO_F746NG TextLCD WebSocketClient mbed-rtos mbed sMotor

Committer:
Maricius
Date:
Mon Jun 18 13:16:23 2018 +0000
Revision:
1:1f4543ea364d
Parent:
0:45610c4af223
initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Maricius 0:45610c4af223 1 #include "mbed.h"
Maricius 0:45610c4af223 2 #include "F746_GUI.hpp"
Maricius 0:45610c4af223 3 #include "LCD_DISCO_F746NG.h"
Maricius 0:45610c4af223 4 #include "TextLCD.h"
Maricius 0:45610c4af223 5 #include <string>
Maricius 0:45610c4af223 6 #include <math.h>
Maricius 0:45610c4af223 7 #include "EthernetInterface.h"
Maricius 0:45610c4af223 8 #include "rtos.h"
Maricius 0:45610c4af223 9 #include "lwip/inet.h"
Maricius 0:45610c4af223 10 #include "lwip/netif.h"
Maricius 0:45610c4af223 11 #include "netif/etharp.h"
Maricius 0:45610c4af223 12 #include "lwip/dhcp.h"
Maricius 0:45610c4af223 13 #include "eth_arch.h"
Maricius 0:45610c4af223 14 #include "lwip/tcpip.h"
Maricius 0:45610c4af223 15 #include "NTPClient.h"
Maricius 0:45610c4af223 16 #include <stdio.h>
Maricius 0:45610c4af223 17
Maricius 0:45610c4af223 18
Maricius 0:45610c4af223 19 //Initialization of varius connections and interfaces
Maricius 0:45610c4af223 20
Maricius 0:45610c4af223 21
Maricius 1:1f4543ea364d 22
Maricius 0:45610c4af223 23
Maricius 0:45610c4af223 24
Maricius 0:45610c4af223 25 LCD_DISCO_F746NG lcd;
Maricius 0:45610c4af223 26 EthernetInterface eth;
Maricius 1:1f4543ea364d 27 Thread t1, t2, t3, t4, t5, t6;
Maricius 1:1f4543ea364d 28 NTPClient ntp;
Maricius 1:1f4543ea364d 29 TCPSocketConnection *sock;
Maricius 0:45610c4af223 30 //declare external funktions and pointers
Maricius 0:45610c4af223 31 extern void heartrate();
Maricius 0:45610c4af223 32 extern double *h_p;
Maricius 1:1f4543ea364d 33 extern double *hum;
Maricius 1:1f4543ea364d 34 extern double *t_p;
Maricius 1:1f4543ea364d 35 extern int *beats_per_min;
Maricius 1:1f4543ea364d 36 extern void smotor();
Maricius 1:1f4543ea364d 37 extern void temp();
Maricius 1:1f4543ea364d 38 extern void humidity();
Maricius 1:1f4543ea364d 39 //extern void sending();
Maricius 0:45610c4af223 40 //extern void proximity();
Maricius 1:1f4543ea364d 41
Maricius 1:1f4543ea364d 42 char ip_add[30];
Maricius 1:1f4543ea364d 43
Maricius 1:1f4543ea364d 44
Maricius 1:1f4543ea364d 45
Maricius 1:1f4543ea364d 46 /*void sending(message)
Maricius 1:1f4543ea364d 47 {
Maricius 1:1f4543ea364d 48
Maricius 1:1f4543ea364d 49 sock = new TCPSocketConnection();
Maricius 1:1f4543ea364d 50 sock->connect("192.168.8.115", 12345);
Maricius 1:1f4543ea364d 51 sock->set_blocking(false, (int) (60 * 1000));
Maricius 1:1f4543ea364d 52 //std::string s = std::to_string(message);
Maricius 1:1f4543ea364d 53 //char s = '0'+message;
Maricius 1:1f4543ea364d 54 //const char *cstr = s.c_str();
Maricius 1:1f4543ea364d 55 sock->send(message, 127);
Maricius 1:1f4543ea364d 56
Maricius 1:1f4543ea364d 57 }*/
Maricius 0:45610c4af223 58
Maricius 0:45610c4af223 59
Maricius 0:45610c4af223 60 int main()
Maricius 0:45610c4af223 61 {
Maricius 1:1f4543ea364d 62 /*double humid;
Maricius 1:1f4543ea364d 63 while(1){
Maricius 1:1f4543ea364d 64 t5.start(humidity);
Maricius 1:1f4543ea364d 65 char humidity_levels[31];
Maricius 1:1f4543ea364d 66 humid = *hum;
Maricius 1:1f4543ea364d 67 sprintf(humidity_levels, "%.40f", humid);
Maricius 0:45610c4af223 68
Maricius 1:1f4543ea364d 69 lcd.DisplayStringAt(-10, LINE(8), (uint8_t *)humidity_levels, CENTER_MODE);
Maricius 1:1f4543ea364d 70
Maricius 1:1f4543ea364d 71 wait(0.5);
Maricius 1:1f4543ea364d 72 }*/
Maricius 1:1f4543ea364d 73 //t3.start(smotor);
Maricius 1:1f4543ea364d 74
Maricius 1:1f4543ea364d 75
Maricius 0:45610c4af223 76 //First we check if the ethernet interface was able to initialize
Maricius 0:45610c4af223 77 if(eth.init()!=0) {
Maricius 0:45610c4af223 78
Maricius 0:45610c4af223 79 char eth_init [40];
Maricius 0:45610c4af223 80 sprintf(eth_init, "EthernetInterface Initialize Error");
Maricius 0:45610c4af223 81 lcd.DisplayStringAt(0, LINE(10), (uint8_t *)eth_init, CENTER_MODE);
Maricius 0:45610c4af223 82 while (1) {
Maricius 1:1f4543ea364d 83 wait(5);
Maricius 0:45610c4af223 84 }
Maricius 0:45610c4af223 85 }
Maricius 0:45610c4af223 86 //check if the ethernet intercace is connected to a network.
Maricius 0:45610c4af223 87
Maricius 0:45610c4af223 88 if(eth.connect()!=0) {
Maricius 0:45610c4af223 89 char eth_conn[30];
Maricius 0:45610c4af223 90 sprintf(eth_conn, "EthernetInterface Connect Error");
Maricius 0:45610c4af223 91 lcd.DisplayStringAt(0, LINE(8), (uint8_t *)eth_conn, CENTER_MODE);
Maricius 0:45610c4af223 92 char mac_add[15];
Maricius 0:45610c4af223 93 sprintf(mac_add, "Mac: %s", eth.getMACAddress());
Maricius 0:45610c4af223 94 lcd.DisplayStringAt(0, LINE(10), (uint8_t *)mac_add, CENTER_MODE);
Maricius 0:45610c4af223 95 while (1) {
Maricius 1:1f4543ea364d 96 wait(5);
Maricius 0:45610c4af223 97 }
Maricius 0:45610c4af223 98 }
Maricius 1:1f4543ea364d 99 /*
Maricius 1:1f4543ea364d 100
Maricius 0:45610c4af223 101 char net_mask[30];
Maricius 0:45610c4af223 102 char gate_Way[30];
Maricius 0:45610c4af223 103 char dhcp_status[30];
Maricius 1:1f4543ea364d 104 */
Maricius 0:45610c4af223 105
Maricius 0:45610c4af223 106 /*Display the varius information achived from the dhcp server,
Maricius 0:45610c4af223 107 It is also possible to set all these values manually,
Maricius 0:45610c4af223 108 if no dhcp server is available
Maricius 0:45610c4af223 109 */
Maricius 1:1f4543ea364d 110
Maricius 1:1f4543ea364d 111 //used for troupleshooting with the network configuration
Maricius 1:1f4543ea364d 112 /*
Maricius 0:45610c4af223 113 sprintf(ip_add, "IP Address is %s", eth.getIPAddress());
Maricius 0:45610c4af223 114 sprintf(net_mask, "NetMask is %s", eth.getNetworkMask());
Maricius 0:45610c4af223 115 sprintf(gate_Way, "Gateway Address is %s", eth.getGateway());
Maricius 0:45610c4af223 116 sprintf(dhcp_status, "Ethernet Setup OK");
Maricius 0:45610c4af223 117 lcd.DisplayStringAt(0, LINE(2), (uint8_t *)ip_add, CENTER_MODE);
Maricius 0:45610c4af223 118 lcd.DisplayStringAt(0, LINE(4), (uint8_t *)net_mask, CENTER_MODE);
Maricius 0:45610c4af223 119 lcd.DisplayStringAt(0, LINE(6), (uint8_t *)gate_Way, CENTER_MODE);
Maricius 0:45610c4af223 120 lcd.DisplayStringAt(0, LINE(8), (uint8_t *)dhcp_status, CENTER_MODE);
Maricius 1:1f4543ea364d 121 lcd.Clear(LCD_COLOR_GREEN); */
Maricius 1:1f4543ea364d 122
Maricius 1:1f4543ea364d 123
Maricius 1:1f4543ea364d 124 //Connects to a danish NTP server to syncronise time and date.
Maricius 1:1f4543ea364d 125 if (ntp.setTime("1.dk.pool.ntp.org") == 0) {
Maricius 1:1f4543ea364d 126 char ntp_message [50];
Maricius 1:1f4543ea364d 127 time_t ctTime;
Maricius 1:1f4543ea364d 128 ctTime = time(NULL);
Maricius 1:1f4543ea364d 129 sprintf(ntp_message, "%s \r\n", ctime(&ctTime));
Maricius 1:1f4543ea364d 130 //sprintf(ntp_message, "Time is set to : %s \r\n", ctime(&ctTime));
Maricius 1:1f4543ea364d 131 lcd.DisplayStringAt(-10, LINE(8), (uint8_t *)ntp_message, CENTER_MODE);
Maricius 1:1f4543ea364d 132
Maricius 1:1f4543ea364d 133 } else {
Maricius 1:1f4543ea364d 134
Maricius 1:1f4543ea364d 135 lcd.DisplayStringAt(0, LINE(8), (uint8_t *)"Error getting time", CENTER_MODE);
Maricius 1:1f4543ea364d 136 }
Maricius 1:1f4543ea364d 137 wait(1);
Maricius 0:45610c4af223 138 lcd.Clear(LCD_COLOR_GREEN);
Maricius 0:45610c4af223 139
Maricius 0:45610c4af223 140
Maricius 0:45610c4af223 141
Maricius 0:45610c4af223 142 //This is the main tasks included in the programm
Maricius 1:1f4543ea364d 143 sprintf(ip_add, "IP Address is %s", eth.getIPAddress());
Maricius 1:1f4543ea364d 144 //Creates a endless loop that works as the "main menu"
Maricius 0:45610c4af223 145 while(1) {
Maricius 1:1f4543ea364d 146 Button b1(300, 3, 70, 40, "Hjerterytme", Font16);
Maricius 1:1f4543ea364d 147 Button b2(50, 3, 70, 40, "Lyd og temp", Font16);
Maricius 1:1f4543ea364d 148 Button b3(150, 3, 70, 40, "Send", Font16);
Maricius 1:1f4543ea364d 149 lcd.DisplayStringAt(0, LINE(10), (uint8_t *)ip_add, CENTER_MODE);
Maricius 0:45610c4af223 150
Maricius 0:45610c4af223 151 lcd.SetTextColor(LCD_COLOR_BLACK);
Maricius 0:45610c4af223 152 lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"Commence Initial Testing...", CENTER_MODE);
Maricius 0:45610c4af223 153
Maricius 0:45610c4af223 154
Maricius 1:1f4543ea364d 155 lcd.DisplayStringAt(0, LINE(6), (uint8_t *) "Christoffer Bisander", CENTER_MODE);
Maricius 0:45610c4af223 156
Maricius 1:1f4543ea364d 157 if (b1.Touched()) { // switch to the heart rate monitor when b1 is clicked
Maricius 0:45610c4af223 158 lcd.SetTextColor(LCD_COLOR_RED);
Maricius 1:1f4543ea364d 159 //Spawn a thread that start monitoring the heartrate
Maricius 0:45610c4af223 160 t2.start(heartrate);
Maricius 1:1f4543ea364d 161 lcd.Clear(LCD_COLOR_GREEN);
Maricius 1:1f4543ea364d 162 char heart_rate_current[50];
Maricius 1:1f4543ea364d 163 char beats_per_min_final[10];
Maricius 1:1f4543ea364d 164 double hr;
Maricius 1:1f4543ea364d 165 int bpm;
Maricius 1:1f4543ea364d 166 Button stop_hr(400, 3, 70, 40, "Exit", Font16);
Maricius 1:1f4543ea364d 167 //from the pointer assigned in the hearrate function we constantly read the new vallues from the heartrate monitor.
Maricius 1:1f4543ea364d 168 while(1) {
Maricius 1:1f4543ea364d 169 hr = *h_p;
Maricius 1:1f4543ea364d 170 bpm = *beats_per_min;
Maricius 1:1f4543ea364d 171 sprintf(heart_rate_current, "hjerterytme: %.8f", hr);
Maricius 1:1f4543ea364d 172 sprintf(beats_per_min_final, "Din puls er: %i", bpm);
Maricius 1:1f4543ea364d 173 //sending(bpm);
Maricius 1:1f4543ea364d 174 lcd.DisplayStringAt(0, LINE(10), (uint8_t *)beats_per_min_final, CENTER_MODE);
Maricius 1:1f4543ea364d 175 lcd.DisplayStringAt(0, LINE(14), (uint8_t *)heart_rate_current, CENTER_MODE);
Maricius 1:1f4543ea364d 176 //if the exit button is pressed the thread is terminated and we return to the main menu.
Maricius 1:1f4543ea364d 177 if (stop_hr.Touched()) {
Maricius 1:1f4543ea364d 178 t2.terminate();
Maricius 1:1f4543ea364d 179 break;
Maricius 1:1f4543ea364d 180 } else {
Maricius 0:45610c4af223 181
Maricius 1:1f4543ea364d 182 }
Maricius 1:1f4543ea364d 183 wait(0.1);
Maricius 1:1f4543ea364d 184 }
Maricius 0:45610c4af223 185
Maricius 1:1f4543ea364d 186 t2.join();
Maricius 0:45610c4af223 187 lcd.Clear(LCD_COLOR_BLACK);
Maricius 0:45610c4af223 188 }
Maricius 1:1f4543ea364d 189 //Switch to the temperature monitoring mode
Maricius 1:1f4543ea364d 190 if(b2.Touched()) {
Maricius 1:1f4543ea364d 191 lcd.SetTextColor(LCD_COLOR_RED);
Maricius 1:1f4543ea364d 192 //Spawn a thread that constantly monitor the temperature, and calculates the avarage temperature over a 5 sec period.
Maricius 1:1f4543ea364d 193 t2.start(temp);
Maricius 1:1f4543ea364d 194 lcd.Clear(LCD_COLOR_GREEN);
Maricius 1:1f4543ea364d 195 char current_temp[20];
Maricius 1:1f4543ea364d 196 double tp;
Maricius 1:1f4543ea364d 197 Button stop_hr(400, 3, 70, 40, "Exit", Font16);
Maricius 1:1f4543ea364d 198 while(1) {
Maricius 1:1f4543ea364d 199 tp = *t_p;
Maricius 1:1f4543ea364d 200 //If the temperatur reached a certain limit, the motor start the idea here would be that it could be used as a climate system etc.
Maricius 1:1f4543ea364d 201 if(tp>22.0) {
Maricius 1:1f4543ea364d 202 t4.start(smotor);
Maricius 1:1f4543ea364d 203 } else {
Maricius 1:1f4543ea364d 204 }
Maricius 1:1f4543ea364d 205
Maricius 1:1f4543ea364d 206 sprintf(current_temp, "temp: %.8f", tp);
Maricius 1:1f4543ea364d 207 lcd.DisplayStringAt(0, LINE(14), (uint8_t *)current_temp, CENTER_MODE);
Maricius 1:1f4543ea364d 208 if (stop_hr.Touched()) {
Maricius 1:1f4543ea364d 209 t2.terminate();
Maricius 1:1f4543ea364d 210 break;
Maricius 1:1f4543ea364d 211 } else {
Maricius 1:1f4543ea364d 212
Maricius 1:1f4543ea364d 213 }
Maricius 1:1f4543ea364d 214 wait(0.5);
Maricius 1:1f4543ea364d 215 }
Maricius 1:1f4543ea364d 216
Maricius 1:1f4543ea364d 217 t2.join();
Maricius 1:1f4543ea364d 218 lcd.Clear(LCD_COLOR_BLACK);
Maricius 1:1f4543ea364d 219 }
Maricius 1:1f4543ea364d 220 //This is primarly a proof of concept it sends af message to a TCP socket running on a different machine.
Maricius 1:1f4543ea364d 221 if(b3.Touched()) {
Maricius 1:1f4543ea364d 222 lcd.SetTextColor(LCD_COLOR_RED);
Maricius 1:1f4543ea364d 223 sock = new TCPSocketConnection();
Maricius 1:1f4543ea364d 224 sock->connect("10.130.17.131", 12345);
Maricius 1:1f4543ea364d 225 sock->set_blocking(false, (int) (60 * 1000));
Maricius 1:1f4543ea364d 226 //std::string utf8 = u8"This is just a test";
Maricius 1:1f4543ea364d 227
Maricius 1:1f4543ea364d 228 //message = "this is a test";
Maricius 1:1f4543ea364d 229
Maricius 1:1f4543ea364d 230 sock->send("This is a test", 30);
Maricius 1:1f4543ea364d 231 delete sock;
Maricius 1:1f4543ea364d 232 //TCPSocketConnection().connect("192.168.8.115", 12345);
Maricius 1:1f4543ea364d 233 //sending();
Maricius 1:1f4543ea364d 234 //Send some data
Maricius 0:45610c4af223 235
Maricius 1:1f4543ea364d 236 }
Maricius 0:45610c4af223 237 }
Maricius 0:45610c4af223 238
Maricius 0:45610c4af223 239 }
Maricius 0:45610c4af223 240
Maricius 0:45610c4af223 241
Maricius 0:45610c4af223 242
Maricius 0:45610c4af223 243
Maricius 0:45610c4af223 244