0

Dependencies:   Cayenne-MQTT-mbed Servo nfc X_NUCLEO_IDW01M1v2 NetworkSocketAPI 13

Revision:
12:32dbf8ff8d80
Parent:
11:60c50eae8b81
Child:
13:7b3b429e9731
--- a/main.cpp	Sun Sep 01 15:50:42 2019 +0000
+++ b/main.cpp	Thu Sep 05 20:00:08 2019 +0000
@@ -7,10 +7,8 @@
 #include "XNucleoNFC01A1.h" // modul nfc
 #include "NDefLib/NDefNfcTag.h"
 #include "NDefLib/RecordType/RecordURI.h"
-
-AnalogIn ain(A0); 
-DigitalOut led1(LED1);
-DigitalOut wifiLed(LED3);
+#include "Servo.h"
+ 
 
 /* Instantiate the expansion board */
 static XNucleoIKS01A2 *mems_expansion_board = XNucleoIKS01A2::instance(D14, D15, D4, D5);
@@ -24,45 +22,52 @@
 char* password = "19f07b4d8806fe42bdda724980634f39d8e639ba";
 char* clientID = "bb8e7cc0-74b9-11e9-94e9-493d67fd755e";
 
+AnalogIn ain(A0); 
+DigitalOut myLed(LED2);
+Servo myservo(PA_6);
+DigitalOut actuatorPin2(PA_7);
+float voltageMultiplier = 5.0;
+int publishInterval = 1000;
+
 // WiFi network info.
 char* ssid = "Interneto";
 char* wifiPassword = "matu1234";
 
-/* Helper function for printing floats & doubles */
-static char *print_double(char* str, double v, int decimalDigits=2)
-{
-  int i = 1;
-  int intPart, fractPart;
-  int len;
-  char *ptr;
+// /* Helper function for printing floats & doubles */
+// static char *print_double(char* str, double v, int decimalDigits=2)
+// {
+//   int i = 1;
+//   int intPart, fractPart;
+//   int len;
+//   char *ptr;
 
-  /* prepare decimal digits multiplicator */
-  for (;decimalDigits!=0; i*=10, decimalDigits--);
+//   /* prepare decimal digits multiplicator */
+//   for (;decimalDigits!=0; i*=10, decimalDigits--);
 
-  /* calculate integer & fractinal parts */
-  intPart = (int)v;
-  fractPart = (int)((v-(double)(int)v)*i);
+//   /* calculate integer & fractinal parts */
+//   intPart = (int)v;
+//   fractPart = (int)((v-(double)(int)v)*i);
 
-  /* fill in integer part */
-  sprintf(str, "%i.", intPart);
+//   /* fill in integer part */
+//   sprintf(str, "%i.", intPart);
 
-  /* prepare fill in of fractional part */
-  len = strlen(str);
-  ptr = &str[len];
+//   /* prepare fill in of fractional part */
+//   len = strlen(str);
+//   ptr = &str[len];
 
-  /* fill in leading fractional zeros */
-  for (i/=10;i>1; i/=10, ptr++) {
-    if (fractPart >= i) {
-      break;
-    }
-    *ptr = '0';
-  }
+//   /* fill in leading fractional zeros */
+//   for (i/=10;i>1; i/=10, ptr++) {
+//     if (fractPart >= i) {
+//       break;
+//     }
+//     *ptr = '0';
+//   }
 
-  /* fill in (rest of) fractional part */
-  sprintf(ptr, "%i", fractPart);
+//   /* fill in (rest of) fractional part */
+//   sprintf(ptr, "%i", fractPart);
 
-  return str;
-}
+//   return str;
+// }
 
 /**
  * Write a Ndef URI message linking to st.com site.
@@ -124,9 +129,11 @@
 
     if (message.topic == COMMAND_TOPIC) {
         switch(message.channel) {
-        case 0:
-            // Set the onboard LED state
-            led1 = atoi(message.getValue());
+        case 4:
+            // Set the onboard LED state & actuator PIN
+            myLed = atoi(message.getValue());
+            
+            actuatorPin2 = atoi(message.getValue());
             // Publish the updated LED state
             if ((error = mqttClient.publishData(DATA_TOPIC, message.channel, NULL, NULL, message.getValue())) != CAYENNE_SUCCESS) {
                 printf("Publish LED state failure, error: %d\n", error);
@@ -173,8 +180,6 @@
     // Send device info. Here we just send some example values for the system info. These should be changed to use actual system data, or removed if not needed.
     mqttClient.publishData(SYS_VERSION_TOPIC, CAYENNE_NO_CHANNEL, NULL, NULL, CAYENNE_VERSION);
     mqttClient.publishData(SYS_MODEL_TOPIC, CAYENNE_NO_CHANNEL, NULL, NULL, "mbedDevice");
-    //mqttClient.publishData(SYS_CPU_MODEL_TOPIC, CAYENNE_NO_CHANNEL, NULL, NULL, "CPU Model");
-    //mqttClient.publishData(SYS_CPU_SPEED_TOPIC, CAYENNE_NO_CHANNEL, NULL, NULL, "1000000000");
 
     return CAYENNE_SUCCESS;
 }
@@ -184,16 +189,8 @@
 */
 void loop(void)
 {
-    if(network.connected())
-    {
-        wifiLed = 1;
-    } else
-    {
-        wifiLed = 0;
-    }
-    
     // Start the countdown timer for publishing data every 5 seconds. Change the timeout parameter to publish at a different interval.
-    MQTTTimer timer(2500);
+    MQTTTimer timer(publishInterval);
 
     while (true) {
         // Yield to allow MQTT message processing.
@@ -203,41 +200,30 @@
         if (!network.connected() || !mqttClient.connected()) {
             network.disconnect();
             mqttClient.disconnect();
-            printf("Reconnecting\n");
             while (connectClient() != CAYENNE_SUCCESS) {
-                wait(2);
-                printf("Reconnect failed, retrying\n");
+                wait(3);
             }
         }
 
-        // Publish some example data every few seconds. This should be changed to send your actual data to Cayenne.
+        // Publish data every few seconds. This should be changed to send your actual data to Cayenne.
         if (timer.expired()) {
             int error = 0;
             
             uint8_t id;
             float value1, value2;
-            char buffer1[32], buffer2[32];
+            // char buffer1[32], buffer2[32];
   
             /* Enable all sensors */
             hum_temp->enable();
             press_temp->enable();
-
+            hum_temp->read_id(&id);
+            press_temp->read_id(&id);
 
-            hum_temp->read_id(&id);
-            printf("HTS221  humidity & temperature    = 0x%X\r\n", id);
-            press_temp->read_id(&id);
-            printf("LPS22HB  pressure & temperature   = 0x%X\r\n", id);
-
-            printf("\r\n");
             hum_temp->get_temperature(&value1);
-            hum_temp->get_humidity(&value2);
-            printf("HTS221: [temp] %7s C,   [hum] %s%%\r\n", print_double(buffer1, value1), print_double(buffer2, value2));
-
-            press_temp->get_temperature(&value1);
+            // press_temp->get_temperature(&value1);
             press_temp->get_pressure(&value2);
-            printf("LPS22HB: [temp] %7s C, [press] %s mbar\r\n", print_double(buffer1, value1), print_double(buffer2, value2));
-            float voltage_read = ain.read();
-            printf("---\r\n");
+            // printf("LPS22HB: [temp] %7s C, [press] %s mbar\r\n", print_double(buffer1, value1), print_double(buffer2, value2));
+            float voltage_read = ain.read() * voltageMultiplier;
 
             if ((error = mqttClient.publishData(DATA_TOPIC, 1, TYPE_TEMPERATURE, UNIT_CELSIUS, value1)) != CAYENNE_SUCCESS) {
                 printf("Publish temperature failed, error: %d\n", error);
@@ -251,7 +237,7 @@
                 printf("Publish barometric pressure failed, error: %d\n", error);
             }
             // Restart the countdown timer for publishing data every 2 seconds. Change the timeout parameter to publish at a different interval.
-            timer.countdown_ms(2000);
+            timer.countdown_ms(publishInterval);
         }
     }
 }
@@ -261,25 +247,29 @@
 */
 int main()
 {   
-    printf("Initializing interface\n");
+    myLed = 0;
+    
+    actuatorPin2 = 0;
     interface.connect(ssid, wifiPassword, NSAPI_SECURITY_WPA2);
 
     // Set the default function that receives Cayenne messages.
     mqttClient.setDefaultMessageHandler(messageArrived);
+    
+    for(float p=0; p<1.0; p += 0.2) {
+        myservo = p;
+        wait(1.5);
+}
 
     // Connect to Cayenne.
     if (connectClient() == CAYENNE_SUCCESS) {
         // Run main loop.
         loop();
     }
-    else {
-        printf("Connection failed, exiting\n");
-    }
 
+        
     if (mqttClient.connected())
         mqttClient.disconnect();
     if (network.connected())
         network.disconnect();
-return 0;
-
+    return 0;
 }
\ No newline at end of file