Led "L" sempre accesa

Lo sketch funzionava correttamente. L'unica modifica che ho fatto prima dell'ultima accensione è stata quella di aver collegato dei PIN che prima erano scollegati. Lo sketch comanda 5 schede di controllo di motori passo passo mediante l'utilizzo di un joystick per ps2. Ma il programma ha sempre funzionato, è da 2-3 giorni che lo uso, però appunto non avevo ancora mai collegato tutti i PIN che prevedeva il programma.

Ahi ... cosa è collegato a quei pin ? E ... quanti mA assorbe tutto quello che ci hai collegato ?

Guglielmo

Erano collegati a degli ingressi di due integrati, però almeno in teoria, dovevano essere ancora tutti a livello basso.

... mi sa tanto che a questo punto ... c'è bisogno di uno schema dei collegamenti e dei componenti usati ... :roll_eyes:

Guglielmo

Ma generalmente cosa sta a significare quel led?

E' collegato al pin digitale 13, se lo imposti come uscita e la setti ad HIGH si accende.
Non ha scopi particolari

Quel LED è il solito LED che stà sulle varie board ... quello collegato al "digital pin 13" ... lo vedi nello schema qui : http://arduino.cc/en/uploads/Main/arduino-duemilanove-schematic.pdf ... in alto a destra, collegato al pin fisico 19 del chip (PB5) ... e, sempre acceso, non è una bella cosa ... :roll_eyes:

Guglielmo

Edit : Ci siamo sovrapposti con pelletta XD

Hai collegato qualcosa ai pin 0 e 1?
Togli tutto dal Arduino e riprova di caricare uno sketch per esempio quello di Blink che trovi nei esempi del IDE.
Il LED L viene pilotato dal Pin 13. Stai usando nello sketch quel pin?
Dacci lo sketch.
Ciao Uwe

Non riesco a cambiare sketch perché mi da errore di sincronizzazione...
avrdude: stk500_getsync(): not in sync: resp=0x00

Hai un altro arduino? Se sì prova a ricaricare il bootloader sul micro incasinato.
Inizialmente quando mi capitava risolvevo così, so che c'entra poco ma funzionava alla grande.

Scusa l'ignoranza, ma il bootloader cosa sarebbe?

Sarebbe un firmware caricato in un'area "protetta" del microcontrollore che serve per caricare gli sketch via seriale; quando carichi uno sketch dall'IDE il bootloader non viene sovrascritto.

E come faccio a caricare il bootloader di uno sul l'altro?

Non è che vai a copiare il bootloader che sta dentro un processore su un altro, non funziona così; in pratica l'ide si occuperà di caricare il bootloader usando l'arduino funzionante come programmatore.
Il prof. Menniti ha scritto una guida sull'argomento, se hai due arduino vai a pagina 14

Scusa anse94, la domanda ti è stata fatta: il tuo sketch aveva delle istruzioni per pilotare quel led oppure no?

Il pin 13 era stato solo "rinominato" dal programma, per un uso futuro. Però mi sono accorto che lo avevo collegato comunque come uscita all'ingresso di un integrato..

Quindi potrebbe stare acceso anche per impostazione software.
Ma si potrebbe avere lo sketch?

Ecco il programma

#include <GPSX.h>
#include <GPSXClass.h>

#undef round //serve per non far fallire la compilazione
const int clock1 = 2;                  // Attribuisco al pin 2 il controllo del clock del motore 1 (Avanti e indietro)
const int direction1 = 3;
const int clock2 = 4;                  // Attribuisco al pin 4 il controllo del clock del motore 2 (Destra e sinistra)
const int direction2 = 5;
const int clock3 = 6;                  // Attribuisco al pin 6 il controllo del clock del motore 3 (Su e giù)                        
const int direction3 = 7;
const int clock4 = 8;                  // Attribuisco al pin 8 il controllo del clock del motore 4 (Stringi pinza)
const int direction4 = 9;
const int clock5 = 10;
const int direction5 = 11;
const int clock6 = 12;
const int direction6 = 13;
int asd =0;
void setup()
{
  Serial.begin(9600);
  pinMode(clock1, OUTPUT);                                
  pinMode(clock2, OUTPUT);
  pinMode(clock3, OUTPUT);
  pinMode(clock4, OUTPUT);
  pinMode(clock5, OUTPUT);
  pinMode(clock6, OUTPUT);
  pinMode(direction1, OUTPUT);
  pinMode(direction2, OUTPUT);
  pinMode(direction3, OUTPUT);
  pinMode(direction4, OUTPUT);
  pinMode(direction5, OUTPUT);
  pinMode(direction6, OUTPUT);
  PSX.mode(PSX_PAD1, MODE_ANALOG, MODE_UNLOCK);
  PSX.motorEnable(PSX_PAD1, MOTOR1_ENABLE, MOTOR2_ENABLE);
  // Poll current state once.
  PSX.updateState(PSX_PAD1);
}
void loop()
{
PSX.updateState(PSX_PAD1);
int data4 = ANALOG_RIGHT_X(PSX_PAD1);
int data3 = ANALOG_RIGHT_Y(PSX_PAD1);
int data2 = ANALOG_LEFT_X(PSX_PAD1);
int data1 = ANALOG_LEFT_Y(PSX_PAD1);

  if (data1 < 20) {                                           //Se la levetta analogica sinistra è verso l'alto, atttiva il motore 1 con direzione avanti
    digitalWrite(clock1, LOW);
    digitalWrite(direction1, HIGH);
    delay(20);
    digitalWrite(clock1, HIGH);
  }
  else if (IS_DOWN_UP(PSX_PAD1)) {                               //Se è premuta la freccia avanti, attiva il motore 1 con direzione avanti
    digitalWrite(clock1, LOW);
    digitalWrite(direction1, HIGH);
    delay(20);
    digitalWrite(clock1, HIGH);
  } 
  else if (data1 < 80 && data1 > 20){                        //Se la levetta analogica sinistra è leggermente verso l'alto, atttiva il motore 1 con direzione avanti
    digitalWrite(clock1, LOW);
    digitalWrite(direction1, HIGH);
    delay(100);
    digitalWrite(clock1, HIGH);
  }
  else if (data1 > 230) {                                          //Se la levetta analogica sinistra è verso il basso, atttiva il motore 1 con direzione indietro
    digitalWrite(clock1, LOW);
    digitalWrite(direction1, LOW);
    delay(20);
    digitalWrite(clock1, HIGH);
  }
  else if (IS_DOWN_DOWN(PSX_PAD1)) {                               //Se è premuta la freccia indietro, attiva il motore 1 con direzione indietro
    digitalWrite(clock1, LOW);
    digitalWrite(direction1, LOW);
    delay(20);
    digitalWrite(clock1, HIGH);
  }
  else if (data1 > 170 && data1 < 230){                        //Se la levetta analogica sinistra è leggermente verso il basso, atttiva il motore 1 con direzione indietro
    digitalWrite(clock1, LOW);
    digitalWrite(direction1, LOW);
    delay(100);
    digitalWrite(clock1, HIGH);
  }
  else {
   digitalWrite(clock1, LOW);
   digitalWrite(direction1, LOW);
  }

  if (data2 < 20) {                                           //Se la levetta analogica sinistra è verso sinistra, atttiva il motore 2 con direzione sinistra
    digitalWrite(clock2, LOW);
    digitalWrite(direction2, HIGH);
    delay(20);
    digitalWrite(clock2, HIGH);
  }
  else if (IS_DOWN_LEFT(PSX_PAD1)) {                               //Se è premuta la freccia sinistra, attiva il motore 2 con direzione sinistra
    digitalWrite(clock2, LOW);
    digitalWrite(direction2, HIGH);
    delay(20);
    digitalWrite(clock2, HIGH);
  }
  else if (data2 < 80 && data2 > 20){                        //Se la levetta analogica sinistra è leggermente verso sinistra, atttiva il motore 2 con direzione sinistra
    digitalWrite(clock2, LOW);
    digitalWrite(direction2, HIGH);
    delay(100);
    digitalWrite(clock2, HIGH);
  }
  else if (data2 > 230) {                                          //Se la levetta analogica sinistra è verso destra, atttiva il motore 2 con direzione destra
    digitalWrite(clock2, LOW);
    digitalWrite(direction2, LOW);
    delay(20);
    digitalWrite(clock2, HIGH);
  }
  else if (IS_DOWN_RIGHT(PSX_PAD1)) {                               //Se è premuta la freccia destra, attiva il motore 2 con direzione destra
    digitalWrite(clock2, LOW);
    digitalWrite(direction2, LOW);
    delay(20);
    digitalWrite(clock2, HIGH);
  }
  else if (data2 > 170 && data2 < 230){                        //Se la levetta analogica sinistra è leggermente verso destra, atttiva il motore 2 con direzione destra
    digitalWrite(clock2, LOW);
    digitalWrite(direction2, LOW);
    delay(100);
    digitalWrite(clock2, HIGH);
  }
  else {
   digitalWrite(clock2, LOW);
   digitalWrite(direction2, LOW);
  }

  if (data3 < 20) {                                           //Se la levetta analogica destra è verso l'alto, atttiva il motore 3 con direzione avanti
    digitalWrite(clock3, LOW);
    digitalWrite(direction3, HIGH);
    delay(20);
    digitalWrite(clock3, HIGH);
  }
  else if (data3 < 80 && data3 > 20){                        //Se la levetta analogica destra è leggermente verso l'alto, atttiva il motore 3 con direzione avanti
    digitalWrite(clock3, LOW);
    digitalWrite(direction3, HIGH);
    delay(100);
    digitalWrite(clock3, HIGH);
  }
  else if (data3 > 230) {                                          //Se la levetta analogica destra è verso destra, atttiva il motore 3 con direzione destra
    digitalWrite(clock3, LOW);
    digitalWrite(direction3, LOW);
    delay(20);
    digitalWrite(clock3, HIGH);
  }
  else if (data3 > 170 && data3 < 230){                        //Se la levetta analogica destra è leggermente verso destra, atttiva il motore 3 con direzione destra
    digitalWrite(clock3, LOW);
    digitalWrite(direction3, LOW);
    delay(100);
    digitalWrite(clock3, HIGH);
  }
  else {
   digitalWrite(clock3, LOW);
   digitalWrite(direction3, LOW);
  }

if (IS_DOWN_CROSS(PSX_PAD1)) {                               //Se è premuta la croce, attiva il motore 4 che stringe la pinza
  digitalWrite(clock4, HIGH);
  digitalWrite(direction4, HIGH);
}

if (IS_DOWN_TRIANGLE(PSX_PAD1)) {                               //Se è premuto il triangolo, attiva il motore 4 che allenta la pinza
  digitalWrite(clock4, HIGH);
  digitalWrite(direction4, LOW);
}
}

Inizializzi la seriale, ma poi vedo che non la usi. Ma serve alla libreria che usi oppure no? Mi spiego, quella libreria stampa/invia dei dati sulla seriale?
Se fosse così dovresti avere anche il led TX acceso fisso. La comunicazione seriale disturba la programmazione perché entrambe viaggiano sugli stessi pin.

Se non è così, allora è successo qualcosa di più grave alla scheda.

Hai provato di caricare per un test lo sketch di esempio blink? lo trovi tra i esempi del IDE.
Ciao Uwe