Example of how use the Nucleo board with a processing GUI program. Processing code in the description section of mbed program.

Dependencies:   mbed

Revision:
0:842c6c950cf5
Child:
1:b89267dee6da
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Sat Jul 18 09:36:26 2015 +0000
@@ -0,0 +1,233 @@
+/*===========================================================================================================
+  =                 Example of how use the Nucleo board with a processing GUI program                       =
+  =                                 Processing code                                                         =
+    import g4p_controls.*; // GUI library
+    import processing.serial.*; //serial library
+    int rosso, verde, blu;
+    int valoreSliderRosso,valoreSliderVerde,valoreSliderBlu;
+    String   porta;
+
+    Serial nucleoPort;
+    GCustomSlider sdrRosso, sdrVerde, sdrBlu; //  sliders creation
+    GButton btnRosso, btnVerde, btnBlu, btnConnetti;//buttons creation
+    GLabel Rosso, Verde, Blu, Porte; //labels creation
+    GDropList sceltaPorta;//port selector creation
+    void setup() {
+     size(500, 320);  
+     frame.setTitle("Nucleo RGB Color");
+    //=============================================================
+    // sliders
+    sdrRosso = new GCustomSlider(this, 20, 30, 380, 50, null);
+    sdrRosso.setShowDecor(false, false, true, true);
+    sdrRosso.setNbrTicks(5);
+    sdrRosso.setLimits(0, 0, 255);
+    valoreSliderRosso=0;
+
+    sdrVerde = new GCustomSlider(this, 20, 90, 380, 50, null);
+    sdrVerde.setShowDecor(false, false, true, true);
+    sdrVerde.setNbrTicks(5);
+    sdrVerde.setLimits(0, 0, 255);
+    valoreSliderVerde=0;
+  
+    sdrBlu = new GCustomSlider(this, 20, 150, 380, 50, null);
+    sdrBlu.setShowDecor(false, false, true, true);
+    sdrBlu.setNbrTicks(5);
+    sdrBlu.setLimits(0, 0, 255);
+    valoreSliderBlu=0;
+  
+    //=============================================================
+    //label
+    Rosso = new GLabel(this, 150, 10, 110, 50);
+    Rosso.setText("Red");
+    Rosso.setTextBold();  
+  
+    Verde = new GLabel(this, 150, 70, 110, 50);
+    Verde.setText("Green");
+    Verde.setTextBold(); 
+  
+    Blu = new GLabel(this, 150, 130, 110, 50);
+    Blu.setText("Blue");
+    Blu.setTextBold(); 
+   
+    Porte = new GLabel(this, 285, 180, 110, 50); 
+    Porte.setText("Port Selection");
+    Porte.setTextBold(); 
+  
+    //=============================================================
+    //buttons
+    btnRosso = new GButton(this, 20, 220, 80, 40, "Red");
+    btnRosso.setTextBold();
+    btnRosso.setLocalColorScheme(5);
+  
+    btnVerde  = new GButton(this, 110, 220, 80, 40, "Green");
+    btnVerde.setTextBold();
+    btnVerde.setLocalColorScheme(5);
+  
+    btnBlu = new GButton(this, 210, 220, 80, 40, "Blue");
+    btnBlu.setTextBold();
+    btnBlu.setLocalColorScheme(5);
+  
+    btnConnetti = new GButton(this, 300, 240, 80, 20, "Connect");
+    btnConnetti.setTextBold();
+    btnConnetti.setLocalColorScheme(7);  
+
+   //=============================================================
+   //serial port
+  
+    sceltaPorta = new GDropList(this,300,220,80,50,3);
+    sceltaPorta.setItems(Serial.list(),0);//serial port aviable list
+    porta = sceltaPorta.getSelectedText(); 
+    nucleoPort = new Serial(this, porta, 9600); //serial port assignament
+    //initialization
+    while (nucleoPort.available()<0){
+    setZero();}
+  
+  }
+void draw() {
+ //background color
+ background(68, 111, 216);
+ //=============================================================
+ //color boxes
+ //red
+  strokeWeight(2);
+  stroke(104, 104, 255);
+  rosso=sdrRosso.getValueI();
+  fill(rosso, 0, 0);
+  rect(400,40,40,40,7);
+
+ //green
+  strokeWeight(2);
+  stroke(104, 104, 255);
+  verde=sdrVerde.getValueI();
+  fill(0, verde, 0);
+  rect(400,100,40,40,7);
+
+ //blue 
+  strokeWeight(2);
+  stroke(104, 104, 255);
+  blu=sdrBlu.getValueI();
+  fill(0, 0, blu);
+  rect(400,160,40,40,7);
+  
+  //mixed
+  strokeWeight(2);
+  stroke(120, 120, 255);
+  fill(rosso, verde, blu);
+  rect(400,220,80,80,7);
+
+if ((valoreSliderRosso == rosso) && (valoreSliderVerde == verde) && (valoreSliderBlu ==blu)){}
+else{
+      //send values
+      mouseReleased();
+    }
+}
+
+public void handleButtonEvents(GButton button, GEvent event) { 
+  //buttons actions
+  if (button == btnConnetti){
+    porta = sceltaPorta.getSelectedText();
+    nucleoPort = new Serial(this, porta, 9600);  println(porta);}
+  else if (button == btnBlu){
+    nucleoPort.write('B');
+    nucleoPort.write(255);
+        delay(100);
+    nucleoPort.write('R');
+    nucleoPort.write(0);
+        delay(100);
+    nucleoPort.write('G');
+    nucleoPort.write(0);
+      delay(100);}
+  else if (button == btnVerde){
+    nucleoPort.write('G');
+    nucleoPort.write(255);
+    delay(100);
+    nucleoPort.write('R');
+    nucleoPort.write(0);
+    delay(100);    
+    nucleoPort.write('B');
+    nucleoPort.write(0);
+    delay(100);}  
+  else if (button == btnRosso){
+    nucleoPort.write('R');
+    nucleoPort.write(255);
+    delay(100);
+    nucleoPort.write('B');
+    nucleoPort.write(0);
+    delay(100);
+    nucleoPort.write('G');
+    nucleoPort.write(0);
+    delay(100);
+    }    
+
+}
+void setZero(){
+  nucleoPort.write('G');
+  nucleoPort.write(0);
+  nucleoPort.write('R');  
+  nucleoPort.write(0);
+  nucleoPort.write('B');
+  nucleoPort.write(0);
+}
+void mouseReleased(){
+  nucleoPort.write('G');
+  nucleoPort.write(verde);
+  valoreSliderVerde=verde;  
+
+  nucleoPort.write('R');  
+  nucleoPort.write(rosso);
+  valoreSliderRosso=rosso;
+
+  nucleoPort.write('B');
+  nucleoPort.write(blu);
+  valoreSliderBlu=blu;}
+  ========================================================================================================*/
+
+
+
+// Nucleo program
+#include "mbed.h"
+PwmOut red(D10);
+PwmOut green(D11);
+PwmOut blue(D12);
+Serial Processing(USBTX, USBRX);
+float mapRed,mapGreen,mapBlue;
+char c;
+int val;
+float map(int value, float x_min, float x_max, float y_min, float y_max)    
+{                                
+    return (y_min + (((y_max - y_min)/(x_max - x_min)) * (value - x_min))); 
+}   
+int main(){
+    red = 1;
+    wait(0.2);
+    red = 0;
+    green = 1;
+    wait(0.2);
+    green = 0;
+    blue = 1;
+    wait(0.2);
+    blue = 0;
+    Processing.baud(9600);
+    while(1){
+    if (Processing.readable()==1){
+        c=Processing.getc();
+        if (c != 'E'){  
+        if (c=='R'){
+            val = Processing.getc();
+            mapRed=map( val, 0, 255, 0, 1);
+            red.write(mapRed);}
+        else if ( c == 'G'){
+            val = Processing.getc();
+            mapGreen = map( val, 0, 255, 0, 1);
+            green.write(mapGreen);}
+        else if ( c == 'B'){
+            val = Processing.getc();
+            mapBlue = map( val, 0, 255, 0, 1);
+            blue.write(mapBlue);}
+        else {}
+                        }
+        else {}
+            }         
+        }    
+    }
+    
\ No newline at end of file