Go Down

Topic: acquisizione segnale analogico e misurazione della frequenza (Read 3 times) previous topic - next topic

carloandrea

ciao allora guarda alla fine è tutto a posto va bene cosi... volevo chiederti una cosa.... a seconda dei valori della variabile bpm devo regolare con la pwm la velocità di un motore..... questo è il pezzo di codice che ho scritto alla fine del programma... ma non accade nulla, la velocità del motore rimane sempre la stessa e non so se sia il massimo o un volero intermedio.... l'interfacciamento del motore è ok, ho provato con il programma fading e funziona non so perche non funziona con quest'altro programma... puoi aiutarmi?
if ( 0 <= bpm <= 70)
  { analogWrite(tappetopin, 255);}
if ( 70 < bpm <= 80)
  { analogWrite(tappetopin, 229);}
    if ( 80 < bpm <= 100)
    {analogWrite(tappetopin, 204);}
    if ( 100 < bpm <= 120)
  { analogWrite(tappetopin, 178);}
      if ( 120 < bpm <= 140)
  { analogWrite(tappetopin, 153);}
if ( 140 < bpm <= 160)
  { analogWrite(tappetopin, 125);}
if ( 160 < bpm)
  { analogWrite(tappetopin, 102);}

qsecofr


ciao allora guarda alla fine è tutto a posto va bene cosi... volevo chiederti una cosa.... a seconda dei valori della variabile bpm devo regolare con la pwm la velocità di un motore..... questo è il pezzo di codice che ho scritto alla fine del programma... ma non accade nulla, la velocità del motore rimane sempre la stessa e non so se sia il massimo o un volero intermedio.... l'interfacciamento del motore è ok, ho provato con il programma fading e funziona non so perche non funziona con quest'altro programma... puoi aiutarmi?
if ( 0 <= bpm <= 70)
  { analogWrite(tappetopin, 255);}
if ( 70 < bpm <= 80)
  { analogWrite(tappetopin, 229);}
    if ( 80 < bpm <= 100)
    {analogWrite(tappetopin, 204);}
    if ( 100 < bpm <= 120)
  { analogWrite(tappetopin, 178);}
      if ( 120 < bpm <= 140)
  { analogWrite(tappetopin, 153);}
if ( 140 < bpm <= 160)
  { analogWrite(tappetopin, 125);}
if ( 160 < bpm)
  { analogWrite(tappetopin, 102);}



si non si fa così il test... si fa
if ((a > 100) && (a < 120))

carloandrea

grazie mille mi hai aiutato moltissimo, è il mio progetto di maturità, te ne sono grato... un ultima richiesta che ti faccio se è possibile... potresti spiegarmi i passaggi di questo pezzo di codice? all'esame dovro saper spiegare bene tutti i passaggi e quellli su cui ho delle perplessità sono questi
Code: [Select]
void loop() {
   
   
  stato = digitalRead(CardioPin);
  if (stato != ultimoStato) {

    if (stato == HIGH) {
      //sistole...fronte di salita...
      digitalWrite(ledPin, HIGH);
      if ( millis()- oldMillis_antiBounce  > 10)
              {  // se impiega meno di 10 millisecondi per cambiare di stato è un rimbalzo e non lo conto
              contatore ++;
              oldMillis_antiBounce = millis();

              };
                   
      } else {
      // else stato = low significa che sono in diastole
              digitalWrite(ledPin, LOW);
     
     
    }
    ultimoStato = stato;  // lo stato è variato
  }

   if ( millis()- oldMillis  > 15000) {
     //15 secodi di statistica... calcolo media

ecc.

qsecofr

... dovresti sforzarti di capirlo se no è un imbroglio non un esame... ho messo anche dei commenti...
in ogni caso leggo lo stato della porta, se cambia di stato entro nell'if. All'interno dell'if se il segnale è high significa che siamo facendo una sistole, c'è un if di antirimbalzo che forse non serve e viene incrementato un contatore del battito. quando il segnale torna low significa che si è in fase di diastole e quindi modifica solo lo stato ed aspetta la prossima sistole.



grazie mille mi hai aiutato moltissimo, è il mio progetto di maturità, te ne sono grato... un ultima richiesta che ti faccio se è possibile... potresti spiegarmi i passaggi di questo pezzo di codice? all'esame dovro saper spiegare bene tutti i passaggi e quellli su cui ho delle perplessità sono questi
Code: [Select]
void loop() {
   
   
  stato = digitalRead(CardioPin);
  if (stato != ultimoStato) {

    if (stato == HIGH) {
      //sistole...fronte di salita...
      digitalWrite(ledPin, HIGH);
      if ( millis()- oldMillis_antiBounce  > 10)
              {  // se impiega meno di 10 millisecondi per cambiare di stato è un rimbalzo e non lo conto
              contatore ++;
              oldMillis_antiBounce = millis();

              };
                   
      } else {
      // else stato = low significa che sono in diastole
              digitalWrite(ledPin, LOW);
     
     
    }
    ultimoStato = stato;  // lo stato è variato
  }

   if ( millis()- oldMillis  > 15000) {
     //15 secodi di statistica... calcolo media

ecc.


PUPI

Ciao a tutti, mi intrometto nella discussione.
Sono nuovo in tutti i sensi, sia di Arduino e conseguentemente del forum.
Poichè sono anche io interessato ad acquisire segnali analogici con Arduino, e anche io sono interessato a questo ambito, volevo chiedervi come alla fine avete implementato il sistema: con un display seriale o con tre display a 7 segmenti? Come avete collegato il tutto?
Comunque pensavo di produrre una modifica al circuito analogico, invece del secondo amplificatore identico al primo, sarebbe più interessante provare ad usare un comparatore a finestra con isteresi.... vediamo che mi viene.

Go Up