Arduino Forum

International => Italiano => Software => Topic started by: bruco1987 on Dec 09, 2018, 04:48 pm

Title: Problema Assurdo...SKetch lavora solo dopo aver aperto il monitor seriale
Post by: bruco1987 on Dec 09, 2018, 04:48 pm
Ciao ragazzi... Come da titolo una cosa mai successa in tanti anni. Ho un arduino mega con uno sketch che funzionava perfettamente fino a qualche gg fa. Da ieri, dopo un stacca e attacca dell'alimentazione, lo sketch funziona solo se apro il monitor seriale oppure dopo l'upload dello sketch stesso... Ma se stacco e riattacco l'alimentazione, NULLA!!! il vuoto più assoluto, non parte fino a che non riapro il seriale. ci tengo a riprecisare che lo sketch ha funzionato per mesi fino a qualche gg fa.Qualche suggerimento? ecco qui:
Code: [Select]

#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal_I2C.h>
#include <avr/wdt.h>
#include <MegunoLink.h>
#include <CommandHandler.h>
#include <CircularBuffer.h>
#include <Filter.h>
#include <SPI.h>         // needed for Arduino versions later than 0018
#include <ArduinoTimer.h>
#include <Ethernet.h>
#include <EthernetUdp.h>         // UDP library from: bjoern@cs.stanford.edu 12/30/2008

ArduinoTimer HeartBeatTimer;

////////////////////udp/////////////////////////
IPAddress ComputerIPAddress(192, 168, 1, 122);
int RecPort = 8889; //Port on the megunolink machine for receiving

byte mac[] = {
  0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02
};

IPAddress ip(192, 168, 1, 117);

unsigned int localPort = 8888;      // local port to listen on
////////////////////udp/////////////////////////



#define SENSOR_PIN 2 // Do not use digital pins 0 or 1 since those conflict with the use of Serial.
OneWire oneWire(SENSOR_PIN);
DallasTemperature sensors(&oneWire);

//SerialCommandHandler.AddVariable(F("pulsantetemp1"), tempSensor1);

DeviceAddress tempSensor5 = {0x28, 0x62, 0x17, 0x27, 0x00, 0x00, 0x80, 0xE4};
DeviceAddress tempSensor6 = {0x28, 0x72, 0xB6, 0x26, 0x00, 0x00, 0x80, 0xCE};
DeviceAddress tempSensor7 = {0x28, 0xB1, 0x10, 0x27, 0x00, 0x00, 0x80, 0x28};


CommandHandler<> SerialCommandHandler;


////////////////udp//////////////////
EthernetUDP Udp;
InterfacePanel MyInterfacePanel("controllo", Udp);
CommandHandler<> SerialCommandHandler1(Udp, '!', '\r');
//////////////////udp//////////////////


void setup() {
  Serial.begin(9600);


  // Using the Ethernet Shield, pin 10 (SS) should be output,
  //and pin 4 and pin 10 are used for chip select. Disable both.
 // pinMode( 10, OUTPUT);
  //digitalWrite( 10, HIGH);     // disable this chip select
  //pinMode( 4, OUTPUT);
  //digitalWrite( 4, HIGH);      // disable this chip select

  Serial.println(F( "\nStarting Ethernet..."));

  // Ethernet.begin without 'ip' parameteir starts the DHCP
  if ( Ethernet.begin(mac) == 0)
  {
    Serial.println("Failed to configure Ethernet using DHCP");
    // no point in carrying on, so do nothing forevermore:
    while (true);
  }

  // print your local IP address.
  Serial.println(F( "Ethernet started."));
  Serial.print(F( "Local IP = "));
  Serial.println( Ethernet.localIP());
  delay(500);

  ////////////////udp//////////////////
  // start the Ethernet and UDP:
  Ethernet.begin(mac,ip); //Ethernet.begin(mac,ip);
  Udp.begin(localPort);
  ////////////////udp//////////////////




  ///////////sensori e login////////////////////////
  sensors.begin();
  //////////////////////////////////////////////////
  ///////////lcd////////////////////////////////////
  lcd.begin(16, 2);
  lcd.backlight();
  pinMode(8, OUTPUT);
  digitalWrite(8, LOW);
  //////////////////////////////////////////////////

}

void loop() {



  /////////////////////////udp/////////////////////////////
  int packetSize = Udp.parsePacket(); //I think for the udp stuff to work this needs to be called
  /////////////////////////udp/////////////////////////////


  SerialCommandHandler.Process();
  if (HeartBeatTimer.TimePassed_Milliseconds(20000))
  {

    ///////////controllo temperature e stampa su seriale e sd///////////////////////
    sensors.requestTemperatures();

    float temperatura5 = sensors.getTempC(tempSensor5);
    float temperatura6 = sensors.getTempC(tempSensor6);
    float temperatura7 = sensors.getTempC(tempSensor7);


    Serial.print("stato= ");
    Serial.println(stato);


    ////////////////////STAMPO A VIDEO LE TEMPERATURE////////////////////


    Serial.print("05 Murale Cassa=");
    Serial.print(temperatura5);
    Serial.println("}");
    Serial.print("06 Murale Lato Salumeria=");
    Serial.print(temperatura6);
    Serial.println("}");
    Serial.print("07 Banco Gastronomia=");
    Serial.print(temperatura7);
    Serial.println("}");

    ///////////////////////////////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    /////////////////////////////////////////////////////////////////
    Udp.beginPacket(ComputerIPAddress, RecPort);
    Udp.print("{UI:controllo|SET|DynamicLabel5.Text=");
    Udp.print(temperatura5);
    Udp.println("}");
    Udp.write("{TIMEPLOT|data|05 Murale Cassa|T|");
    Udp.print(temperatura5);
    Udp.write("}\n");
    Udp.endPacket();
    /////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////
    Udp.beginPacket(ComputerIPAddress, RecPort);
    Udp.print("{UI:controllo|SET|DynamicLabel6.Text=");
    Udp.print(temperatura6);
    Udp.println("}");
    Udp.write("{TIMEPLOT|data|06 Murale Salumeria|T|");
    Udp.print(temperatura6);
    Udp.write("}\n");
    Udp.endPacket();
    /////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////
    Udp.beginPacket(ComputerIPAddress, RecPort);
    Udp.print("{UI:controllo|SET|DynamicLabel7.Text=");
    Udp.print(temperatura7);
    Udp.println("}");
    Udp.write("{TIMEPLOT|data|07 Banco Gastronomia|T|");
    Udp.print(temperatura7);
    Udp.write("}\n");
    Udp.endPacket();
    /////////////////////////////////////////////
 

  }


  ////////////////fine loop/////////////////////////////////
}

Title: Re: Problema Assurdo...SKetch lavora solo dopo aver aperto il monitor seriale
Post by: Lollo82 on Dec 09, 2018, 05:13 pm
E se dopo aver alimentato l'arduino schiacci il tasto reset parte?
Title: Re: Problema Assurdo...SKetch lavora solo dopo aver aperto il monitor seriale
Post by: docdoc on Dec 10, 2018, 02:19 pm
Da ieri, dopo un stacca e attacca dell'alimentazione, lo sketch funziona solo se apro il monitor seriale oppure dopo l'upload dello sketch stesso... Ma se stacco e riattacco l'alimentazione, NULLA!!! il vuoto più assoluto, non parte fino a che non riapro il seriale.
Scusa la domanda banale, ma se non apri il seriale come fai a dire che non funziona affatto (e non che magari fa il setup() e poi si "pianta" da qualche parte)?
Ad esempio lo schermo cosa indica? Perché all'inizio del setup non metti una scritta "Loading..." che poi togli alla fine del setup()? E poi nel loop fai blinkare il led onboard quando entri nella if()?

Title: Re: Problema Assurdo...SKetch lavora solo dopo aver aperto il monitor seriale
Post by: bruco1987 on Dec 11, 2018, 06:00 pm
E se dopo aver alimentato l'arduino schiacci il tasto reset parte?
questa prova la sto per fare...ti faccio sapere
Scusa la domanda banale, ma se non apri il seriale come fai a dire che non funziona affatto (e non che magari fa il setup() e poi si "pianta" da qualche parte)?
Ad esempio lo schermo cosa indica? Perché all'inizio del setup non metti una scritta "Loading..." che poi togli alla fine del setup()? E poi nel loop fai blinkare il led onboard quando entri nella if()?
perchè non ce ne bisogno in quanto appena parte il loop mi manda via UDP le temperature dei sensori in un altro pc... questo avviene "sempre" con la seriale aperta, mentre con la seriale chiusa no... quindi non vedo per quale motivo di debba inceppare con la seriale chiusa. inoltre come gia scritto, non ce nemmeno bisogno di aprire la seriale se ho appena caricato lo sketch parte fino a che no stacco e riattacco l'alimentazione, a quel punto devo per forza aprire la seriale e non va...
Title: Re: Problema Assurdo...SKetch lavora solo dopo aver aperto il monitor seriale
Post by: nid69ita on Dec 11, 2018, 07:16 pm
Usi diverse librerie a me poco note. megunolink e CommandHandler.   Cosa fanno ? 
Non è che quelle lib impongono avere la seriale connessa ??
Title: Re: Problema Assurdo...SKetch lavora solo dopo aver aperto il monitor seriale
Post by: zoomx on Dec 12, 2018, 12:29 pm
Per me il colpevole è questo

CommandHandler<> SerialCommandHandler;
Title: Re: Problema Assurdo...SKetch lavora solo dopo aver aperto il monitor seriale
Post by: bruco1987 on Dec 16, 2018, 10:17 am
Usi diverse librerie a me poco note. megunolink e CommandHandler.   Cosa fanno ?
Non è che quelle lib impongono avere la seriale connessa ??
megunolink e Commandhandler servono ad comunicare con il software appunto megunolink, una sorta di interfaccia grafica per pc, che vi cisiglio di provare...


ripeto fino a poco fa andava tutto senza problemi.. Non penso siano le librerie il problema
Per me il colpevole è questo

CommandHandler<> SerialCommandHandler;
perchè lo pensi?
Title: Re: Problema Assurdo...SKetch lavora solo dopo aver aperto il monitor seriale
Post by: nid69ita on Dec 16, 2018, 11:20 am
Lo conosco solo di fama. Non l'ho provato bene.
Mi pare non spieghi bene la situazione. Non abbiamo la sfera di cristallo.
Se non dai un pò di spiegazioni, non hai un programma standard e semplice da capire, visto che usa librerie "particolari"

Il tuo programma comunica con un PC via udp sfruttando le librerie meguno ? Sul pc chi riceve è il sw meguno ? 
Andava tutto senza aprire il monitor seriale di Arduino IDE mentre ora lo devi aprire ? 

Title: Re: Problema Assurdo...SKetch lavora solo dopo aver aperto il monitor seriale
Post by: bruco1987 on Dec 16, 2018, 12:15 pm
Lo conosco solo di fama. Non l'ho provato bene.
Mi pare non spieghi bene la situazione. Non abbiamo la sfera di cristallo.
Se non dai un pò di spiegazioni, non hai un programma standard e semplice da capire, visto che usa librerie "particolari"

Il tuo programma comunica con un PC via udp sfruttando le librerie meguno ? Sul pc chi riceve è il sw meguno ?
Andava tutto senza aprire il monitor seriale di Arduino IDE mentre ora lo devi aprire ?


Spego meglio... Arduino comunica via udp con un pc connesso nella stessa rete wifi. Sul pc con ip fisso ricevo i pacchetti udp e scrivo le temperature in un grafico con Megunolink.
Il tutto funzionava senza aprire nessun monitor seriale...
Aggiungo una ina info che ho appena verificato. Se premo il tasto fisico Reset su arduino il tutto torna a funzionare senza problemi ovviamente fino alla prossima mancanza di alimentazione. A quel punto si ripresenta il problema e per far partire lo sketch devo o aprire la seriale o premere il tasto reset.
Title: Re: Problema Assurdo...SKetch lavora solo dopo aver aperto il monitor seriale
Post by: nid69ita on Dec 16, 2018, 12:37 pm
Come alimenti  ?
Title: Re: Problema Assurdo...SKetch lavora solo dopo aver aperto il monitor seriale
Post by: zoomx on Dec 16, 2018, 09:01 pm
perchè lo pensi?
Perché sospetto che quella libreria blocchi il programma in attesa di comandi dalla seriale. Però l'Arduino con Atmega328 non dovrebbe accorgersi se la porta viene aperta o meno, questo potrebbe capitare solo con la Leonardo e le schede con CPU con USB nativa.
Title: Re: Problema Assurdo...SKetch lavora solo dopo aver aperto il monitor seriale
Post by: Lollo82 on Dec 17, 2018, 07:14 am
Il problema non è che potrebbe essere nel bootloader??? Per me la seriale non centra nulla, per quello gli ho chiesto di verificare se dopo aver alimentato premendo il tasto reset tutto iniziasse a funzionare. Quando si apre la seriale alla fine accade quello, l'arduino si resetta.
Title: Re: Problema Assurdo...SKetch lavora solo dopo aver aperto il monitor seriale
Post by: zoomx on Dec 17, 2018, 10:13 am
Se non lo hai modificato mi sembra vewramente strano ma se lo hai modificato potrebbe anche essere.
Il bootloader, a che so io, aspetta un segnale dalla seriale in un certo tempo e, senon lo riceve, salta direttamente in una locazione di memoria dove dovrebbe esserci il programma.

A me quello che succede a te mi succede solamente se uso una scheda con MCU con USB nativa (La Leonardo, la Due, le STM32 e tante altre) e nello sketch metto le istruzioni che attendono che la seriale sia aperta. Con la UNO non dovrebbe succedere.
Title: Re: Problema Assurdo...SKetch lavora solo dopo aver aperto il monitor seriale
Post by: ORSO2001 on Dec 17, 2018, 11:18 am
Ciao,

A me succedeva una cosa simile con una MEGA clone...dal principio la scheda era funzionante...poi all'improvviso...dall'avvio dovevo aspettare una ventina di secondi prima che il programma iniziasse a ciclare...se collegavo USB o premevo il pulsante di reset partiva subito...il fornitore mi ha inviato scheda nuova...problema risolto...quindi...hai provato con altra scheda?
Title: Re: Problema Assurdo...SKetch lavora solo dopo aver aperto il monitor seriale
Post by: bruco1987 on Dec 17, 2018, 12:30 pm
Ciao,

A me succedeva una cosa simile con una MEGA clone...dal principio la scheda era funzionante...poi all'improvviso...dall'avvio dovevo aspettare una ventina di secondi prima che il programma iniziasse a ciclare...se collegavo USB o premevo il pulsante di reset partiva subito...il fornitore mi ha inviato scheda nuova...problema risolto...quindi...hai provato con altra scheda?
proverò sicuramente nei prossimi gg... speriamo bene.
Title: Re: Problema Assurdo...SKetch lavora solo dopo aver aperto il monitor seriale
Post by: Lollo82 on Dec 17, 2018, 04:16 pm
Ciao,

A me succedeva una cosa simile con una MEGA clone...dal principio la scheda era funzionante...poi all'improvviso...dall'avvio dovevo aspettare una ventina di secondi prima che il programma iniziasse a ciclare...se collegavo USB o premevo il pulsante di reset partiva subito...il fornitore mi ha inviato scheda nuova...problema risolto...quindi...hai provato con altra scheda?
Ma il motivo non lo hai mai saputo???
Title: Re: Problema Assurdo...SKetch lavora solo dopo aver aperto il monitor seriale
Post by: ORSO2001 on Dec 17, 2018, 04:35 pm
ciao...avevo fatto il classico "miliardo" di tentativi senza successo...alla fine ho scritto al fornitore...la cui risposta fu "cambio scheda".
Title: Re: Problema Assurdo...SKetch lavora solo dopo aver aperto il monitor seriale
Post by: Standardoil on Dec 17, 2018, 04:53 pm
Per come la vedo io il problema si può descrivere in maniera differente:
Al power-on la MEGA non si resetta
Io guarderei il condensatore sul circuito di reset
Title: Re: Problema Assurdo...SKetch lavora solo dopo aver aperto il monitor seriale
Post by: gpb01 on Dec 17, 2018, 06:57 pm
>Lollo82: hai un programmatore ISP?  Sei in grado di leggere i FUSE ed indicarmeli?

Guglielmo
Title: Re: Problema Assurdo...SKetch lavora solo dopo aver aperto il monitor seriale
Post by: Lollo82 on Dec 17, 2018, 07:06 pm
Vuoi i fuse della mega o della uno??? Certo che te li mando. Ci mancherebbe.
Title: Re: Problema Assurdo...SKetch lavora solo dopo aver aperto il monitor seriale
Post by: gpb01 on Dec 17, 2018, 08:42 pm
Vuoi i fuse della mega o della uno??? Certo che te li mando. Ci mancherebbe.
Quelli della scheda in cui il programma non ti parte ... credo sia la MEGA ... ::)

Guglielmo
Title: Re: Problema Assurdo...SKetch lavora solo dopo aver aperto il monitor seriale
Post by: Lollo82 on Dec 17, 2018, 08:46 pm
Ah allora aspe, mi sa che ci sia un malinteso. Non è il mio il problema del programma che non si avvia, ma dell'utente bruco1987.
Title: Re: Problema Assurdo...SKetch lavora solo dopo aver aperto il monitor seriale
Post by: gpb01 on Dec 17, 2018, 08:50 pm
Ah allora aspe, mi sa che ci sia un malinteso. Non è il mio il problema del programma che non si avvia, ma dell'utente bruco1987.
Ooooppppsss ... vero, ho letto il tuo post in cima alla pagina e, di getto, ho scritto a te :D :D :D  Scusa il disturbo ;)

>bruco1987: la domanda era allora per te ;)

Guglielmo
Title: Re: Problema Assurdo...SKetch lavora solo dopo aver aperto il monitor seriale
Post by: camperos on Dec 17, 2018, 10:05 pm
ciao a tutti
quando succedevano cose strane con il mega, ma con l'uno funzionava regolarmente, inserivo un
delay(2000); alla fine del setup e tutto ri-funzionava regolarmente
prova
Title: Re: Problema Assurdo...SKetch lavora solo dopo aver aperto il monitor seriale
Post by: bruco1987 on Dec 18, 2018, 12:54 pm
Quelli della scheda in cui il programma non ti parte ... credo sia la MEGA ... ::)

Guglielmo
purtroppo non ho un programmatore ISP...Posso crearlo con un altro Arduino?
Title: Re: Problema Assurdo...SKetch lavora solo dopo aver aperto il monitor seriale
Post by: gpb01 on Dec 18, 2018, 01:14 pm
purtroppo non ho un programmatore ISP...Posso crearlo con un altro Arduino?
SI, c'è un'ottima guida di Menniti (utente di questo forum) su come farlo ...
... il .pdf è un po' vecchiotto e c'è un cambiamento che interessa chi usa, come programmatore, un Arduino MEGA, ma è di banale correzione.

Il link al pdf è il SEGUENTE (http://www.xorse.it/wp-content/uploads/downloads/2013/03/GUIDA-tecniche-programmazione-microcontrollori-atmel_v4.pdf), solo che, mentre per la UNO e simili i collegamenti sono corretti, se si usa come programmatore la MEGA, avendo aggiornato il codice, il pin 1 (... pin RESET, di cui a pag.13NON va collegato come li scritto al pin 53, ma, come per la UNO, al pin 10.
Ripeto, questa cosa è valida solo se si vuole creare un programmatore con una MEGA.  Se invece si vuole creare un programmatore utilizzando la UNO e simli, NON occorre apportare correzioni al testo.

Guglielmo