problema di conteggio di impulsi di fototransistor

ciao
mi scuso per l'inconveninte con il primo post :blush:
volevo chiedervi come potevo risolvere il conteggio di impulsi tramite fototransistor montati su un motore DC per controllare la posizione in feedback tramite l'arduino 2009.
l'uscita dei fototranistor l'ho condizionata con un comparatore per avere un segnale pulito tra 0 e 5 volt e l'ho posta in un 'entrata digitale ma quando metto la condizione di stop per fermare il motore ( quando il conteggio arriva ad un tot di impulsi stabilito) non si ferma. il segnale è un'onda quadra di circa 125 hz, quindi non è troppo veloce per l'arduino penso.
vi posto il codice che ho scritto per la prova del feedback, spero che mi riusciate ad aiutare :smiley:
questo feedback mi serviva per pilotare i motori di un braccio robotico:)
grazie 1000!!!

int sensore1=13; //fototransistor posto sul motore
int enable1 =2;
int H_bridge1_1 =3;
int H_bridge1_2 =4;
int sensore_nastro_trasportatore =5;

void setup()
{
  //inizializzo i pin
  pinMode(sensore1,INPUT);
  pinMode(enable1,OUTPUT);
  pinMode(H_bridge1_1,OUTPUT);
  pinMode(H_bridge1_2,OUTPUT);
  Serial.begin(9600);
  pinMode(sensore_nastro_trasportatore,INPUT);
}

void loop()
{
  int terminal_conut=0;
  int sensore1counter =0;
  int last=LOW;
  int val=0;
  int sensore_nastro_trasportatore_stato=0;
  sensore_nastro_trasportatore_stato=digitalRead(sensore_nastro_trasportatore);// questo è un controllo per accendere e spegnere il motore
  if((sensore_nastro_trasportatore_stato==HIGH) && (terminal_count==0))
  {
    digitalWrite(enable1,HIGH);
    digitalWrite(H_bridge1_1,HIGH);
    digitalWrite(H_bridge1_2,LOW);
    val=digitalRead(sensore1);
    if(last==LOW && val==HIGH)
    {
      sensore1counter++;    
      Serial.println(sensore1counter);  
    //volevo vedere su terminale il contatore che si incrementava ogni impulso ma rimane fermo ad uno come se non riuscisse a leggere gli anltri impulsi 
    }
    last=val;
    if(sensore1counter ==10)
    {
      terminal_count=1;  //questa dovrebbe essere la condizione di uscita dall'if per fermare il motore, quindi per andare in un'alta condizione del programma che dovrei scrivere in seguito
      sensore1counter=0;
      Serial.println(sensore1counter);
      digitalWrite(enable1,LOW);
    }
    else
      terminal_conut=0;
  }
  else
    digitalWrite(enable1,LOW);
}

spero di essermi spiegato bene
grazie in anticipo:)

prova a cambiare questa riga:
if(sensore1counter ==10)
con questa:
if(sensore1counter >=10)

void loop()
{
int terminal_conut=0;
  int sensore1counter =0;
  int last=LOW;
  int val=0;
  int sensore_nastro_trasportatore_stato=0;
  sensore_nastro_trasportatore_stato=digitalRead(sensore_nastro_trasportatore);// questo è un controllo per accendere e spegnere il motore
  if((sensore_nastro_trasportatore_stato==HIGH) && (terminal_count==0))
  {...

Se queste definizioni delle variabili li metti nel loop() ogni volta li hai a quei valori iniziali. Il terminal_count come le altre variabili sará SEMPRE zero e non serve controllarlo nel if. Non hai valori che sono riportate da un ciclo loop() al sucessivo. Le definizioni delle varabili devi metterle fuori dal loop() prima del setup().

Se non hai un Arduino UNO R3 é meglio non usare il pin 13 come entrata perché il led e la resistenza da 500Ohm che sono attacate lí disturbano. Prendi un altro pin.

Attenzion ecome scrivi le variabili. la variabile si chiama else
terminal_cONUt o terminal_cOUNt ??

Ciao Uwe

si ho sbagliato a scriverle è terminal_count (tutto il giorno a cercare un codice per la lettura del fototransistor e a programmare mi ha fatto incrociare gli occhi) eheheh
quindi le devo mettere fuori le inizializzazioni perchè il loop si esegue all'infinito automaticamente giusto?:slight_smile: e quindi non mi memorizza la variabile che mi disabilita l'enable1.
Quello del pin 13 non lo sapevo:( volevo vedere se il fototransistor funzionava correttamente ogni volta che trasmetteva:) (questo accade anche se metto la R di pull down?). Appena riesco a fare le modifiche del programma vi faccio sapere che per due giorni non riuscirò a sviluppare niente:(
Grazie 1000:):slight_smile: meno male che ci siete voi a colmarmi le lacune pian piano eheeh
un'altra domanda:) il progetto a cui stavo lavorando necessita di tutti i 14 piedini digitali, i piedini 0 e 1 posso utilizzarli come gli altri se metto semplicemente pinmode(pin,stato)? volevo controllare un braccio robotico con 3 motori, 2 con un fototransistor ed uno con 2 interruttori di fondocorsa (sarebbe quello adibito per una pinza). Il tutto azionato da un sensore IR su un nastro trasportatore che comandava il processo quando un oggetto, che il braccio deve prendere, ci passa attraverso.
CMQ grazie per aver rimpicciolito il codice non sapevo come fare.... :grin:

andreax:
si ho sbagliato a scriverle è terminal_count (tutto il giorno a cercare un codice per la lettura del fototransistor e a programmare mi ha fatto incrociare gli occhi) eheheh
quindi le devo mettere fuori le inizializzazioni perchè il loop si esegue all'infinito automaticamente giusto?:slight_smile: e quindi non mi memorizza la variabile che mi disabilita l'enable1.
Quello del pin 13 non lo sapevo:( volevo vedere se il fototransistor funzionava correttamente ogni volta che trasmetteva:) (questo accade anche se metto la R di pull down?). Appena riesco a fare le modifiche del programma vi faccio sapere che per due giorni non riuscirò a sviluppare niente:(
Grazie 1000:):slight_smile: meno male che ci siete voi a colmarmi le lacune pian piano eheeh
un'altra domanda:) il progetto a cui stavo lavorando necessita di tutti i 14 piedini digitali, i piedini 0 e 1 posso utilizzarli come gli altri se metto semplicemente pinmode(pin,stato)? volevo controllare un braccio robotico con 3 motori, 2 con un fototransistor ed uno con 2 interruttori di fondocorsa (sarebbe quello adibito per una pinza). Il tutto azionato da un sensore IR su un nastro trasportatore che comandava il processo quando un oggetto, che il braccio deve prendere, ci passa attraverso.
CMQ grazie per aver rimpicciolito il codice non sapevo come fare.... :grin:

Le entrate analogiche possono essere usati come Pin digitali nello stesso modo come quelli digitali ( pinMode , digitalRead ecc)

Analog Pins
In addition to the specific functions listed below, the analog input pins support 10-bit analog-to-digital conversion (ADC) using the analogRead() function. Most of the analog inputs can also be used as digital pins: analog input 0 as digital pin 14 through analog input 5 as digital pin 19. Analog inputs 6 and 7 (present on the Mini and BT) cannot be used as digital pins.

I Pin 0 e 1 normalemnte non si usano per tenersi aperta la possibilitá di trasferimento del sketch e per il debug mandando valori al terminale del IDE.
Ciao Uwe