Problema con il contatore

di Alien il
12 risposte

Salve

Premetto che ho informazioni molto limitate su questo programma pero' con quelle poche sono riuscito tramite arduino e utilizzando firmata  a completare un programma. .
Quello che  ho notato e' che utilizzando un contatore (funziona con un codice primitivo fatto da me)con arduino non sbaglia un colpo con firmata non ne conteggia alcune.
Ho fatto diverse prove e mi sembra che diminuendo la velocita' di discesa (capsule) queste siano con firmata contate tutte..Ottengo questo facendo scendere le capsule posizionandole a mano vicino al contatore per diminuire la v di uscita.Potrebbe essere questo l'inghippo?
In tal caso si puo' intervenire aggiungendo al codice firmata una correzione'
Ringrazio dell'attenzione
Saluti

12 Risposte

  • Salve

    Si tratta ,all'interno di un programma, del funzionamento di un contatore di piccoli oggetti es:(pastiglie,compresse,ecc.).Su arduino il contatore funziona bene.
    Ho rifatto il programma su firmata e riportando il codice di arduino  il contatore non funziona bene..Sembra che quando le capsule passano alla svelta non faccia in tempo a contarle tutte,al contrario di arduino che non presenta problemi.
    Mi chiedevo da cosa potesse dipendere.Il codice contatore e' elementare perche' le mie conoscenze in merito sono elementari
    Comunque ecco i codici su firmata e arduino:

    ...................................................................................
    contatore = FirmataVB1.DigitalRead(infrarosso)
     
    If contatore = LOW And provola = 0 Then
        count = count + 1
        TextBox2.Text = count
        provola = 1
    End If
    If contatore = HIGH And provola = 1 Then
        count = count + 0
        TextBox2.Text = count
        provola = 0
    End If ...........................................................
     
    ......................................................... 
    contatore=digitalRead(infrarosso);
       if ((contatore==LOW)&&(provola==0))
       { 
        count++;
         
        Serial.println(count);
         provola=1;
         
           }
         if ((contatore==HIGH)&&(provola==1))
         {
           count+1;
           //count=count+0;
          
          provola=0;................................................. 
  • Nella prima If aggiungi una riga

    DoEvents

    Nella seconda If elimina le due righe

    count = count + 0
    TextBox2.Text = count

    Mail codice VB dove è stato inserito?

  • Ringrazio delle risposte e dei riferimenti sempre bene accetti.
    Ricordo che firmata e' un protocollo che permette di utilizzare i programmi di arduino utilizzando la piattaforma di visual basic arricchendo cosi' arduino con la veste grafica di visual basic.Il codice di firmata e' quasi identico a quello di arduino per cui se la risposta ad un pezzo di codice di arduino su firmata non funziona bene (come nel mio caso) puo' essere la non completa compatibilita'  del codice con firmata e visual basic oppure un'anomalia  nella velocita' di trasmissione differente tra le due piattaforme.
    Dalle vostre risposte mi sembra di intuire che sia meglio rivedere il codice per renderlo piu' idoneo con firmata cosa che adesso provo a fare.
    Nel caso della differente v di risposta se avete qualche idea.....
    grazie


    @sihsandrea
    Sai che forse potrei essere stato io quello del cacao non mi ricordo dato che di progetti ne ho fatti parecchi lasciati,ripresi ecc.

    Ho visto il video e mi viene un sospetto : Forse il problema e' nel stabilire un ritardo nel conteggio…….probabilmente richiesto da firmata……

    se fosse cosi' si complica perche' visual basic non accetta delay…bho!

    Ho provato su arduino il conteggio del primo sensore secondo il video e mi risulta che se una persona rimane accanto al sensore per piu' di 300 ms. il contatore va avanti a contare….

  • Guarda che firmata è semplicemente una libreria client e mi sembra che il tempo minimo di sampling deglj input sia di 19 ms

    Se i tuoi eventi sono più ravvicinati dovrai cambiare soluzione 

  • Grazie c'e' sempre da imparare

    Quindi l'inghippo potrebbe essere nella diversa v di conteggio per cui se due compresse passano e tra loro c'e' un tempo < 19 ms una potrebbe saltare.

    Se su arduino invece non si verifica questa situazione e vengono contate tutte e due il tempo “minimo” e' inferiore a 19 ms.?

    Scusa se mi esprimo in maniera superficiale ma conosco poco la programmazione.

    “Cambiare soluzione” cioe' lasciare perdere firmata per il conteggio ?

    P.S. Ho fatto le mofiche che mi hai consigliato : tutto bene.

  • È ovvio, con il codice c# eela libreria i segnali dall'input devono essere comunicati al PC e il tempo minimo di 19s mette in crisi eventuali eventi più veloci.

    Non puoi usare questa libreria se la velocità è un problema

  • Si il delay…

    Prima di intraprendere un qualsiasi progetto è bene documentarsi.

    Vita reale: per un ritardo nel pagamento di un contributo un amico si è fatto assistere da un contabile tanto preparato da non ripassare la normativa in causa ed è stato condannato a 6 mesi ridotti a 1 come domiciliare. In appello gli è stato consigliato un avvocato che prima di parlare e accettare l'incarico ha preso un paio di libri, ha studiato lo specifico ed ha fatto assolvere a formula piena il mio amico.

    Morale: non sentirti mai troppo preparato, i migliori si documentano SEMPRE prima di iniziare.

  • Ah, dimenticavo, valuta l'idea di utilizzare un buffer. Lasci che arduino faccia il lavoro e che poi comunichi al pc o programma il risultato.

  • 12/11/2024 - Alien ha scritto:


    “Cambiare soluzione” cioe' lasciare perdere firmata per il conteggio ?

    si. firmata lo usi per avviare il conteggio, suppongo anche comandare il rilascio del farmaco (sportelino o elica), fermare il conteggio, avviare un nuovo conteggio ecc…

    firmata permette il dialogo e i comandi ma il lavoro lo devi eseguire da arduino. 

    da firmata start, stop e leggi il conteggio.

    arduino riceve start, inizia a contare e appena riceve lo stop si ferma e invia il conteggio al pc.

  • @sihsandrea

     Con arduino il progetto e' finito e assolutamente funzionante, si tratta di comandare con  5 sensori   3 motori che garantiscono  l'autonomia delle operazioni

    che portano al riempimento di un certo numero di barattoli e il tutto pero' comandato da arduino senza grafica e con mezzo metro di codice.

    (Carico le compresse  e i barattoli vuoti in un contenitore do il via e escono i barattoli gia' riempiti con un numero programmabile)

    Il mio intento era quello di utilizzare bottoni e altro per rendere il progetto piu' completo. Ed ecco qui firmata.

    Anche qui sarebbe tutto funzionante con un interfaccia grafica   peccato che il conteggio delle capsule non sia preciso e mi domandavo il perche'

    E' stato scritto che probabilmente il motivo era nella    velocita' di esecuzione (come immaginavo ).

    Non voglio complicare  ulteriormente il tutto.

     Se sono qui e' per risolvere un problema. 

    Che tu sappia esiste una grafica per arduino semplice che potrebbe fare al mio caso? Ho pensato a processing da cui e' nato arduino ma non so se sia possibile utilizzare il listato di arduino non penso pur avendo pero' la possibilita' di creare grafiche molto belle.

    Grazie

    P.S. Ho letto ora la tua ultima risposta la sto valutando.

Devi accedere o registrarti per scrivere nel forum
12 risposte