progrmmazione tapis roulant pwm

salve a tutti il mio problema puo sembrarvi banale ma non riesco a venirne a capo! devo regolare la velocita in pwm di un motore di un tapis roulant in base alle pulsazioni cardiache,ma non accade nulla! la velocità rimane la stessa forse o sbagliato il codice , l'interfacciamento è giusto con il programma fading funziona alla grande... ecco il codice vi prego aiutatemi

#include <hcf4511be.h>
hcf4511be unita(2,3,4,5);
hcf4511be deci(6,7,8,9);
int bpm;
int decine;
int centinaia;
int unit;
int A;
int tappetopin = 11;
const int  CardioPin = A0;    
const int ledPin = 13;       

long oldMillis;
long oldMillis_antiBounce;

byte contatore = 0;
byte stato = 0;
byte ultimoStato = 0;


void setup() {

  pinMode(CardioPin, INPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(12, OUTPUT);
  // initialize serial communication:
  Serial.begin(9600);
  oldMillis = millis();
  oldMillis_antiBounce = oldMillis;
  
}


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
   
     Serial.print ("bpm:");
     Serial.println ( contatore * 4);
       bpm= contatore*4;

centinaia= bpm/100;
A= bpm- (centinaia*100);
 decine= A/10;
 unit= A- (decine*10);
 Serial.print ("CENTINAIA:");
  Serial.println(centinaia);
 Serial.print ("DECINE:");
 Serial.println(decine);
 Serial.print ("UNITA:");
  Serial.println(unit);
  unita.sendOut(unit);
  deci.sendOut(decine);
  if(centinaia > 0)
  {
    digitalWrite(12, HIGH);
}
  else
{
  digitalWrite(12,LOW);
}
     contatore = 0;
     oldMillis = millis();
     oldMillis_antiBounce =      oldMillis;
     }
  if ( 0 < bpm < 70)
  { analogWrite(tappetopin, 255);}
 else if ( 70 < bpm < 80)
  { analogWrite(tappetopin, 229);}
    else if ( 80 < bpm < 100) 
    {analogWrite(tappetopin, 204);}
    else if ( 100 < bpm < 120)
  { analogWrite(tappetopin, 178);} 
      else if ( 120 < bpm < 140)
  { analogWrite(tappetopin, 153);}
 else if ( 140 < bpm < 160)
  { analogWrite(tappetopin, 125);} 
else if ( 160 < bpm)
  { analogWrite(tappetopin, 102);}
}

la parte finale è quella che dovrebbe regolare la velocità

Ciao,
puoi modificare il tuo primo post (pulsante modify) e inserire il listato tra i tag CODE.
Li trovi nell'editor premendo il pulsante # sopra le faccine.
Deve uscire

così

ok fatto ora potete aiutarmi?

Come si collega il cardio?
Il debounce serve per i pulsanti meccanici non per ingressi impulsivi digitali. Per quello è moto meglio usare un interrupt.

il problema non è quello, il resto del programma fa il suo dovere, il mio problema è la parte dove regolo la pwm co gli if....

 if ( 0 < bpm < 70)
  { analogWrite(tappetopin, 255);}
 else if ( 70 < bpm < 80)
  { analogWrite(tappetopin, 229);}
    else if ( 80 < bpm < 100) 
    {analogWrite(tappetopin, 204);}
    else if ( 100 < bpm < 120)
  { analogWrite(tappetopin, 178);} 
      else if ( 120 < bpm < 140)
  { analogWrite(tappetopin, 153);}
 else if ( 140 < bpm < 160)
  { analogWrite(tappetopin, 125);} 
else if ( 160 < bpm)
  { analogWrite(tappetopin, 102);}

La sintassi dell'IF non prevede il doppio controllo almeno di non usare l'and &&
Quindi devi ripensare il tutto.
Visto che li controlli in cascata potresti provare

 if ( bpm < 70)
  { analogWrite(tappetopin, 255);}
 else if ( bpm < 80)
  { analogWrite(tappetopin, 229);}
    else if ( bpm < 100) 
    {analogWrite(tappetopin, 204);}
    else if ( bpm < 120)
  { analogWrite(tappetopin, 178);} 
      else if ( bpm < 140)
  { analogWrite(tappetopin, 153);}
 else if ( bpm < 160)
  { analogWrite(tappetopin, 125);} 
else if ( bpm > 159)
  { analogWrite(tappetopin, 102);}

ok provo

grandissimo funziona :wink:

non òa sapevo sta cosa ho sempre pensato che l'if si potesse scrivere anche cosi buono a sapersi

Se vuoi approfondire puoi leggere queste guide sul linguaggio C++
--> http://www.adjam.org/school/downloads/BasiProgrammazione.pdf
oppure
--> C (linguaggio): tutorial per imparare programmare | Guida HTML.it
--> C++: tutorial del linguaggio di programmazione | HTML.it

Ciao, posso chiederti che hardware hai usato per interfacciarti con arduino al motore del tapis roulant? te lo sei costruito o ha trovato qualcosa già assemblato?
grazie