Jovan Jovanovic 2019/0469

Dependencies:   19E042PIM_MB_PINS

Files at this revision

API Documentation at this revision

Comitter:
dzombah
Date:
Mon Jan 17 16:12:11 2022 +0000
Commit message:
; Jovan Jovanovic 2019/0469

Changed in this revision

19E042PIM_MB_PINS.lib Show annotated file Show diff for this revision Revisions of this file
main1.txt Show annotated file Show diff for this revision Revisions of this file
main2.txt Show annotated file Show diff for this revision Revisions of this file
main3.txt Show annotated file Show diff for this revision Revisions of this file
mbed-mqtt.lib Show annotated file Show diff for this revision Revisions of this file
mbed-os.lib Show annotated file Show diff for this revision Revisions of this file
mbed_app.json Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/19E042PIM_MB_PINS.lib	Mon Jan 17 16:12:11 2022 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/tzwell/code/19E042PIM_MB_PINS/#5722459a201f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main1.txt	Mon Jan 17 16:12:11 2022 +0000
@@ -0,0 +1,97 @@
+// biblioteke za uvoz:
+#include "mbed.h"
+
+//pinovi
+#define A PA_10
+#define B PA_9
+#define C PA_8
+#define D PB_10
+#define E PB_5
+#define F PB_4
+#define G PB_3
+#define SEL1 PB_6
+#define SEL2 PC_7
+#define SW1 PC_9
+#define SW2 PC_8
+
+//makroi:
+#define WAITTIME_MS 1
+
+// globalne promenjive:
+BusOut display (A,B,C,D,E,F,G);
+BusOut select (SEL2,SEL1);
+DigitalIn Dugme1 (SW1);
+DigitalIn Dugme2 (SW2);
+
+//definicije funkcija:
+void konvertor (int num){
+    switch(num){
+        case 0:display = 0b1000000;break;   
+        case 1:display = 0b1111001;break;   
+        case 2:display = 0b0100100;break;   
+        case 3:display = 0b0110000;break;   
+        case 4:display = 0b0011001;break;   
+        case 5:display = 0b0010010;break;   
+        case 6:display = 0b0000010;break;   
+        case 7:display = 0b1111000;break;   
+        case 8:display = 0b0000000;break;   
+        case 9:display = 0b0010000;break;   
+        default:display = 0x7f;    break;
+        }
+        }
+        
+        
+void ispisi(int num){
+    int j = num%10, d = num/10;
+       if(d==0)
+        konvertor(-1);
+        else
+    konvertor(d);
+    select = 01;
+    wait_ms(WAITTIME_MS);
+    konvertor(j);
+    select = 10;
+    wait_ms(WAITTIME_MS);   
+}
+
+
+
+
+//pomocne promenjive
+int lastDugme1=1,lastDugme2=1;
+int lastlastDugme1=1,lastlastDugme2=1;
+int brojac=0;
+
+
+// glavna funkcija:
+
+int main(){
+    //Default vrednosti za sve ugaseno
+    display = 1111111;
+    select = 111;
+    
+    while(1){
+        
+        ispisi(brojac);
+        
+        
+        if(lastlastDugme1==0 && lastDugme1==0 && Dugme1==1)
+            brojac=(brojac+1)%11;
+            
+        if(lastlastDugme2==0 && lastDugme2==0 && Dugme2==1)
+            brojac=(brojac+10)%11;
+ 
+        
+        lastlastDugme1=lastDugme1;
+        lastlastDugme2=lastDugme2;
+        
+        lastDugme1=Dugme1;
+        lastDugme2=Dugme2;
+        
+    }
+    
+    }
+
+
+
+  
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main2.txt	Mon Jan 17 16:12:11 2022 +0000
@@ -0,0 +1,99 @@
+// biblioteke za uvoz:
+#include "mbed.h"
+ 
+//makroi:
+   
+#define WAITTIME_MS 1
+ 
+
+const int n = 5000;
+const int k = -4995;
+ 
+//Pinovi:
+#define A PA_10
+#define B PA_9
+#define C PA_8
+#define D PB_10
+#define E PB_5
+#define F PB_4
+#define G PB_3
+#define SEL1 PB_6
+#define SEL2 PC_7
+#define SW1 PC_9
+#define POT1 PA_0
+#define POT2 PA_1
+#define BUZZ PA_11
+#define LD2 PB_15
+ 
+//Promenjive:
+PwmOut buzzer (BUZZ);
+InterruptIn sw1 (SW1);
+AnalogIn pot1 (POT1);
+AnalogIn pot2 (POT2);
+BusOut display (A,B,C,D,E,F,G);
+BusOut select (SEL2,SEL1);
+ 
+
+
+
+ 
+//Definisanje funkcija:
+
+ 
+
+void konvertor (int num){
+    switch(num){
+        case 0:display = 0b1000000;break;   
+        case 1:display = 0b1111001;break;   
+        case 2:display = 0b0100100;break;   
+        case 3:display = 0b0110000;break;   
+        case 4:display = 0b0011001;break;   
+        case 5:display = 0b0010010;break;   
+        case 6:display = 0b0000010;break;   
+        case 7:display = 0b1111000;break;   
+        case 8:display = 0b0000000;break;   
+        case 9:display = 0b0010000;break;   
+        default:display = 0x7f;    break;
+    
+    }
+}
+ 
+
+void ispisi(int num){
+    int j = num%10,d = num/10;
+    if(d==0)
+        konvertor(-1);
+    else
+        konvertor(d);
+    select = 0b01;
+    wait_ms(WAITTIME_MS);
+    konvertor(j);
+    select = 0b10;
+    wait_ms(WAITTIME_MS);
+    
+}
+
+void ISR_sw1(){
+
+        ispisi(pot1* 10);
+} 
+
+
+ 
+//Glavna funkcija:
+int main(){
+   
+    
+  
+    
+    
+    
+    while(1){
+        
+        buzzer=pot1.read(); 
+        buzzer.period_us(n + k*pot2.read());
+        wait_ms(50);
+        
+        sw1.fall(&ISR_sw1);
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main3.txt	Mon Jan 17 16:12:11 2022 +0000
@@ -0,0 +1,206 @@
+/*
+ * Program implements MQTT client on a NUCLEO-L476RG board
+ * using arm mbed-mqtt library and ESP-WROOM-02 WiFi modem.
+ *
+ * University of Belgrade - School of Electrical Engineering
+ * Department of Electronics
+ * Bulevar Kralja Aleksandra 73, 11120 Belgrade, Serbia
+ *
+ * November 2021.
+ *
+ */
+ 
+#include "mbed.h"
+#include "mb_pins.h"
+#include "platform/mbed_thread.h"
+#include "MQTTClientMbedOs.h"
+ 
+ 
+// LED2 blinking rate:
+#define BLINKING_RATE_MS                                                     250
+// Scaler to 3v3L
+#define VOLTAGE_SCALER                                                      3.3f
+// Client yield timeout in miliseconds:
+#define YIELD_TIMEOUT_MS                                                    1000
+// Maximum number of networks to scan for:
+#define MAX_NETWORKS                                                          15
+// Small delay for network information printing:
+#define PRINTF_DELAY_MS                                                       10
+ 
+ 
+// Left potentiometer:
+AnalogIn pot1(MB_POT1);
+// Left button on the motherboard:
+InterruptIn sw1(MB_SW1);
+// Right LED on the motherboard:
+DigitalOut led2(MB_LED2);
+// Pointer to a WiFi network object:
+WiFiInterface *wifi;
+// Creating TCP socket:
+TCPSocket socket;
+// Creating MQTT client using the TCP socket;
+MQTTClient client(&socket);
+// Message handler:
+MQTT::Message message;
+ 
+char* topic = " pubpim";
+char* topic_sub = " subpim";
+// Counter of arrived messages:
+int arrivedcount = 0;
+// Flag indicating that button is not pressed:
+int button_pressed=0;
+// HiveMQ broker connectivity information:
+const char* hostname = "pim-24";
+int port = 1883;
+// Returning a string for a provided network encryption: 
+const char *sec2str(nsapi_security_t sec)
+{
+    switch (sec) 
+    {
+        case NSAPI_SECURITY_NONE:
+            return "None";
+        case NSAPI_SECURITY_WEP:
+            return "WEP";
+        case NSAPI_SECURITY_WPA:
+            return "WPA";
+        case NSAPI_SECURITY_WPA2:
+            return "WPA2";
+        case NSAPI_SECURITY_WPA_WPA2:
+            return "WPA/WPA2";
+        case NSAPI_SECURITY_UNKNOWN:
+        default:
+            return "Unknown";
+    }
+}
+ 
+int scan_networks(WiFiInterface *wifi)
+{
+    printf("Scan:\n");
+    
+    // Scan only for the number of networks, first parameter is NULL:
+    int count = wifi->scan(NULL, 0);
+    // If there are no networks, count == 0, if there is an error, counter < 0:
+    if (count <= 0)
+    {
+        printf("scan() failed with return value: %d\n", count);
+        return 0;
+    }
+ 
+    // Limit number of network arbitrary to some reasonable number:
+    count = count < MAX_NETWORKS ? count : MAX_NETWORKS;
+    
+    // Create a local pointer to an object, which is an array of WiFi APs:
+    WiFiAccessPoint *ap = new WiFiAccessPoint[count];
+    // Now scan again for 'count' networks and populate the array of APs:
+    count = wifi->scan(ap, count);
+    
+    // This time, the number of entries to 'ap' is returned:
+    if (count <= 0) 
+    {
+        printf("scan() failed with return value: %d\n", count);
+        return 0;
+    }
+    
+    // Print out the parameters of each AP:
+    for (int i = 0; i < count; i++) 
+    {
+        printf("Network: %s secured: %s BSSID: %hhX:%hhX:%hhX:%hhx:%hhx:%hhx RSSI: %hhd Ch: %hhd\n", ap[i].get_ssid(),
+               sec2str(ap[i].get_security()), ap[i].get_bssid()[0], ap[i].get_bssid()[1], ap[i].get_bssid()[2],
+               ap[i].get_bssid()[3], ap[i].get_bssid()[4], ap[i].get_bssid()[5], ap[i].get_rssi(), ap[i].get_channel());
+        thread_sleep_for(PRINTF_DELAY_MS);
+    }
+    printf("%d networks available.\n", count);
+    
+    // Since 'ap' is dynamically allocated pointer to the array of objects, it
+    // needs to be deleted:
+    delete[] ap;
+    return count;
+}
+ 
+void messageArrived(MQTT::MessageData& md)
+{
+    MQTT::Message &message = md.message;
+    //printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id);
+    printf("Message from the browser: %.*s\r\n", message.payloadlen, (char*)message.payload);
+    ++arrivedcount;
+}
+ 
+void buttonFunction() {
+    
+    button_pressed=1;
+   
+}
+ 
+int main()
+{
+    // Set the interrupt event:
+    sw1.fall(&buttonFunction); 
+    
+    // Create a default network interface:
+    wifi = WiFiInterface::get_default_instance();
+    if (!wifi) {
+        printf("ERROR: No WiFiInterface found.\n");
+        return -1;
+    }
+    
+    // Scan for available networks and aquire information about Access Points:
+    int count = scan_networks(wifi);
+    if (count == 0) {
+        printf("No WIFI APs found - can't continue further.\n");
+        return -1;
+    }
+    
+    // Connect to the network with the parameters specified in 'mbed_app.json':
+    printf("\nConnecting to %s...\n", MBED_CONF_APP_WIFI_SSID);
+    int ret = wifi->connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2);
+    if (ret != 0) {
+        printf("\nConnection error: %d\n", ret);
+        return -1;
+    }
+    
+    // Print out the information aquired:
+    printf("Success\n\n");
+    printf("MAC: %s\n", wifi->get_mac_address());
+    printf("IP: %s\n", wifi->get_ip_address());
+    printf("Netmask: %s\n", wifi->get_netmask());
+    printf("Gateway: %s\n", wifi->get_gateway());
+    printf("RSSI: %d\n\n", wifi->get_rssi());   
+    
+    // Open TCP socket using WiFi network interface:
+    socket.open(wifi);
+    // Connect to the HiveMQ broker:
+    socket.connect(hostname, port);
+    // Fill connect data with default values:
+    MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
+    // Change only ID and protocol version:
+    data.MQTTVersion = 3;
+    data.clientID.cstring = "NUCLEO-L476RG-60";
+    
+    // Connect the 
+    int rc = 0;
+    if ((rc = client.connect(data)) != 0)
+        printf("rc from MQTT connect is %d\r\n", rc);
+ 
+    if ((rc = client.subscribe(topic_sub, MQTT::QOS2, messageArrived)) != 0)
+        printf("rc from MQTT subscribe is %d\r\n", rc);
+      
+    while (true) {
+        // Show that the loop is running by switching motherboard LED2:
+        led2 = !led2;
+        thread_sleep_for(BLINKING_RATE_MS);
+        if (button_pressed==1) {
+            button_pressed=0;      
+            // QoS 0
+            char buf[100];
+            sprintf(buf, "V(POT1) = %1.2f\r\n", pot1*VOLTAGE_SCALER);
+            message.qos = MQTT::QOS0;
+            message.retained = false;
+            message.dup = false;
+            message.payload = (void*)buf;
+            message.payloadlen = strlen(buf)+1;
+            client.publish(topic, message);
+        }
+        // Need to call yield API to maintain connection:
+        client.yield(YIELD_TIMEOUT_MS);
+    }
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-mqtt.lib	Mon Jan 17 16:12:11 2022 +0000
@@ -0,0 +1,1 @@
+https://github.com/ARMmbed/mbed-mqtt/#7fa219e87b3355e8a6fd281659697fe3a0c87630
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed-os.lib	Mon Jan 17 16:12:11 2022 +0000
@@ -0,0 +1,1 @@
+https://github.com/ARMmbed/mbed-os/#e4b81f67f939a0c0b11c147ce74aa367271e1279
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed_app.json	Mon Jan 17 16:12:11 2022 +0000
@@ -0,0 +1,25 @@
+{
+    "config": {
+        "wifi-ssid": {
+            "help": "WIFI SSID",
+            "value": "\"cvele97\""
+        },
+        "wifi-password": {
+            "help": "Wifi Password",
+            "value": "\"ekonomskitigar2022\""
+        }
+    },
+    "target_overrides": {
+        "*": {
+            "platform.stdio-convert-newlines": true
+        },
+        "NUCLEO_L476RG": {
+            "target.network-default-interface-type": "WIFI",
+            "esp8266.tx"                           : "PC_4",
+            "esp8266.rx"                           : "PC_5",
+            "esp8266.provide-default"              : true,
+            "drivers.uart-serial-rxbuf-size"       : 1024,
+            "drivers.uart-serial-txbuf-size"       : 1024
+        }
+    }    
+}
\ No newline at end of file