My first attempt to play with the RPC commands and a Visual Basic 2008 program.

Dependencies:   EthernetNetIf HTTPServer RPCInterface TextLCD mbed

Fork of RPC_HTTP by Fernando Machado

Revision:
2:15c92a540ad2
Parent:
1:71b64a776133
Child:
3:4b05781a0988
--- a/HTTPServerExample.cpp	Thu Sep 09 13:47:59 2010 +0000
+++ b/HTTPServerExample.cpp	Mon Oct 29 21:25:42 2012 +0000
@@ -1,39 +1,98 @@
-/*
-Copyright (c) 2010 ARM Ltd
- 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
- 
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
- 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-*/
+/* Funcionou com os arquivos 'RPCdemo.htm' e 'mbedRPC.js' na raiz do Mbed */
+/* Funcionou com os arquivos  'launch.htm e 'mbedapp.jar' na raiz do Mbed */
+/* Funcionou com o prg escrito em VB */
+
 #include "mbed.h"
 #include "EthernetNetIf.h"
 #include "HTTPServer.h"
+#include "RPCVariable.h"
+#include "RPCFunction.h"
+#include "TextLCD.h"
 
+TextLCD lcd(p21, p22, p23, p24, p25, p26); // rs, e, d4-d7
+
+AnalogIn ain1(p15);
+AnalogIn ain2(p16);
+
+float temp;
+float volt;
+
+using namespace mbed;
+
+//***************************************************************
+//Create a function of the required format LER DATA e HORA
+void DateHour(char * input, char * output);
+//Attach it to an RPC object
+RPCFunction LeDataHora(&DateHour, "LeDataHora");
+
+void DateHour(char * input, char * output)
+{
+    time_t seconds = time(NULL);
+    sprintf(output, "%s", ctime(&seconds));
+}
+//***************************************************************
+//Create a function of the required format CONTROLA BRILHO do LED
+void dimLed(char * input, char * output);
+//Attach it to an RPC object
+RPCFunction rpc_dimLed(&dimLed, "LedDimmer");
+
+void dimLed(char * input, char * output)
+{
+    float x;
+    sscanf(input, "%f", &x);
+    PwmOut myLed4 (LED4);
+    myLed4 = x/100;
+    sprintf(output, "%f", x);
+}
+//**************************************************************
+// Função para ler voltagem do potenciometro
+void Levolt(char * input, char * output);
+
+RPCFunction Voltagem(&Levolt, "Voltagem");
+
+void Levolt(char * input, char * output)
+{
+//    float volt;
+    volt = ain1.read() * 3.3;
+    sprintf (output,"%2.2f", volt);
+}
+//**************************************************************
+// Função para ler a temperatura por meio de um LM35
+void Letemp(char * input, char * output);
+
+RPCFunction Temperatura(&Letemp, "Temperatura");
+
+void Letemp(char * input, char * output)
+{
+//    float temp;
+    temp = ain2.read() * 330;
+    sprintf (output, "%2.1f", temp);
+}
+//**************************************************************
+
+//Primeiro: crio as variaveis que vou usar via RPC
+//float f;
+//int i;
+//char c;
+//Segundo: associo as variaveis aos RPCVariable Object
+//RPCVariable<float> rpc_f(&f, "f");
+//RPCVariable<int> rpc_i(&i, "i");
+//RPCVariable<char> rpc_c(&c, "c");
+
+//Defino os led´s e o botão
 DigitalOut led1(LED1, "led1");
 DigitalOut led2(LED2, "led2");
 DigitalOut led3(LED3, "led3");
-DigitalOut led4(LED4, "led4");
+//DigitalOut led4(LED4, "led4");
+DigitalIn button1(p20, "button1");
 
 LocalFileSystem fs("webfs");
 
-EthernetNetIf eth;  
+EthernetNetIf eth;
 HTTPServer svr;
 
-int main() {
+int main()
+{
     Base::add_rpc_class<AnalogIn>();
     Base::add_rpc_class<AnalogOut>();
     Base::add_rpc_class<DigitalIn>();
@@ -46,41 +105,51 @@
     Base::add_rpc_class<BusInOut>();
     Base::add_rpc_class<Serial>();
 
-  printf("Setting up...\n");
-  EthernetErr ethErr = eth.setup();
-  if(ethErr)
-  {
-    printf("Error %d in setup.\n", ethErr);
-    return -1;
-  }
-  printf("Setup OK\n");
-  
-  FSHandler::mount("/webfs", "/files"); //Mount /webfs path on /files web path
-  FSHandler::mount("/webfs", "/"); //Mount /webfs path on web root path
-  
-  svr.addHandler<SimpleHandler>("/hello");
-  svr.addHandler<RPCHandler>("/rpc");
-  svr.addHandler<FSHandler>("/files");
-  svr.addHandler<FSHandler>("/"); //Default handler
-  //Example : Access to mbed.htm : http://a.b.c.d/mbed.htm or http://a.b.c.d/files/mbed.htm
-  
-  svr.bind(80);
-  
-  printf("Listening...\n");
-    
-  Timer tm;
-  tm.start();
-  //Listen indefinitely
-  while(true)
-  {
-    Net::poll();
-    if(tm.read()>.5)
-    {
-      led1=!led1; //Show that we are alive
-      tm.start();
+
+    printf("Setting up...\n\r");
+    EthernetErr ethErr = eth.setup();
+    if(ethErr) {
+        printf("Error %d in setup.\n\r", ethErr);
+        return -1;
     }
-  }
-  
-  return 0;
+    printf("Setup OK\n\r");
+
+    FSHandler::mount("/webfs", "/files"); //Mount /webfs path on /files web path
+    FSHandler::mount("/webfs", "/"); //Mount /webfs path on web root path
+
+    svr.addHandler<SimpleHandler>("/hello");
+    svr.addHandler<RPCHandler>("/rpc");
+    svr.addHandler<FSHandler>("/files");
+    svr.addHandler<FSHandler>("/"); //Default handler
+    //Example : Access to mbed.htm : http://a.b.c.d/mbed.htm or http://a.b.c.d/files/mbed.htm
+
+    svr.bind(80);
+
+    printf("Listening...\n\r");
 
+    Timer tm;
+    tm.start();
+    //Listen indefinitely
+    while(true) {
+        Net::poll();
+        if(tm.read()>.1) {
+            //led1=!led1; //Show that we are alive
+            printf("Funcionando...\n\r");
+
+            //time_t seconds = time(NULL);
+            //printf("Data e hora = %s\n\r", ctime(&seconds));
+
+            //f = 0.23;
+            //i =  i + 1;
+            //c = 'a';
+            volt = ain1.read() * 3.3;
+            temp = ain2.read() * 330; /* temp = ain.read() * 3.3 * 100; */
+            lcd.locate(0,0);
+            lcd.printf ("Voltagem= %2.2f V \n", volt);
+            lcd.locate(0,1);
+            lcd.printf ("Temp= %2.1f C \n", temp);
+
+            tm.start();
+        }
+    }
 }