Ciao a tutti,
Vorrei creare un segnale encoder sintetico a 4 canali.
Ho già provato con il digital White e i delay ma il mio segnale si sporca sopra i 4 Khz.
Qualcuno potrebbe darmi delle ideee.
Ciao a tutti,
Vorrei creare un segnale encoder sintetico a 4 canali.
Ho già provato con il digital White e i delay ma il mio segnale si sporca sopra i 4 Khz.
Qualcuno potrebbe darmi delle ideee.
Dacci lo sketch.
Sparando a caso direi che delay() fa ritardi di millisecondi e non puoi andare a fare ritardi di microsecondi che ti serveirebbero per avere frequenze piú alte. Devi usare delayMicroseconds() o megli i timer del ATmega.
Ciao Uwe
Ho provato con i delayicrosecond.
Come faccio usare i timer del processore?
Ecco il codice:
// encoder virtuale 2.0
int a = 11;
int a- = 10;
int b = 9;
int b- = 8;
int MT_out = 7;
int acc = 6;
long timeBase;
int analogpin = 0;
volatile int state;
volatile int state1;
int mt;
int i;
long duration;
void setup(){
pinMode (a, OUTPUT);
pinMode (a-, OUTPUT);
pinMode (b, OUTPUT);
pinMode (b-, OUTPUT);
pinMode (MT_out, OUTPUT);
pinMode (acc, OUTPUT);
Serial.begin(9600);
}
void loop(){
Time();
state= !state;
digitalWrite(a,state); digitalWrite(a-,!state);
delayMicroseconds(timeBase);
digitalWrite(b,state);digitalWrite(b-,!state);
delayMicroseconds(timeBase);
mt++;
if (mt == 5){
meter();
}
}
void Time(){
timeBase= analogRead(analogpin);
timeBase= map (timeBase, 0, 1023, 0, 10000);
}
void meter(){
state1 = !state1;
digitalWrite(MT_out,state1);
//accelera();
mt = 0;
}
void accelera(){
if( i < 255){
for (int i ; i<255; i++){
analogWrite( acc, i);
delay(1);
}
}
else{
for (int i ; i>0; i--){
analogWrite( acc, i);
delay(1)
}
}
}