Pages: 1 2 [3]   Go Down
Author Topic: dubbi sulla funzione millis()  (Read 1013 times)
0 Members and 1 Guest are viewing this topic.
Camisano Vicentino (VI), Italy
Offline Offline
God Member
*****
Karma: 4
Posts: 952
ƎR like no other.
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

questo codice è il codice, forse devo fargli qualche ritocco sulle variabili usate nelle funzioni, ma non dovrebbe cambiare molto...
non è per arduino è per un ATtiny84... pare che funzioni, ma è dificile dirlo con certezza perchè 50ms non sono facili da notare a occhio smiley

Code:
#include <NewSoftSerial.h>
NewSoftSerial TinySerial(0,1);

byte x=0, y=0, value[3];
boolean er=0;
unsigned long time[4];

void setup()
{
 TinySerial.begin(9600);
 DDRA=B00111111;  // EN1=3; EN2=4; ballUS=5; LUS=6; RUS=7; FUS=8; BUS=9; LROut=10;
 DDRB=B110;       // RX=0; TX=1; BallOut=2;
 for(y=0;y<4;y++)time[y]=0;
 y=0;
}

void loop()
{
 if((PINA>=B01000000)&&(er==0))
 {
  output:
  x=PINA / B01000000;
  TinySerial.print(value[x-1]);
  er=1;
 }
 
 else
 {
  while(millis()<=time[y])
  {
   if(PINA<B01000000)er=0;
   else if((PINA>=B01000000)&&(er==0))goto output;
  }
  time[y]=millis()+50;
  
  switch(y)
  {
   case 0:{BallUS();                y=1;}break;
   case 1:{value[2]=LRUS(value[2]); y=2;}break;
   case 2:{value[1]=FUS();          y=3;}break;
   case 3:{value[0]=BUS();          y=0;}break;
  }
  
  if(PINA<B01000000)er=0;
 }
}

void BallUS()
{
 unsigned int v;
 
 PORTA=PORTA | B100000;
 delayMicroseconds(10);
 PORTA=PORTA & B1;
 
 DDRA=B011111;
 v=pulseIn(5,HIGH,1000);

 v=v/58;
 if((v!=0)&&(v<=10))v=1;
 else v=0;
 digitalWrite(2,v);
}

byte BUS()
{
 unsigned int v;
 
 PORTA=PORTA | B10;    
 delayMicroseconds(10);
 PORTA=PORTA & B1;
 
 DDRA=B111101;
 v=pulseIn(9,HIGH,17000);
 
 if(v==0)v=17000;
 v=v/58;
 if(v>255)v=255;
 return v;
« Last Edit: December 30, 2011, 01:16:18 am by er_like_no_other » Logged

Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

Pages: 1 2 [3]   Go Up
Jump to: