problema sketch

ciao a tutti! sto realizzando la tesina per la maturità, in poche parole si tratta di un robot/macchinina che si muove grazie a due motori i quali sono controllati tramite wifi da uno smarthphone! detto ciò, che non centra molto, vi pongo il mio problema:

premessa: io utilizzo un arduino ethernet e durante alcuni esperimenti qualcosa è andato storto e dei componenti si sono bruciati; l’arduino funziona comunque perfettamente a parte i piedini 5,6 e 9.

problema: i piedini che supportano il pwm sono il 3,5,6,9,10,11…togliendo quelli bruciati rimangono il 3,10,11.
questi 3 piedini sono sicuro al 100% che funzionano perché scrivendo uno sketch di prova del tipo:

void setup() {               
  pinMode(3, OUTPUT);     
}

void loop() {
  analogWrite(3, 0);   
  delay(2000);              
  analogWrite(3, 128);    
  delay(2000);              
  analogWrite(3, 255);    
  delay(2000  
}

e sotituendo al 3 anche il 10 e l’11 i valori che leggo con il tester variano e sono corretti.

venendo al dunque se nel mio sketch utilizzo il piedino 3 tutto funziona perfettamente, se invece utilizzo il piedino 10 o 11 la tensione rimane fissa a 4.70 o comunque non è corretta.
questo è il mio sketch:

#include <SPI.h>
#include <Ethernet.h>
#include <Flash.h>
#include <SD.h>
#include <TinyWebServer.h>

Sd2Card card;
SdVolume volume;
SdFile root;
SdFile file;
String readString;
String potenza1;
String potenza2;
int i;
int c;
int char1=0;
int char2=0;

int pinpwm=3;
int pinh=1;
int pinl=2;

static uint8_t mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 177 };
EthernetServer server(80);
 
TinyWebServer::PathHandler handlers[] = 
{
  {"/", TinyWebServer::GET, &index_handler },
  {"/Istruzioni_da_web", TinyWebServer::POST, &istruzioni_da_web},
  {"/" "*", TinyWebServer::GET, &file_handler },
  {NULL},
};
    
const char* headers[] = {"Content-Length", NULL};
TinyWebServer web = TinyWebServer(handlers, headers);

boolean index_handler(TinyWebServer& web_server) 
{
  send_file_name(web_server, "index.htm");
  return true;
}

boolean file_handler(TinyWebServer& web_server) 
{
  char* filename = TinyWebServer::get_file_from_path(web_server.get_path());
  send_file_name(web_server, filename);
  free(filename);
  return true;
}

void send_file_name(TinyWebServer& web_server, const char* filename) 
{
  if (!filename) 
  {
    web_server.send_error_code(404);
    web_server << F("Could not parse URL");
  } 
  else 
  {
    TinyWebServer::MimeType mime_type = TinyWebServer::get_mime_type_from_filename(filename);
    web_server.send_error_code(200);
    web_server.send_content_type(mime_type);
    web_server.end_headers();
    if (file.open(&root, filename, O_READ)) 
    {
      Serial.println(filename);
      web_server.send_file(file);
      file.close();
    } else {
      web_server << F("Could not find file: ") << filename << "\n";      
    }
  }
}

//-------------------questo pezzo riceve stringhe da web con metodo post e risponde-----------------
boolean istruzioni_da_web(TinyWebServer& web_server) 
{
  web_server.send_error_code(200);
  web_server.send_content_type("text/plain");
  web_server.end_headers();
   Client& client = web_server.get_client();
  
          if (client.available()) 
          {
            for(i = 0; i <= 8 ; i++)
            { 
              char c = (char)client.read();
              readString.concat(c);
              if(c=='!') i=8;   
            }
          }
          
    char1 = readString.indexOf("#");
    char2 = readString.indexOf("!");
    potenza1 = readString.substring(0,char1);
    potenza2 = readString.substring(char1+1,char2);     
         
            if(potenza1=="0"){
             
             digitalWrite(pinh,HIGH);
             digitalWrite(pinl,LOW);
             analogWrite(pinpwm,0);
              
            }
            
            if(potenza1=="60"){
             
             digitalWrite(pinh,HIGH);
             digitalWrite(pinl,LOW);
             analogWrite(pinpwm,60);
              
            }
            
            if(potenza1=="120"){
             
             digitalWrite(pinh,HIGH);
             digitalWrite(pinl,LOW);
             analogWrite(pinpwm,120);
              
            }
            
            if(potenza1=="180"){
             
             digitalWrite(pinh,HIGH);
             digitalWrite(pinl,LOW);
             analogWrite(pinpwm,180);
              
            }
            
            if(potenza1=="255"){
             
             digitalWrite(pinh,HIGH);
             digitalWrite(pinl,LOW);
             analogWrite(pinpwm,255);
              
            }
            
            
            if(potenza1=="-60"){
             
             digitalWrite(pinl,HIGH);
             digitalWrite(pinh,LOW);
             analogWrite(pinpwm,60);
              
            }
            
            if(potenza1=="-120"){
             
             digitalWrite(pinl,HIGH);
             digitalWrite(pinh,LOW);
             analogWrite(pinpwm,120);
              
            }
            
            if(potenza1=="-180"){
             
             digitalWrite(pinl,HIGH);
             digitalWrite(pinh,LOW);
             analogWrite(pinpwm,180);
              
            }
            
            if(potenza1=="-255"){
             
             digitalWrite(pinl,HIGH);
             digitalWrite(pinh,LOW);
             analogWrite(pinpwm,255);
              
            }
   
 readString="";         
 delay(1);
  client.flush();
 client.stop();  
  
}
//----------------------------------------------------------------------------------------

void setup() 
{
 card.init(SPI_FULL_SPEED, 4);
 volume.init(&card);
 root.openRoot(&volume);
 Ethernet.begin(mac, ip);
 web.begin();
 delay (2000);
 pinMode(pinpwm, OUTPUT);
 pinMode(pinh, OUTPUT);
 pinMode(pinl, OUTPUT);
} 

void loop() 
{
 web.process();
    delay (1);
}

attendo che qualcuno più esperto di me abbia qualche idea, perché è da giorni che faccio prove ma non riesco a trovare una soluzione, potrei pensare che sia il fatto che si è bruciato qualche componente ma se nel primo sketch di prova funzionano non capisco perché nel mio sketch non vanno! per adesso grazie!

Ciao

vedo che utilizzi la libreria SD.h, i pin 10-11 normalmente sono utilizzati da tale libreria per parlare con la SD (interfaccia SPI + pin 10 per CS).

Luca mi ha anticipato.
Cambia il chip e spera che non si sia bruciato qualche altro componente della scheda.
Ah, domanda: come hai fatto a bruciare i pin? Hai per caso collegato i motori direttamente ai pin? Occhio a non rifarlo perché bruceresti un altro integrato :stuck_out_tongue:

leo72:
Luca mi ha anticipato.
Cambia il chip e spera che non si sia bruciato qualche altro componente della scheda.
Ah, domanda: come hai fatto a bruciare i pin? Hai per caso collegato i motori direttamente ai pin? Occhio a non rifarlo perché bruceresti un altro integrato :stuck_out_tongue:

nn sono in grado di cambiare il chip! per bruciarlo, durante alcuni test, probabile ho invertito qualche ingresso con qualhe uscita! non ho attaccato direttamente i motori, uso l'l298n.

lucadentella:
Ciao

vedo che utilizzi la libreria SD.h, i pin 10-11 normalmente sono utilizzati da tale libreria per parlare con la SD (interfaccia SPI + pin 10 per CS).

domani provo, se è quello, grazie davvero, è una settimana che sto facendo mille prove, eventualmente ci sarebbe qualche modo per assegnare alla libreria altri piedini?

Ciao

puoi liberare il solo PIN 10, assegnando un altro PIN come CS della SD:

simon_e:
nn sono in grado di cambiare il chip!

Non mi ricordavo che avevi detto di usare un Arduino Ethernet. Sì, senza attrezzatura è quasi impossibile sostituirlo.

lucadentella:
Ciao

puoi liberare il solo PIN 10, assegnando un altro PIN come CS della SD:
SD - Arduino Reference

ho riguardato lo sketch ed ho trovato questo pezzo:

void setup()
{
card.init(SPI_FULL_SPEED, 4);
volume.init(&card);
root.openRoot(&volume);

è possibile che quel 4 li sia il piedino?? e quindi il 10 sarebbe già libero???

vero che la SD ha il CS sul pin 4, ma la ethernet utilizza invece il 10:

NB: Pins 10, 11, 12 and 13 are reserved for interfacing with the Ethernet module and should not be used otherwise. This reduces the number of available pins to 9, with 4 available as PWM outputs.

lucadentella:
vero che la SD ha il CS sul pin 4, ma la ethernet utilizza invece il 10:

NB: Pins 10, 11, 12 and 13 are reserved for interfacing with the Ethernet module and should not be used otherwise. This reduces the number of available pins to 9, with 4 available as PWM outputs.
http://arduino.cc/en/Main/ArduinoBoardEthernet

tutto chiaro! quindi alla fine i piedini disponibili per il pwm sarebbero solo il 3,5,6,9 ma dato che 5,6,9 non funzionano più, l'unica soluzione sarebbe quella di comprare un altro arduino..! grazie mille!