Morte improvvisa

Salve a tutti, appena adesso dopo aver caricato questo steck , che in teoria dovrebbe ricevere valori da 0 a 128 con un carattere di controllo '&' da monitor seriale darli in pasto a un buffer poi convertito in intero e passarlo alla funzione per la gestione di un potenziometro digitale MCP41010 mi si è bloccato arduino.

#include <SPI.h>  
const int CS = 10;
int level=0;
char BUFF[5];
int i=0;
boolean chek=LOW;
 
void setup() {
  pinMode (CS, OUTPUT);   
  Serial.begin(9600);
  SPI.begin();   
}
 
void loop() {
  
serialEvent();
              if(chek){
                       level=((BUFF[0]-48)*100)+((BUFF[1]-48)*10)+(BUFF[2]-48);
                       if(level<128 && level>0)MCP41010Write(level);
                       for(i=0;i<5;i++){BUFF[i]='0';}
                       chek=LOW;
                      }
    delay(100);
}
 
void MCP41010Write(byte value) 
{
  
  digitalWrite(CS,LOW);
  SPI.transfer(B00010001); // This tells the chip to set the pot
  SPI.transfer(value);     // This tells it the pot position
  digitalWrite(CS,HIGH); 
}

void serialEvent() {
  char Byte;
  int a=0;
while(Serial.available()){Byte=(char)Serial.read();
                          if(Byte != '\n' && a<3 && Byte!='&'){BUFF[a]=Byte;
                                                  a++;}
                          else if(Byte == '&' ){chek=HIGH;}
                          }  
}

In pratica non mi carica più qualsiasi steck ,nel tetantare lampeggia massimo due tre volte il led RX e basta.

Credo di aver accavallato due linee di comunicazione, cosa è potuto succedere? in arduino uno ci sono altri integrati che utilizzano la linea SPI?

condoglianze.

Scollega tutto dalla scheda.
Collegalo al PC e prova ad inviare lo sketch se non va tieni premuto il tasto reset e rilascialo poco prima che torni a fare il sucessivo tentativo.

Quale Arduino hai?
Ciao Uwe

Allora la scheda è un arduino uno rev3 e comunque la prova del reset è già stata fatta pensando che essendo un problema di "seriale occupata" da qualche funzione implementata dopo la lettura del codice volevo far concidere il momento tra il risveglio della scheda e l occupazione della seriale prodotto da codice caricato, non ha ancora funzionato. Secondo voi e possibile una situazione del genere

Se hai una seconda Arduino o un programmatore ISP puoi provare a riscrivere il bootloader e cancellare così lo sketch presente.

Ho finalmente risolto, grazie ad un mio cuginetto che mi ha prestato un'altra scheda arduino sono riuscito a fare delle prove, ho provato a caricare il bootloader sul atmega della mia scheda ma niente sicuramente si è bruciato in qualche modo, presumo il mio caricamento convulsivo degli srtak, è possibile?
Comunque possedevo degli atmega328 vergini in cui ho caricato il boot e piazzato nella scheda e tutto rifunzia :slight_smile:

Grazie e buona domenica