Go Down

Topic: "residuati bellici" (Read 3412 times) previous topic - next topic

gingardu

alla fine ho assemblato questo scketc lo metto qui  se a qualcuno puo servire

basta caricarlo   aprire il seria monitor e mettere il codice 12345 pochi secondi mette a zero tutte le memorie e da anche il messaggio di ok  per operazione avvenuta
ho verificato e funziona correttamente sull'arduino uno
Code: [Select]
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                   USARE IN QUESTO MODO:  CARICARE QUESTO  SKETCH
//                   APRIRE IL MONITOR SERIALE ASSICURARSI CHE SIA IMPOSTATO A 9600baud 
//                   IMMETTERE IL CODICE 12345  NELLA RIGA DI COMANDO, PREMERE INVIO
//                   ATTENDERE QUALCHE SECONDO
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                  QUESTO PROGRAMMA SERVE PER METTERE TUTTE LE EEPROM DELL'ARDUINO UNO  A "ZERO"
//                  LE MEMORIE EEPROM POTREBBERO AVERE "DATI" MEMORIZZATI IN PRECEDENZA
//                  CARICARE UN NUOVO SKETCH NON PULISCE AUTOMATICAMENTE LA EEPPROM
//
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////





















/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
long vet[9] = {
  -2, -2, -2, -2, -2, -2, -2, -2, -2 };  //numero arbitrario, usato per vedere se è stato inserito un numero o  tre cifre,
//il -2 non centra niente con la dimensione dell'array)
//non ho usato -1 perchè significa che non ci sono dati da leggere (secondo la serial available) quindi si poteva fare confusione
long cont = 0;
long x = 0;
#include <EEPROM.h>
byte ciliegia=1;
byte mela=1;
byte pera=1;
int numem=0;
void setup()
{
  // start serial port at 9600 bps:
  Serial.begin(9600);



}

void loop()
{
  while (Serial.available() > 0)
  {
    vet[cont] = Serial.read()-48;
    cont++;
    delay(60);
   
  }

  if (vet[0] < -2 || vet[1] < -2 || vet[2] < -2 || vet[3] < -2 || vet[4] < -2 || vet[5] < -2 || vet[6] < -2 || vet[7] < -2 || vet[8] < -2)
    Serial.println(" ATTENZIONE DEVI  INSERIRE SOLO IL NUMERO 12345 ");

  if (vet[0] > 9 || vet[1] > 9 || vet[2] > 9 || vet[3] > 9 || vet[4] > 9 || vet[5] > 9 || vet[6] > 9 || vet[7] > 9 || vet[8] > 9)
    Serial.println(" ATTENZIONE DEVI  INSERIRE SOLO IL NUMERO 12345 ");



  if(cont > 0)
  {
    cont = 0;


    if (vet[8] == -2 && vet[7] == -2 && vet[6] == -2 &&  vet[5] ==  -2  && vet[4] ==  -2  && vet[3] ==  -2  && vet[2] ==  -2  && vet[1] ==  -2 )
   
    {                                                                         
        x = vet[0];                                                           
    }
    else

        if (vet[8] == -2 && vet[7] == -2 && vet[6] == -2 && vet[5] ==  -2  && vet[4] ==  -2  && vet[3] ==  -2  && vet[2] ==  -2 ) // 
      {
        x = (vet[0]* 10 +   vet[1]    );
      }
      else
        if  (vet[8] == -2 && vet[7] == -2 && vet[6] == -2 &&  vet[5] ==  -2  && vet[4] ==  -2  && vet[3] ==  -2 ) //
        {
          x = (vet[0] * 100 + vet[1]* 10+ vet[2]);
        }
        else
          if  (vet[8] == -2 && vet[7] == -2 && vet[6] == -2 && vet[5] ==  -2  && vet[4] ==  -2  )
          {
            x = (vet[0] * 1000 + vet[1] * 100 + vet[2]* 10 + vet[3]); 
          }
          else
            if  (vet[8] == -2 && vet[7] == -2 && vet[6] == -2 && vet[5] ==  -2   )
            {
              x = (vet[0] * 10000 + vet[1] * 1000 + vet[2]* 100 + vet[3]* 10 + vet[4]); 

            }
            else
              if  (vet[8] == -2 && vet[7] == -2 && vet[6] == -2 )
              {
                x = (vet[0] * 100000 + vet[1] * 10000 + vet[2]* 1000 + vet[3]* 100 + vet[4]* 10 + vet[5]); 

              }
              else

                if  (vet[8] == -2 && vet[7] == -2 )
              {
                x = (vet[0] * 1000000 + vet[1] * 100000 + vet[2]* 10000 + vet[3]* 1000 + vet[4]* 100 + vet[5]* 10+ vet[6]); 

              }
              else 

                if  (vet[8] == -2 )
              {
                x = (vet[0] * 10000000 + vet[1] * 1000000 + vet[2]* 100000 + vet[3]* 10000 + vet[4]* 1000 + vet[5]* 100 + vet[6]* 10+ vet[6]); 

              }
              else



                x = (vet[0] * 100000000 + vet[1] * 10000000 + vet[2]* 1000000 + vet[3]* 100000 + vet[4]* 10000 + vet[5]* 1000 + vet[6]* 100 + vet[7] * 10 + vet[8]);


    if (vet[0] < -2 || vet[1] < -2 || vet[2] < -2 || vet[3] < -2 || vet[4] < -2 || vet[5] < -2 || vet[6] < -2 || vet[7] < -2 || vet[8] < -2 ) x = 0;
    if (vet[0] > 9 || vet[1] > 9 || vet[2] > 9 || vet[3] > 9 || vet[4] > 9 || vet[5] > 9 || vet[6] > 9 || vet[7] > 9 || vet[8] > 9)  x = 0;

    if (x == -2 || x== -1) x=0;


    if (vet[0] >= -2 && vet[1]  >= -2 &&  vet[2]  >= -2 &&  vet[3] >= -2 && vet[4] >= -2 && vet[5] >= -2 && vet[6] >= -2 && vet[7] >= -2 && vet[8] >= -2 &&
      vet[0] <= 9 && vet[1] <= 9 &&  vet[2] <= 9 &&  vet[3] <= 9 &&  vet[4] <= 9 &&  vet[5] <= 9 &&  vet[6] <= 9 &&  vet[7] <= 9 &&  vet[8] <= 9 )
      Serial.println(" NUMERO INSERITO  "),   Serial.println(x);

    if (x > 12345 ) Serial.println(" INSERISCI 12345  E  ATTENDI ")  ;
    if (x < 12345 ) Serial.println(" INSERISCI 12345  E  ATTENDI ")  ;

    vet[0] = -2; 
    vet[1] = -2;
    vet[2] = -2;
    vet[3] = -2;
    vet[4] = -2;
    vet[5] = -2;
    vet[6] = -2;
    vet[7] = -2;
    vet[8] = -2;       
  }
 
 
    if ( x==12345  && ciliegia ==1)  EEPROM.write(1023, 3 ),ciliegia =0;


  if ( mela==1 && x==12345 && EEPROM.read (1023) == 3)   Serial.println("ATTENDI QUALCHE SECONDO"), mela=0;

  if ( pera==1 && x==12345 )  EEPROM.write(numem, 0 );
  if ( pera==1 && x==12345 )  numem ++ ;
  if (numem>1022 && pera==1) Serial.println(" ");
  if (numem>1022 && pera==1) Serial.println(" OK MEMORIA RIPULITA"),pera=0;


}
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

Michele Menniti

azz che lavoro! :)
ma tutta la parte iniziale riguarda il controllo della password (possiamo chiamarla così?), in effetti il lavoro di azzeramento sono solo quei 5-6 If... finali?
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

m_ri

#32
Sep 30, 2012, 07:51 pm Last Edit: Sep 30, 2012, 07:55 pm by m_ri Reason: 1
:smiley-eek: ufficio complicazioni affari semplici?!  :smiley-eek:
ti consiglio di dare un'occhiata all'uso dei cicli for..

tuxduino

#33
Sep 30, 2012, 08:26 pm Last Edit: Sep 30, 2012, 08:58 pm by tuxduino Reason: 1
:smiley-eek-blue:

Dai un'occhiata qui:

http://arduino.cc/en/Tutorial/EEPROMClear

E qui:
Code: [Select]

#include <EEPROM.h>


const int BUFSIZE = 10;
char buffer[BUFSIZE];
int bufIndex = 0;

const char* PASSWORD = "12345";


void fillEeprom(int startAddr, int endAddr, byte value) {
    if (startAddr < 0) {
        return;
    }

    if (endAddr < 0) {
        return;
    }

    if (startAddr > endAddr) {
        return;
    }

    for (int i = startAddr; i <= endAddr; i++) {
        EEPROM.write(i, value);
    }
}


void clearEeprom() {
    fillEeprom(0, 1023, 0xFF);    // ci dovrebbe essere una costante predefinita che indica la fine della EEPROM...
}


void processBuffer(const char* buf) {
    if (strcmp(buf, PASSWORD) == 0) {
        clearEeprom();
        Serial.println("Eeprom cancellata.");
    }
    else {
        Serial.println("Password errata.");
    }
}


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


void loop() {
    char ch;

    while(Serial.available() > 0) {
        ch = Serial.read();

        switch(ch) {
        case 0x0A:
        case 0x0D:
            if (bufIndex > 0) {
                buffer[bufIndex] = 0;
                processBuffer(buffer);
                bufIndex = 0;
            }
            break;

        default:
            if (bufIndex < (BUFSIZE - 1)) {
                buffer[bufIndex];
                bufIndex++;
            }
            else {
                // carattere perso per mancanza di spazio nel buffer
            }
        }
    }
}


L'ho soltanto compilato, ma non provato su una scheda reale. Se ho scritto qualche castroneria, vi prego di segnalarlo, grazie!

:)

m_ri

GINGARDU se vuoi scrivi esattamente cosa fa il tuo sketch....(non ho voglia di leggermelo tutto)..se ho tempo,te ne scrivo uno più leggero..

Ciao,
sono sicuro che la eeprom non viene cancellata quando si carica lo sketch, durante lo sviluppo dell'Ardupower ho ricaricato decine di volte il programma, ma i parametri tcp e la password salvate nella eeprom rimanevano sempre invariati.

Alberto

leo72

@bigjohnson:
lo si era già detto fin dalla 1a pagina  ;)

Go Up