Go Down

Topic: fai questo, ma anche questo ....... (Read 722 times) previous topic - next topic

arduinh3nk3r

ho fatto un programma in vb6 che invia un stringa ad arduino che riconosciuta
deve accedere 2 gialli fissi, e dopo 3 secondi  accendere e lampeggiare 4 led bianchi.
poi spegnere (sempre con comando che arriva da vb6 e questo e tutto ok) prima i 4 bianchi lampeggianti e dopo 5 secondi  i due led gialli fissi.
Code: [Select]

/*
accensione di 3 led e successivamente di 5 connesso sulla porta 12 e 11
da un comando inviato da VB6 sulla porta seriale (com4).


http://arduino.cc/forum/index.php/topic,59472.0.html

*/

#define led 12  // led connesso al pin n°12
#define led2 11  // led connesso al pin n°11
byte carattere = 0;    // variabile per contenere il carattere ricevuto


void setup()
{
    Serial.begin(9600); // imposto la UART per lavorare a 9600
    pinMode(led, OUTPUT); // imposto il pin sul quale è collegato il led come uscita
    pinMode(led2, OUTPUT); // imposto il secondo pin sul quale è collegato il led come uscita
    Serial.flush(); // svuoto il buffer di ricezione seriale
}

void loop()
{
    if (Serial.available() >0) // Controllo se il buffer di ricezione contiene qualcosa
    {
        carattere = Serial.read(); // leggo il carattere ricevuto e lo memorizzo in carattere
Serial.flush(); // svuoto il buffer di ricezione seriale
    }

    if (carattere=='A'  || carattere=='a') // ho ricevuto la A maiuscola o minuscola
    {
                Serial.println("Attivita' iniziata ");
                delay(500);
      digitalWrite(led,HIGH); // accendo 2 led gialli collegati alla porta 12
                delay(500);
        digitalWrite(led2,HIGH); // accendo 4 led bianchi collegati alla porta 11
                delay(500);
//Serial.print(carattere,BYTE); stampa (invia) il carattere in seriale
    }

    if (carattere=='C'  || carattere=='c') // ho ricevuto la C maiuscola o minuscola
    {
                Serial.println("Attivita' interrotta ");
                delay(500);
                digitalWrite(led2,LOW); // spengo 5 led azzurri collegati alla porta 11
                delay(500);
                digitalWrite(led,LOW); // spengo 3 led gialli collegati alla porta 12
               
                //Serial.print("Attivita' interrotta"); // invio messaggio in seriale
         }
               
    else { // qui ho deciso che in tutte le altre possibilita' resti spento

        digitalWrite(led,LOW); // spengo i 2 led gialli collegati alla porta 12
digitalWrite(led2,LOW); // spengo i 4 led bianchi collegati alla alla porta 11
    }
   
}


questo sopra e una modifica cercando di fare quello detto sopra ma nienteeeeeeeeee.
:smiley-red:
programma visual basic 6 tutto ok
Problema: non riesco a far stare fissi i gialli mentre i bianchi lampeggiano e ho problemi con la temporizzazione differenziata

nel circuito ho usato dei transistor per salvaguardare le porte arduino.

Chi mi aiuta?   ;) ;)



BrainBooster

hai problemi perchè usi delay.
Prova ad usare millis ;)
parti da qui:
http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
per capire la logica di come funziona.

arduinh3nk3r

grazie siete troppi gentili in questo foum. non si fa a tempo di chiedere che avete già risposto.

;) ;) ;) ;)

nel caso qualcuno avesse qualche idea ...........  :smiley-mr-green: :smiley-mr-green: :smiley-mr-green: postate qualche esempio

granzie ancora

sciorty

Ciao, anche io uso il vb e già tempo fa ero incuriosito dall'interfacciamento di questo con arduino. Ho scaricato i vari componenti come firmatavb analogpincontrol ecc. ecc. ma mi sembrano un po' confusionali.. non c'è un modo (o magari qualche esempio diretto) per inviare solamente una 'c' sul seriale di arduino ?
mi scuso per la domanda sulla tua domanda :D

sciorty

Scusate il doppio post, ma con un po' di pazienza ho ottenuto quello che volevo  :smiley-sweat:
Scrivo due righe per chi come me non vuole perdersi in quei componenti ma vuole solo inviare una semplice stringa tramite seriale !

Aprendo una windows form prendete il componente Serialport e lo aggiungete alla form (SerialPort1).
Nella proprietà "name" mettete il nome della porta a cui avete collegato arduino e in quella "baudrate" lo stesso baud rate del serial di arduino. 
Ora le istruzioni per accendere un singolo led sono due: Serialport1.open() e Serialport1.write()
La prima serve per inizializzare la comunicazione, la seconda per scrivere sul Serial di arduino.
Detto questo ci si può andare di fantasia mettendo bottoni o intercettando gli eventi keydown (cosa molto carina per pilotare i servo secondo me!)
Spero di essere stato utile nel mio piccolo !

arduinh3nk3r

ciao sciorty ;)

tutto e utile e tutti nel suo "piccolo" (gli altruisti sopratutto)  danno una mano per essere "grandi".

Volevo però sottolineare che non ho problemi con vb6 anzi e fantastico interagire tra vb6 e "C" di Arduino.

la mia domanda era un altra, riguardava la possibilità di fare accendere 2 led gialli fissi (pin 12) , e dopo 3 secondi far lampeggiare 4 led bianchi (pin 11), quando Arduino si accorge che vb6 gli dici di andare a livello high.  poi spegnere 4 led bianchi lampeggianti (pin11) e dopo 3 secondi spegnere i led gialli (pin 12) quando Arduino si accorge che vb6 gli dici di andare a livello low.

mi hanno detto che il mio errore e il delay e devo usare millis e speravo in un esempio perche ho sempre usato delay.
nei post iniziali ce un codice di esempio con il delay.
grazie comunque

ratto93

millis l'ho usato una sola volta e per esperimento...
il delay mette "in pausa" il programma intero....o meglio lo ferma e poi riprende dopo la pausa indicata millis usa un timer e restituisce un valore preciso...
(se non sbaglio inizia a contare dal momento dell'accensione...)
Se corri veloce come un fulmine, ti schianterai come un tuono.

leo72

Negli esempi distribuiti con l'IDE c'è proprio l'uso di millis per far lampeggiare un led. Si trova nella categoria Digital.


arduinh3nk3r

#9
Jul 03, 2011, 03:05 pm Last Edit: Jul 03, 2011, 06:04 pm by arduinh3nk3r Reason: 1
sto cercando di sistemare il codice con millis anche se ho capito la differenza tra delay e millis non lo digerisco questo millis.
qui sotto il codice:

Go Up