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
main.cpp@1:1f4543ea364d, 2018-06-18 (annotated)
- 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?
User | Revision | Line number | New 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 |