Pages: 1 2 [3]   Go Down
Author Topic: "residuati bellici"  (Read 2250 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                   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;


 }
Logged


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

Lamezia Terme
Offline Offline
Shannon Member
****
Karma: 414
Posts: 11987
Le domande di chi vuol imparare rappresentano la sua sete di sapere
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

azz che lavoro! smiley
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?
Logged

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

Offline Offline
God Member
*****
Karma: 8
Posts: 550
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

 smiley-eek ufficio complicazioni affari semplici?!  smiley-eek
ti consiglio di dare un'occhiata all'uso dei cicli for..
« Last Edit: September 30, 2012, 12:55:51 pm by m_ri » Logged

Offline Offline
Edison Member
*
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

 smiley-eek-blue

Dai un'occhiata qui:

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

E qui:
Code:
#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!

smiley
« Last Edit: September 30, 2012, 01:58:49 pm by tuxduino » Logged

Offline Offline
God Member
*****
Karma: 8
Posts: 550
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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..
Logged

Milan, Italy
Offline Offline
Sr. Member
****
Karma: 0
Posts: 329
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged


Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@bigjohnson:
lo si era già detto fin dalla 1a pagina  smiley-wink
Logged


Pages: 1 2 [3]   Go Up
Jump to: