spacer.png, 0 kB

Torna indietro   Roboitalia.com - Il primo portale in Italia sulla robotica amatoriale > Robotica di base > Arduino

Rispondi
 
Strumenti discussione Modalità  visualizzazioe
  #21  
Vecchio 10-03-2014, 10.13.05
L'avatar di marnic
marnic marnic non è collegato
Administrator
 
Data registrazione: 24-05-2002
Residenza: Monselice (PD)
Età : 57
Messaggi: 5,458
Potenza reputazione: 422
marnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua fama
Predefinito

Parti dal presupposto che un programma è talmente stupido che non sbaglia mai
Guarda DOVE gli dici di spegnersi.
Risali alla condizione per arrivare a quel DOVE
Controlla che la o le condizioni si avverino
__________________
Marnic
Roboitalia Staff
www.fabbrimarco.com
Rispondi citando
  #22  
Vecchio 10-03-2014, 11.54.16
L'avatar di Caronte
Caronte Caronte non è collegato
Administrator
 
Data registrazione: 15-10-2009
Residenza: Ferrara
Età : 50
Messaggi: 2,962
Potenza reputazione: 332
Caronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua fama
Predefinito

Citazione:
Orginalmente inviato da marnic Visualizza messaggio
Parti dal presupposto che un programma è talmente stupido che non sbaglia mai
Ed è assolutamente così.

Ho 30 minuti esatti e sto usando il netbook del mio socio mentre lui magna io ti scrivo (che è meglio...).

Abbiamo stabilito un range di 10 che ora cambierei semplificando il codice.

Ora devi ragionare su un range di 8 che è comunque per lo scopo accettabile.

Il codice che ti ho scritto per 'allarmare' il led dovrà ragionare su questo parametro ed escludere i successivi. La soluzione potrebbe essere molto più elegante secondo me con le matrici, ma finchè ragioniamo su 3 ingressi possiamo permetterci di usare quella easy fino ad ora adottata.


Il programma quindi lo strutturerei sul parametro 8.

Tutto la parte dell'allarme che ormai ben conosci devi riscriverla su quest'ultimo, cioè limitare usare 8 e limitare a 9 E NON OLTRE le condizioni successive, in sintesi: dal valore 10 inizia il lavoro normale.

se (if) il valore va da 0 a 8 (compreso e NON OLTRE) e NON supera 9....

Da 10 in poi iniziano le misurazioni perchè la scrematura degli ingressi l'hai già fatta sul valore numerico immediataemnte precedente.

Capisco che non è il massimo della chiarezza ma pensaci su.

Ora devo scappare. Dimmi se riesci a capire il senso di tutto ciò.

Ciao

Antonio
Rispondi citando
  #23  
Vecchio 10-03-2014, 12.50.50
michelozzo michelozzo non è collegato
Nuovo robottaro
 
Data registrazione: 03-03-2014
Residenza: Piombino
Età : 50
Messaggi: 26
Potenza reputazione: 0
michelozzo E' per ora ancora un mistero
Predefinito

Penso di avere capito. Oggi pomeriggio, se la mia occupazione del lunedì pomeriggio di babbo-sitter me lo consente, provo immediatamente, altrimenti in serata al rientro della mamma (scusate l'o. T.) Grazie infinite per il tempo che stai perdendo, michele
Rispondi citando
  #24  
Vecchio 10-03-2014, 17.17.01
michelozzo michelozzo non è collegato
Nuovo robottaro
 
Data registrazione: 03-03-2014
Residenza: Piombino
Età : 50
Messaggi: 26
Potenza reputazione: 0
michelozzo E' per ora ancora un mistero
Predefinito

Pensavo di aver capito ma non ne sono sicuro. Chiariscimi se sbaglio. La condizione 0-0-0 dovrebbe essere :<=8, <=8,<=8? E ad esempio la condizione 0-0-1 essere <=8,<=8, >8&&<=9, é così? Ciao e grazie (e scusa se non ho scritto bene ma sono in giro col telefono)
Rispondi citando
  #25  
Vecchio 10-03-2014, 18.47.29
L'avatar di Caronte
Caronte Caronte non è collegato
Administrator
 
Data registrazione: 15-10-2009
Residenza: Ferrara
Età : 50
Messaggi: 2,962
Potenza reputazione: 332
Caronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua fama
Predefinito

Citazione:
Orginalmente inviato da michelozzo Visualizza messaggio
Pensavo di aver capito ma non ne sono sicuro. Chiariscimi se sbaglio. La condizione 0-0-0 dovrebbe essere :<=8, <=8,<=8? E ad esempio la condizione 0-0-1 essere <=8,<=8, >8&&<=9, é così? Ciao e grazie (e scusa se non ho scritto bene ma sono in giro col telefono)
No! Provo a scriverti qualcosa così riesci a capire quello che voglio dire.

Ciao

Antonio
Rispondi citando
  #26  
Vecchio 10-03-2014, 19.02.57
bernie bernie non è collegato
Robottaro sostenitore
 
Data registrazione: 24-07-2003
Messaggi: 628
Potenza reputazione: 82
bernie E' sulla buona strada
Predefinito

Scusate se mi permetto , io con arduino sto iniziando , ma con i PLC , se voglio controllare un valore , non posso scrivere se A>= 10 vai a casa , se A<=10 vai al bar . nel caso che A sia uguale a 10 , la prima condizione letta dal programma è quella che si avvera , in quanto il programma va a casa . Qui se la variabile è uguale a 10 , tutte le condizioni sono vere . Io eliminerei qualche = .
Quindi se A>= 10 ............. seA<10 .................

Aloha
Rispondi citando
  #27  
Vecchio 10-03-2014, 19.41.39
L'avatar di Caronte
Caronte Caronte non è collegato
Administrator
 
Data registrazione: 15-10-2009
Residenza: Ferrara
Età : 50
Messaggi: 2,962
Potenza reputazione: 332
Caronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua famaCaronte La sua reputazione è oltre la sua fama
Predefinito

Codice:
// Acquiring 

  const int sensorPin = A0;
   const int sensorPin1 = A1;
      const int sensorPin2 = A2;
 
// Declaration Init State 

      int sensorValue = 0;
        int sensorValue1 = 0;
          int sensorValue2 = 0;
          
      
// Alarm & Dedicated Variable

int LedAlarm = 8;

int staTement = 0;

// Device

int LedDeviceOne = 9; // LED ESEMPIO! QUI CI PUOI FAR FARE QUELLO CHE VUOI QUANDO LA LETTURA SUPERA 11



                                                                    void setup() { // START 
    
    
    Serial.begin(9600);
 
          pinMode(LedAlarm, OUTPUT);                                                                       
                                                                                       
            pinMode(LedDeviceOne, OUTPUT);
                                                      }                            // END 

                                                                                 
 // ________________________________________________________________________________________________

                                                                    void loop() { // START LOOP 
      int sensorValue = 0;
        int sensorValue1 = 0;
          int sensorValue2 = 0;
   
    sensorValue = analogRead(sensorPin); // Read Input 1
      sensorValue1 = analogRead(sensorPin1); // Read Input 2
        sensorValue2 = analogRead(sensorPin2);  // Read Input 3
        
                                     delay(80);
        
        
// Error Manager ______________________________________________________________________________________     
        
 // Normal Condition 
       
 if ((sensorValue>=0) && (sensorValue<=6) 
      && (sensorValue1>=0) && (sensorValue1<=6) 
         &&(sensorValue2>=0) && (sensorValue2<=6))
                                                 {staTement = 0;}
           
 if ((sensorValue>=7) && (sensorValue<=10) 
      && (sensorValue1>=0) && (sensorValue1<=6) 
         &&(sensorValue2>=0) && (sensorValue2<=6))
                                                 {staTement = 0;}   
                                                
  if ((sensorValue>=0) && (sensorValue<=6) 
      && (sensorValue1>=7) && (sensorValue1<=10) 
         &&(sensorValue2>=0) && (sensorValue2<=6))
                                                 {staTement = 0;}  
                                                 
  if ((sensorValue>=0) && (sensorValue<=6) 
      && (sensorValue1>=0) && (sensorValue1<=6) 
         &&(sensorValue2>=7) && (sensorValue2<=10))
                                                 {staTement = 0;}                                            
                                           
                                                 
// Alarm Condition


  if ((sensorValue>=7) && (sensorValue<=10) 
      && (sensorValue1>=7) && (sensorValue1<=10) 
         &&(sensorValue2>=0) && (sensorValue2<=6))
                                                 {staTement = 1;}  
                                                 
                                                 
    if ((sensorValue>=0) && (sensorValue<=6) 
      && (sensorValue1>=7) && (sensorValue1<=10) 
         &&(sensorValue2>=7) && (sensorValue2<=10))
                                                 {staTement = 1;}       
  
  
    if ((sensorValue>=7) && (sensorValue<=10) 
      && (sensorValue1>=0) && (sensorValue1<=6) 
         &&(sensorValue2>=7) && (sensorValue2<=10))
                                                 {staTement = 1;} 
 
 
//_____________________________________________________________________________  END ERROR MANAGER   
     
        // Measurements Manager
        
        
            if (sensorValue>=11){  // Se leggo un valore più alto di 10 accendo il led di servizio
            
              staTement = 2;} 
              
              else {staTement = 3;} // Se è più basso non lo accendo
            
        
 //************************************************       
        // ***************************
        // MICHELE DA QUI CONTINUA TE!
        // ***************************
 //************************************************         
        
                         
                         // Output
        
        
                    switch (staTement) { // *********************** START STATEMENT
     case 0:
               digitalWrite(LedAlarm,LOW);
               break;
     case 1:
               digitalWrite(LedAlarm,HIGH);
               break;
     case 2:
               digitalWrite(LedDeviceOne,HIGH);
               break;
     case 3:
               digitalWrite(LedDeviceOne,LOW);
               break;          
  
                                     } // *********************** END STATEMENT
        

        
        
        
        Serial.print(sensorValue);
        Serial.print("  ");
        Serial.print(sensorValue1);
        Serial.print("  ");
        Serial.print(sensorValue2);
        Serial.print("   Statement: ");
        Serial.println(staTement);
        
        delay(50);
        
                                                         } // END LOOP **************
                                                                                 
                                                  
                                                  
                                                  // **********************************        END MAIN
Non è elegante come me a quest'ora del lunedì, ma dovrebbe andare. Credo. Qui non riesco a provarlo.


Bon! Ora chiudo l'ufficio. Studialo, provalo e se non va ne riparliamo domani. Ora sono cotto come un pollo della coop!

Ciao

Antonio

P.s. Il led 9 l'ho aggiunto. E' di servizo per provare se funziona.
Rispondi citando
  #28  
Vecchio 10-03-2014, 23.01.03
michelozzo michelozzo non è collegato
Nuovo robottaro
 
Data registrazione: 03-03-2014
Residenza: Piombino
Età : 50
Messaggi: 26
Potenza reputazione: 0
michelozzo E' per ora ancora un mistero
Predefinito sembra non funzioni...

Ho caricato il tuo ultimo sketch ma purtroppo non funziona, ovvero in funzionamento normale con tutti e tre gli in a 0 mi rimane sempre su statement3 ignorando tutte le condizioni (dovrebbe essere su statement0 ma capisco anche che sia la condizione state=0 che quella state3 viene soddifatta). Se applico più di una tensione (ad si a0 e a1) la condizione di allarme non avviene mai perchè basta che una delle due tensioni superi il valore di 7 e mi risalta sullo statemant3. Francamente non riesco a capire perchè, se nei casi di allarme si va da 7 a 10, applicando due tensioni facilmente maggiori di 10, dovrebbe rimanere nella condizione di allarme. Premetto che non lo capisco perchè non ho assolutamente esperienza ma anche ragionandoci mi sfugge il significato. Caronte, mi sento in imbarazzo a crearti tutto questo disturbo ma proprio non riesco a tirare fuori la testa da questo vortice. Spero che ormai non vorrai lasciarmi in balia della corrente. Grazie infinite - Michele
Rispondi citando
  #29  
Vecchio 11-03-2014, 08.43.46
L'avatar di marnic
marnic marnic non è collegato
Administrator
 
Data registrazione: 24-05-2002
Residenza: Monselice (PD)
Età : 57
Messaggi: 5,458
Potenza reputazione: 422
marnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua famamarnic La sua reputazione è oltre la sua fama
Predefinito

if (sensorValue>=11){ // Se leggo un valore più alto di 10 accendo il led di servizio staTement = 2;} else {staTement = 3;} // Se è più basso non lo accendo

nello statement 3 ci va tutte le volte che non è verificata la:
(sensorValue>=11)
ossia per ogni valore inferiore a 11

L'uso di "else" soprattutto in situazioni dove hai molte condizioni potrebbe rivelarsi una brutta bestia
Quella che cerchi è banalmente una logica combinatoria (una situazione in ingresso una situazione in uscita
Riproducila in una tabella
metti tre lolonne che rappresentano gli ingressi
fai tante righe dove in ognuna metti una delle combinazioni possibili
aggiungi una colonna dove metti come vuoi l'uscita
ad ogni riga fai corrispondere una riga di programma tipo
ingresso1=a e ingresso2=b.... allora led1=x led2=y led3=z
__________________
Marnic
Roboitalia Staff
www.fabbrimarco.com
Rispondi citando
  #30  
Vecchio 11-03-2014, 11.22.06
michelozzo michelozzo non è collegato
Nuovo robottaro
 
Data registrazione: 03-03-2014
Residenza: Piombino
Età : 50
Messaggi: 26
Potenza reputazione: 0
michelozzo E' per ora ancora un mistero
Predefinito

Kokiua, ti ringrazio infinitamente per la tua generosità. Cercerò di studiarlo con calma visto che sono alle prime armi ed il tuo codice è molto molto professionale (e abbastanza incomprensibile per me). Grazie infinite di nuovo.
Per quanto riguarda il codice con il quale mi sto litigando da giorni, ho scritto una tabella come mi ha consigliato Marnic, con tutti gli stati logici che dovrebbe eseguire il mio sketch. L'ho postata on line visto che il forum non mi permette di fare l'upload. http://www.poloisiscvp.gov.it/pagina.asp?id=60
Come si vede dalla tabella i valori che scatenano la condizione di allarme sono quelli evidenziati in rosso, quelli che scatenano il lavoro normale di lettura sono quelli sotto. Non riesco a capire come e se è possibile (in termini umanamente comprensibili per il mio livello rasoterra) far si che se arduino legge più di due valori mi parta la condizione di allarme, se legge un valore solo alla volta mi vada in normale lettura. Io ho scritto and per l'allarme (ovviamente concatenandoli a due a due) e or per la condizione normale ma, vi ripeto, potrei aver detto una castroneria. Mi piacerebbe tanto far funzionare l'apparecchio anche con questo sketch oltre ovviamente a ri-ringraziare kokiua per il suo aiuto. Siete tutti delle gran brave persone. Michele
Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione
Modalità  visualizzazioe

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code è Attivato
Le smilies sono Attivato
[IMG] è Attivato
Il codice HTML è Disattivato

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
Indicatore livello batteria Antares Batterie e alimentazione 33 23-07-2013 20.12.20
Misuratore di tensione più preciso BearLikeOthers Arduino 2 20-07-2012 20.07.05
Misuratore coppia denyan E. Analogica 3 28-10-2009 10.20.00
Batteria 12V 7Ah ingar Batterie e alimentazione 2 25-09-2005 20.30.23
misuratore di lunghe distanze khris81 Elettronica 19 17-04-2005 23.47.22


Tutti gli orari sono GMT. Adesso sono le: 22.15.43.


Basato su: vBulletin Versione 3.8.8
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Realizzazione siti web Cobaltica Foligno
spacer.png, 0 kB