Nucleo by Cach

Dependencies:   C12832 CANnucleo LM75B mbed

Fork of CANnucleo_Hello by Zoltan Hudak

Revision:
10:d295b0df4b82
Parent:
7:2dce8ed51091
--- a/main.cpp	Wed Dec 23 10:38:02 2015 +0000
+++ b/main.cpp	Fri Jan 29 16:58:28 2016 +0000
@@ -22,15 +22,17 @@
 
 #include "mbed.h"
 #include "CAN.h"
+#include "C12832.h"
+#include "LM75B.h"
 
 #define BOARD1    1                 // comment out this line when compiling for board #2
 
 #if defined(BOARD1)
     #define RX_ID   0x100
-    #define TX_ID   0x101
+    #define TX_ID   0x7FF
 #else
     #define RX_ID   0x101
-    #define TX_ID   0x100
+    #define TX_ID   0x7FF
 #endif
 
 // See wiki page <https://developer.mbed.org/users/hudakz/code/CAN_Nucleo_Hello/>
@@ -42,6 +44,15 @@
     DigitalOut  led(LED1);
 #endif
 
+    DigitalIn fire(D4);
+    C12832 lcd(D11, D13, D12, D7, D10);
+    LM75B sensor(D14,D15);
+    AnalogIn pot1 (A0);
+    AnalogIn pot2 (A1);
+    PwmOut r (D5);
+    PwmOut g (D8);
+    PwmOut b (D9);
+      
 int             ledReceived;
 Timer           timer;
 CAN             can(PA_11, PA_12);  // CAN Rx pin name, CAN Tx pin name, Automatic recovery from bus-off state enabled by default
@@ -57,6 +68,7 @@
  * @param   
  * @retval  
  */
+ 
 void onMsgReceived() {
     msgAvailable = true;
 }
@@ -70,7 +82,7 @@
 int main() {
     can.frequency(1000000);                     // set bit rate to 1Mbps
     can.attach(&onMsgReceived, CAN::RxIrq);     // attach 'CAN receive-complete' interrupt handler
-    
+    char buff_2[8];
 #if defined(BOARD1)
     #if defined(TARGET_STM32F103C8T6)
         led = 0;    // turn LED on
@@ -85,24 +97,39 @@
         led = 0;    // turn LED off
     #endif
 #endif
-
+    lcd.cls();
     while(1) {
-        if(timer.read() >= 1.0) {               // check for timeout
+        wait (0.1);
+        lcd.cls();
+        lcd.locate(0,3);
+        lcd.printf("%d %d %d",char(sensor.temp()),char(pot1*255.0), char(pot2*255.0));
+        lcd.locate(0,14);
+        lcd.printf("I:%dF:%dl:%d Data:", rxMsg.id, rxMsg.type, rxMsg.len);
+        for(int i = 0; i < rxMsg.len; i++)
+        {
+            lcd.printf("%x", buff_2[i]);
+        }
+        if(fire) {               // check for timeout
             timer.stop();                       // stop timer
             timer.reset();                      // reset timer (to avaoid repeated send)
             counter++;                          // increment counter
             txMsg.clear();                      // clear Tx message storage
             txMsg.id = TX_ID;                   // set ID
-            txMsg << counter;                   // append first data item (make sure that CAN message total data lenght <= 8 bytes!)
-            txMsg << led.read();                // append second data item (make sure that CAN message total data lenght <= 8 bytes!)
+            txMsg << char(sensor.temp());                   // append first data item (make sure that CAN message total data lenght <= 8 bytes!)
+            txMsg << char(0x00);
+            txMsg << char(pot1*255.0);                // append second data item (make sure that CAN message total data lenght <= 8 bytes!)
+            txMsg << char(pot2*255.0); 
             can.write(txMsg);                   // transmit message
             printf("CAN message sent\r\n");
             
+           
+            
             #if defined(TARGET_STM32F103C8T6)
                 led = 1;                        // turn LED off
             #else
                 led = 0;                        // turn LED off
             #endif
+            while(fire);
         }
         if(msgAvailable) {
             msgAvailable = false;               // reset flag for next use
@@ -112,9 +139,19 @@
             printf("  Type   = %d\r\n", rxMsg.type);
             printf("  Format = %d\r\n", rxMsg.format);
             printf("  Length = %d\r\n", rxMsg.len);
-            printf("  Data   =");            
+            printf("  Data   =");      
+            lcd.locate(0,14);
+            lcd.printf("I:%dF:%dl:%d", rxMsg.id, rxMsg.type, rxMsg.len);    
+            
             for(int i = 0; i < rxMsg.len; i++)
-                printf(" %x", rxMsg.data[i]);
+            {
+                lcd.printf(" %x", rxMsg.data[i]);
+                buff_2[i] =  rxMsg.data[i];
+            }   
+            r = (rxMsg.data[0]/255.0);
+            g = (rxMsg.data[1]/255.0);
+            b = (rxMsg.data[2]/255.0);
+            if(rxMsg.data[0] == 1) lcd.cls();
             printf("\r\n");            
             if(rxMsg.id == RX_ID) {             // if ID matches
                 rxMsg >> counter;               // extract first data item