Memorizzare Programma in Arduino

Salve Ragazzi, sono nuovo su questo forum, sto ricominciando con l'elettronica dopo anni di sviluppo software e devo dire che questo arduino unisce l'hobby dell'elettronica e dello sviluppo software. Mi sono comprato un arduino uno + shield ethernet e qualche sensore per sperimentare un po' e vedere come funziona. ho notato subito che i programmi si perdono se stacco l'alimentazione. E' possibile fare in modo di memorizzare i programmi in arduino in modo che alla successiva riaccenzione possano ripartire? grazie in anticipo dell'aiuto.

Non è normale che si perda la memoria quando stacchi l'alimentazione. Quando lanci la programmazione su arduino tramite l'IDE, una volta finita l'operazione di trasferimento, il programma dovrebbe essere già permanente. Probabilmente il tuo arduino ha qualche problema.

si, non dovrebbe andare perso il programma.. quello che dovresti perdere sono solo i dati (i valori delle variabili in esso contenute).

grazie delle risposte, sto facendo dei test ed ho verificato che se eseguo e uppo il programma di blink scollegando e ricollegando arduino dall'usb il programma rimane(ricomincia a blinkare) se metto il mio invece non rimane nulla. Quindi a funzionare funziona e' da capire perché qualche programma rimane altri no

posta il tuo programma, magari c'è qualcosa che non va, qualche bug in condizioni particolari ecc...

Salve ragazzi, questo è il programma per il controllo del sensore di temperatura MCP9803, grazie dell’aiuto…:

#include <Wire.h>

#define AMB_ADDR 0x4F
#define AMB_TEMP_REG 0x00
#define AMB_CONF_REG 0x01
#define AMB_INIT B01100000


void get_ambient();

float ambient = 0;

void setup()
{
  byte a;
  Serial.begin(57600);         
  Serial.println("Avvio configurazione");
  Wire.begin();              
  // configurazione mcp9800.
  Wire.beginTransmission(AMB_ADDR);
  Wire.send(AMB_CONF_REG); // point to config reg
  Wire.send(AMB_INIT);
  Wire.endTransmission();
  Serial.println("Configuraione mcp9803");


  Wire.beginTransmission(AMB_ADDR);
  Wire.send(AMB_CONF_REG); // point to config reg
  Wire.endTransmission();
  Wire.requestFrom(AMB_ADDR, 1);
  Serial.println("# Lettura configurazioni mcp9803");
  a = 0xff;
  if (Wire.available()) {
    a = Wire.receive();
  }
  if (a != AMB_INIT) {
    Serial.println("Errore nella mcp9803");
  } else {
    Serial.println("Configurazione mcp9803 OK");
  }
  
  // set pointer to temperature register and
  // leave it there for all future readings.
  Wire.beginTransmission(AMB_ADDR);
  Wire.send(AMB_TEMP_REG);
  Wire.endTransmission();
}

void loop()
{
  get_ambient();
  Serial.print("Temperatura ambiente:");Serial.println(ambient);
  delay(1000);
}

void get_ambient()
{
  byte a, b;
  int32_t v;

  Wire.requestFrom(AMB_ADDR, 2);
  if (Wire.available() != 2) {
    Serial.println("Numero di byte disponibili errato");
    return;
  }
  a = Wire.receive();
  b = Wire.receive();

  v = a;
  v <<= 24;
  v >>= 24;

  ambient = v;
  ambient += (float)b / 256. ;
}

se ti basi solo sull'output seriale per controllare se lo schetch sta andando non ti fidare. Prova a mettere nel loop il codice per far lampeggiare il led. secondo me il codice va ma è la comunicazione seriale che ha problemi... Quando dici stacco l'alimentazione intendi tieni attaccata l'usb e stacchi l'alimentazione esterna? o usi solo l'usb e stacchi attacchi quella? il salto di tensione può provocare sfasi..

Grazie della risposta, in effetti mettendo un blink funziona quindi era quello il problema. grazie del consiglio.

saluti