Loading...
Pages: [1]   Go Down
Author Topic: gestione eventi  (Read 196 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 1
Posts: 24
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

dalve a tutti ecco il mio problema....ho scritto un programma su arduino e funziona fa il suo dovere.... adesso dovrei inserire le routine per delle simulazioni... cioè io ho 3 pulsanti.... quando non premo nulla deve andare in loop il programma principale... quando ne premo uno deve andare in loop un programa di simulazione... quando premo l'altro( solo l'altro) ne deve andare un altra di simulazione... quando premo il terzo(solo il 3) ne deve girare un altra di simulazione.... ho provato a gestire il tutto con la lettura digitale e gli if... ma arduino è come se si impallasse non va.... solo con i programma principale gira, se inserisco le routine di dimulazione non funziona neanche il principale... come potrei fare?
Logged

Offline Offline
Full Member
***
Karma: 2
Posts: 192
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Se non inserisci il tuo sorgente non possiamo aiutarti così d'un colpo  smiley-grin Prova a inserirlo e vediamo cosa possiam fare
Logged

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

eccolo 
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 bt=A1;
int bt2=A2;
int bt3=A3;
int allarme=10;
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(bt, INPUT);
  pinMode(bt2, INPUT);
  pinMode(bt3, INPUT);
  pinMode(allarme, OUTPUT);
  pinMode(tappetopin, OUTPUT);
  pinMode(CardioPin, INPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(12, OUTPUT);
  // initialize serial communication:
  Serial.begin(9600);
  oldMillis = millis();
  oldMillis_antiBounce = oldMillis;
 
}


void loop() {
  digitalRead(bt);
  digitalRead(bt2);
  digitalRead(bt3);
 
  if ((bt==LOW) && (bt2==LOW)&& (bt3==LOW)){
 
   
  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 ( bpm < 60)  //in cascata//
  { 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 <= 180)
  { analogWrite(tappetopin, 125);}
else if ( bpm > 180)
  { analogWrite(tappetopin, 0);
tone(allarme, 2400);
  delay(500);
  noTone(allarme);
  delay(500);
}

}
else if ((bt==HIGH) && (bt2==LOW)&& (bt3==LOW))
 {
  analogWrite(tappetopin, 0);
tone(allarme, 2400);
  delay(500);
  noTone(allarme);
  delay(500);
  unita.sendOut(0);
  deci.sendOut(9);
  digitalWrite(12, HIGH);
  }
  else if ((bt==LOW) && (bt2==HIGH)&& (bt3==LOW)){
    analogWrite(tappetopin, 178);
     unita.sendOut(0);
  deci.sendOut(1);
  digitalWrite(12, HIGH);  }
  else if ((bt==LOW) && (bt2==LOW)&& (bt3==HIGH)){
    analogWrite(tappetopin, 204);
    unita.sendOut(0);
  deci.sendOut(9);
  digitalWrite(12, LOW);}
 
  }
Logged

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

nessuno puo aiutarmi?
Logged

Forum Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 219
Posts: 16460
Don't know what I do
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sull'Arduino non esiste il concetto di più programmi che girano o che vengono lanciati. Il programma è unico, lo sketch che carichi, che può contenere più "funzioni".
Per far ciò che vuoi devi solo mettere nel loop un controllo sulla pressione dei pin a cui hai collegato i tuoi pulsanti e poi chiamare le corrispondenti routine.

Non ho esaminato a fondo il tuo codice ma lì dentro non ho visto grosse funzioni da richiamare.
Logged


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

ok ma come faccio a fare questo controllo? ci ho provato ma il risultato è che non funziona piu niente!
Logged

0
Offline Offline
Edison Member
*
Karma: 7
Posts: 2171
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

prova ad usare il costrutto switch case. Scrivi un'altro programma che usa lo switch case e intercetta la pressione dei tasti e per ogni case dello switch invia qualcosa di indicativo via seriale, postalo così lo commentiamo.

Tutto il codice che hai postato è di intralcio al momento e lo integrerai dopo.

Ciao.
Logged

AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

Pages: [1]   Go Up
Print
 
Jump to: