questo e' il programma su arduino, se ti serve una mano per adattarlo al tuo scopo dimmelo che ti aiuto volentieri. quando finirò il programma su PC lo metterò online, per ora e' in fase embrionale, e purtroppo non ho molto tempo da dedicarci.
#include
#define TXHEADER 0xA1 // Analyzer v1 #define LOGS_SIZE 64
struct logdata { unsigned an0:10; unsigned an1:10; unsigned an2:10; unsigned :2; unsigned an3:10; unsigned an4:10; unsigned an5:10; unsigned :2; unsigned an6:10; unsigned an7:10; unsigned an8:10; unsigned :2; unsigned an9:10; unsigned an10:10; unsigned an11:10; unsigned :2; unsigned di0:1; unsigned di1:1; unsigned di2:1; unsigned di3:1; unsigned di4:1; unsigned di5:1; unsigned di6:1; unsigned di7:1; unsigned di8:1; unsigned di9:1; unsigned di10:1; unsigned di11:1; unsigned di12:1; unsigned di13:1; unsigned di14:1; unsigned di15:1; };
struct logdata logs[LOGS_SIZE]; volatile int lidx=0; byte txcnt=0; boolean firsthalf=false; boolean start=false;
void savelogs ( void ) { if( !start ) return; register struct logdata *pl = logs+lidx; digitalWrite( 13,HIGH ); // set first bank of inputs pl->di0 = digitalRead( 4 ); pl->di1 = digitalRead( 5 ); pl->di2 = digitalRead( 6 ); pl->di3 = digitalRead( 7 ); pl->di4 = digitalRead( 8 ); pl->di5 = digitalRead( 9 ); pl->di6 = digitalRead( 10 ); pl->di7 = digitalRead( 11 ); pl->an0 = analogRead( 0 ); pl->an1 = analogRead( 1 ); pl->an2 = analogRead( 2 ); pl->an3 = analogRead( 3 ); pl->an4 = analogRead( 4 ); pl->an5 = analogRead( 5 ); digitalWrite( 13,LOW ); // set second bank of inputs pl->di8 = digitalRead( 4 ); pl->di9 = digitalRead( 5 ); pl->di10 = digitalRead( 6 ); pl->di11 = digitalRead( 7 ); pl->di12 = digitalRead( 8 ); pl->di13 = digitalRead( 9 ); pl->di14 = digitalRead( 10 ); pl->di15 = digitalRead( 11 ); pl->an6 = analogRead( 0 ); pl->an7 = analogRead( 1 ); pl->an8 = analogRead( 2 ); pl->an9 = analogRead( 3 ); pl->an10= analogRead( 4 ); pl->an11= analogRead( 5 ); lidx = ( lidx+1 )%LOGS_SIZE; }
void txlogs ( boolean half ) { Serial.write( TXHEADER ); // header Serial.write( txcnt++ ); // frame counter byte *data = (byte*)( logs+( half ? 0 : LOGS_SIZE/2 ) ); byte check=0; for( int i=0 ; i