Pages: [1]   Go Down
Author Topic: progrmmazione tapis roulant pwm  (Read 716 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 1
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Code:
#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);}
}

« Last Edit: February 03, 2013, 12:42:03 pm by carloandrea » Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

la parte finale è quella che dovrebbe regolare la velocità
Logged

Cagliari, Italy
Online Online
Tesla Member
***
Karma: 102
Posts: 6541
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Code:
così
« Last Edit: February 03, 2013, 12:45:34 pm by PaoloP » Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 1
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok fatto ora potete aiutarmi?
Logged

Cagliari, Italy
Online Online
Tesla Member
***
Karma: 102
Posts: 6541
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 1
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Cagliari, Italy
Online Online
Tesla Member
***
Karma: 102
Posts: 6541
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
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
Code:
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);}
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 1
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok provo
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

grandissimo funziona smiley-wink
Logged

Offline Offline
Newbie
*
Karma: 1
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Cagliari, Italy
Online Online
Tesla Member
***
Karma: 102
Posts: 6541
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Se vuoi approfondire puoi leggere queste guide sul linguaggio C++
--> http://www.adjam.org/school/downloads/BasiProgrammazione.pdf
oppure
--> http://www.html.it/guide/guida-c/
--> http://www.html.it/guide/guida-c2/
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 0
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: [1]   Go Up
Jump to: