Problema blocco a seguito di reboot

Discussion in 'Italiano' started by vinny74, Apr 11, 2017.

  1. vinny74

    vinny74 UDOOer

    Joined:
    Dec 13, 2014
    Messages:
    7
    Likes Received:
    1
    Ciao a tutti ho scritto un piccolo sketch che mi permette di impostare pin a mio piacimento tramite la seriale e python, mi servirà per automatizzare un acquario, lo sketch e python fanno il loro dovere fino ad un riavvio della board, in quel caso tutti i pin impostati come output si bloccano o LOW, l'unico modo per poter far ripartire il tutto e rinviare lo sketch ad arduino tramite l'ide, poichè il tutto a regime dovrà andare in automatico capirete il problema, deduco che ha seguito di un rinvio con l'ide l'arduino si resetta, quindi chiedevo c'è un modo per resettare tramite software arduino?

    Questo sempre che non si riesca a risolvere il problema a monte.
    Allego lo sketch in modo da controllarlo nel caso ci sia qualcosa di sbagliato che bl
    Grazie

    Code:
    #include <OneWire.h>
    #include <DallasTemperature.h>
    
    #define TIMEOUT 30000
    #define SET_MODE 200
    #define LETTURA_DIGITALI 201
    #define LETTURA_ANALOGICI 202
    #define SCRITTURA_DIGITALI 203
    #define SCRITTURA_ANALOGICI 204
    #define SONDA_TEMPERATURA_1_VASCA 45
    #define SONDA_TEMPERATURA_2_VASCA 46
    #define SONDA_TEMPERATURA_3_VASCA 47
    #define SONDA_TEMPERATURA_SERBATOIO 48
    
    char arduinoId[9] = "c3d1e@9=";
    char pythonId[9] = "Db5i42uk";
    char confermaId[9] = "bB0gP1Zw";
    char inizioInvio[9] = "j9W6KKLK";
    char fineInvio[9] = "cRoG4WT9";
    char confermaRx[9] = "l9b85tpl";
    bool statoConnessione = false;
    bool statoRicezione = false;
    unsigned long inizioConteggio;
    byte indice=0;
    String rxData01;
    byte buffer[3];
    /*I dati del buffer seguono questa logica:
     * 0) Funzione da eseguire
     * 1) Numero del pin da controllare
     * 2) Valore del pin nel caso di scrittura sul pin o del setttaggio del tipo
     */
    
    OneWire sensore1(SONDA_TEMPERATURA_1_VASCA);
    OneWire sensore2(SONDA_TEMPERATURA_2_VASCA);
    OneWire sensore3(SONDA_TEMPERATURA_3_VASCA);
    OneWire sensore4(SONDA_TEMPERATURA_SERBATOIO);
    DallasTemperature sonda1(&sensore1);
    DallasTemperature sonda2(&sensore2);
    DallasTemperature sonda3(&sensore3);
    DallasTemperature sonda4(&sensore4);
    
    bool connessione(bool stato,char tokenId01[9],char tokenId02[9],char tokenConferma[9],int tokenChar=8)
    {
      int i=0;
      String rxData;
      char data;
    
      while (!stato){
        if (Serial.available()){
          delay(50);
          data = Serial.read();
          if (data != '\n'){
            rxData += data;
            i++;
          }
          else if (data == '\n'){
            if (rxData == tokenId02 && i == tokenChar){
              stato = true;
              i=0;
              rxData = "";
            }
            else{
              i=0;
              rxData = "";
            }
          }
        }
        else{
          Serial.write(tokenId01);
          delay(3000);
        }
      }
      Serial.write(tokenConferma);
      inizioConteggio = millis();
      return true;
    }
    
    
    bool inviaRicevi(char tokenId01[9],char tokenId02[9],char tokenConferma[9],int tokenChar=8,int maxBuffer=3)
    {
      char data;
      byte data01;
    
      if (Serial.available()){
        inizioConteggio = millis();
        data = Serial.read();
        if (data != '\n'){
          rxData01 += data;
          indice++;
        }
        else if (data == '\n' && indice == tokenChar){
          if (rxData01 == tokenId01){
            indice=0;
            rxData01 = "";
            memset(buffer,0,sizeof(buffer));
            delay(15);
            while (Serial.available()){
              data01 = Serial.read();
              if (data01 != '|'){
                buffer[indice] = data01;
                indice++;
              }
              else if (data01 == '|'){
                if (indice>0 && indice<=maxBuffer){
                  indice=0;
                  delay(15);
                  while (Serial.available()){
                    data = Serial.read();
                    if (data != '\n'){
                      rxData01 += data;
                      indice++;
                    }
                    else if (data == '\n' && indice == tokenChar){
                      if (rxData01 == tokenId02){
                        indice=0;
                        rxData01= "";
                        Serial.write(tokenConferma);
                        return true;
                      }
                      else if (rxData01 != tokenId02){
                        indice=0;
                        rxData01 = "";
                      }
                    }
                    else if (data == '\n' && indice != tokenChar){
                      indice=0;
                      rxData01 = "";
                    }
                  }
                }
                else{
                  indice=0;
                  rxData01 = "";
                }
              }
            }
          }
          else if (rxData01 != tokenId01){
            indice=0;
            rxData01 = "";
          }
        }
        else if (data == '\n' && indice != tokenChar){
          indice=0;
          rxData01 = "";
        }
      }
      return false;
    }
    
    void _setMode(byte pinNum, byte pinValue){
    #define IN 0x00
    #define OUT 0x01
    
      if (pinValue == IN){
        pinMode(pinNum,INPUT_PULLUP);
      }
      else if (pinValue == OUT){
        pinMode(pinNum,OUTPUT);
      }
    }
    
    void _letturaDigitali(byte pinNum){
        if (pinNum == SONDA_TEMPERATURA_1_VASCA){
           sonda1.requestTemperatures();
           Serial.println(sonda1.getTempCByIndex(0));
        }
        else if (pinNum == SONDA_TEMPERATURA_2_VASCA){
           sonda2.requestTemperatures();
           Serial.println(sonda2.getTempCByIndex(0));
        }
        else if (pinNum == SONDA_TEMPERATURA_3_VASCA){
           sonda2.requestTemperatures();
           Serial.println(sonda2.getTempCByIndex(0));
        }
        else if (pinNum == SONDA_TEMPERATURA_SERBATOIO){
           sonda2.requestTemperatures();
           Serial.println(sonda2.getTempCByIndex(0));
        }
        else{
            Serial.write(digitalRead(pinNum));
        }
    }
    
    void _letturaAnalogici(byte pinNum){
      Serial.println(analogRead(pinNum));
    }
    
    void _scritturaDigitali(byte pinNum, byte pinValue){
    #define LOW_VALUE 0
    #define HIGH_VALUE 255
    
      if (pinValue == LOW_VALUE){
        digitalWrite(pinNum,LOW);
      }
      else if (pinValue == HIGH_VALUE){
        digitalWrite(pinNum,HIGH);
      }
    }
    
    void _scritturaAnalogici(byte pinNum, byte pinValue){
      analogWrite(pinNum, map(pinValue,0,100,0,255));
    }
    
    void _connect()
    {
      statoConnessione = connessione(statoConnessione,arduinoId,pythonId,confermaId);
    }
    
    void _ricezione()
    {
      statoRicezione = inviaRicevi(inizioInvio,fineInvio,confermaRx);
    }
    
    void setup()
    {
      Serial.begin(115200);
    }
    
    void loop()
    {
      if (!statoConnessione){
        _connect();
      }
    
      if (!statoRicezione){
        _ricezione();
      }
    
      if (statoRicezione){
        if (buffer[0] == SET_MODE){
          _setMode(buffer[1],buffer[2]);
        }
        else if (buffer[0] == LETTURA_DIGITALI){
          _letturaDigitali(buffer[1]);
        }
        else if (buffer[0] == LETTURA_ANALOGICI){
            _letturaAnalogici(buffer[1]);
        }
        else if (buffer[0] == SCRITTURA_DIGITALI){
          _scritturaDigitali(buffer[1],buffer[2]);
        }
        else if (buffer[0] == SCRITTURA_ANALOGICI){
          _scritturaAnalogici(buffer[1],buffer[2]);
        }
    
        inizioConteggio = millis();
      }
    
      statoRicezione = false;
    
      if ((millis() - inizioConteggio) >= TIMEOUT){
        statoConnessione = false;
        inizioConteggio += TIMEOUT;
      }
    }
    
     
  2. waltervl

    waltervl UDOOer

    Joined:
    Dec 12, 2015
    Messages:
    2,314
    Likes Received:
    580
    What Udoo? Neo, dual/quad, X86?
     
  3. vinny74

    vinny74 UDOOer

    Joined:
    Dec 13, 2014
    Messages:
    7
    Likes Received:
    1
    Udoo quad
     
  4. waltervl

    waltervl UDOOer

    Joined:
    Dec 12, 2015
    Messages:
    2,314
    Likes Received:
    580
    Sorry, I (or Google translate) don't understand your question enough to give you a good answer.
     

Share This Page