Go Down

Topic: dubbi sulla funzione millis() (Read 1 time) previous topic - next topic

ƎR

#30
Dec 29, 2011, 06:42 pm Last Edit: Dec 30, 2011, 07:16 am by er_like_no_other Reason: 1
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 :)

Code: [Select]
#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;
Riccardo Ertolupi of the Vicenza Thunders Team: http://www.VicenzaThunders.com

Go Up