Leggere un ingresso/uscita da VB6 e visualizzarlo

Sono alle prime esperienze con Arduino ,sono interessato ad usare Arduino per accendere dei carichi attraverso naturalmente dei relais ,e questo riesco a farlo tranquillamente,quello che non riesco a fare è di leggere lo stato degli ingressi/uscite e di visualizzarli in un una text box di Vb6 oppure di cambiare colore ad un quadrato per esempio disegnato in Vb6 ,quando cambia lo stato di un ingresso , chi mi aiuta ...?

:astonished:

devi farlo per forza in vb6??? e se invece utilizzi html??
se vuoi ti posto un codice dove puoi accendere un led e controlli lo stato.....

/*
 Web server preso dall'esempio dell'ide e modificato da me
 */

#include <SPI.h>
#include <Ethernet.h>
#include <WString.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x3A, 0xA3 };
byte ip[] = { 192,168,0,107 };

// Initialize the Ethernet server library
// with the IP address and port you want to use 
// (port 80 is default for HTTP):
Server server(80);

int analogChannel = 5; //pin analogico dell LM35
int ledpin = 8;  //pin del led
float tempC = 0;  //temperatura in gradi celsius
int ledstatus = 0;  //stato del led
int Clock = millis();
int IntervalloPing = 1300;//ogni 5 minuti controlla se c'è connessione
int TempoAttesa = 0;//Attesa ping


void setup()
{
  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  pinMode(analogChannel,INPUT); //input dell' LM35
  pinMode(ledpin,OUTPUT); //output del led
  Serial.begin(9600);
}

void loop()
{
 

  //leggiamo la temperatura
  tempC = (analogRead(analogChannel) * 4.88 * 100)/1024;
  // listen for incoming clients
  Client client = server.available();
  if (client) {
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    String readstring;  //stringa per la lettura dal browser
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        readstring.concat(c);    //aggiunge c alla stringa;
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          readstring.concat('\0');
          //controllo su seriale
          Serial.println("stringa: ");
          Serial.println(readstring);
          Serial.print("indexOf(led=1): ");
          Serial.println(readstring.indexOf("led=1"));
          Serial.print("indexOf(led=0): ");
          Serial.println(readstring.indexOf("led=0"));
          
          if(readstring.indexOf("led=1") == 6){
            digitalWrite(ledpin,HIGH);
            ledstatus = 1;
            Serial.println("LED ON");  //controllo
          }
          if(readstring.indexOf("led=0") == 6){
            digitalWrite(ledpin,LOW);
            ledstatus = 0;
            Serial.println("LED OFF"); //controllo
          }
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          //Creazione pagina web
          client.println("<html><head>");
          
          client.println("<title>Domotic-Arduino</title>");
          
          client.println("</head>");
          client.println("<body bgcolor=""black"" text=""white"">");
          
          client.println("<h1 align=""center"">Domotic-Home</h1><hr />");
          client.println("
");
          client.print("Temperatura interna : ");
          client.print((int)tempC);
          client.println(" C");
          client.println("

");
          client.println("<h3><a href=""/"">Aggiorna Sensore</a></h3>");
          client.println("
");
          client.println("<hr />");
          client.println("
");
          client.print("Comandi LED su pin ");
          client.println(ledpin);
          client.println("
");
          client.print("Stato LED :");
          if(ledstatus){
            client.println("<font color=""green""> ON</font>");
          }else{
            client.println("<font color=""red""> OFF</font>");
          }
          client.println("
");
          client.println("<h2><a href=""/?led=1"">ACCENDI</a> | <a href=""/?led=0"">SPEGNI</></h2>");
          
          client.println("</body></html>");
          
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        } 
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
  }
}

Spero che sia di aiuto!!!!! ho dato per scontato che usi l'ethernet shield..... in tutti i casi il codice lo puoi modificare!!!!! A presto, Fabio.

Ciao
per parlare con vb6 devi sfruttare le porte seriali e quindi devi usare il controllo mscomm per parlare via seriale all'arduino :wink:

Vi ringrazio per l'esempio in Html ,ma io devo usare per forza VB6 ,e sottolineo pure che ho usato mscomm per inviare e funziona correttamente ,quello di cui ho bisogno è qualche riga di codice testato per leggere un ingresso/uscita da arduino e visualizzare in Vb6 la variazione di questo come per esempio :accendo un led e ho il feedback in VB6 di led acceso ,grazie ancora per la pazienza di colui che mi dara' suggerimenti in codice.

passo la palla a qualcuno esperto di vb6, purtroppo non posso fare di più.......

Nessuno mi sa aiutare ? :stuck_out_tongue: =(

Questo è il codice che utilizzo per ricevere dati da arduino su un programma c#

time.Restart();
portaSeriale.DiscardInBuffer();
while (time.Elapsed.Seconds < 5)
            {
                try
                {
                    recieve = recieve + portaSeriale.ReadExisting();
                    if (recieve.IndexOf("\r\n")!=-1) { break; }
                }
                catch (TimeoutException) { };
            }
            textBox_RegistroEventi.Text = textBox_RegistroEventi.Text + "\r\nDati salvati:\r\n" + recieve + "\r\n";

aspetti cioè 5 sec in cui se c'è un nuovo dato lo accodo in recieve fino a che non finisce la riga, in tal caso esco. Dal c# a vb6 cambia poco quindi basta che modifiche alcuni punti

Private Sub MSComm1_OnComm()
Dim debugger As String
debugger = MSComm1.CommEvent
Debug.Print debugger
Dim strInput As Variant
  With MSComm1
    'controllo l'evento
    Select Case .CommEvent
      Case comEvReceive
        'mostro i dati in arrivo in un  textbox
       ' strInput = .Input
      strInput = StrConv(MSComm1.Input, vbUnicode) & MSComm1.Input
        Text1.Text = Text1.Text & strInput
        If Len(Text1.Text) >= 65534 Then Text1.Text = ""
        If Len(Text1.Text) >= 1 Then Text1.SelStart = Len(Text1.Text) - 1
    End Select
  End With 'MSComm1
End Sub

questa routine usa l'oggetto mscomm ed un textbox per visualizzare i dati in entrata con vb, se vuoi che i dati , poi abbiano anche un significato usabile dal tuo software devi stabilire/creare un protocollo di comunicazione fra arduino e il programma sul pc e poi scrivere un parser per il tuo protocollo per permettere al programma in vb di interpretare i dati in arrivo e reagire di conseguenza.
per esempio, se con arduino trasmetto via seriale la riga A1=1024 \r \n al mio programma sul pc dovrò insegnare che A vuol dire analog , 1 è il numero del canale e l'= preannuncia che il prossimo è il valore letto e così la stessa cosa dovrà fare arduino se vuoi un controllo bidirezionale

Ringrazio BrainBooster per la pazienza che ha e che avra' nell applicare un esempio allo sketch che accende il led13 di arduino e vorrei visualizzare un command button di accensione del led che cambia colore dopo avere acceso il led ,ritornare normale appunto alla pressione di spegni led,spero no sia una richiesta esagerata...grazie ancora della pazienza :drooling_face:

paolocrosta Hai posta.