Non ha riduttore.
L'effeto Haptic è quello delle manopole delle Mercedez o BMW che pilotano i settaggi e le selezioni dei computer di bordo.
il mio intento è di creare scanalature con il mio motore DC (vedi allegato).
A dire il vero ho fatto qualcosa, ma ci sono ancora dei punti critici a cui sto lavorando e non vanno.
unsigned long duration;
float f;
int counter=0;
int t;
int aState;
int aLastState;
int pos;
boolean stato;
int epos;
int pwmSin[] = {144,160,176,191,204,217,228,237,244,250,253,254,255,
250,244,237,228,217,204,191,176,160,144,
127,110,94,78,64,50,37,20,4,1,
0,1,4,17,26,37,50,64,78,94,110,127
};
void setup() {
TCCR1B = TCCR1B & 0b11111000 | 0x01; // set PWM frequency @ 31250 Hz for Pins 9 and 10
TCCR2B = TCCR2B & 0b11111000 | 0x01; // set PWM frequency @ 31250 Hz for Pins 11 and 3 (3 not used)
ICR1 = 255 ; // 8 bit resolution
pinMode(2,INPUT);
pinMode(6,INPUT);
pinMode(12, OUTPUT);
pinMode(9, OUTPUT);
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(2),contaImpulsi,CHANGE);
aLastState=digitalRead(2);
}
void freq ()
{
duration=pulseIn(2, HIGH);
f=1/(duration*2);
Serial.print("Freq: ");
Serial.println(duration);
}
void contaImpulsi()
{
aState=digitalRead(2);
if (aState!=aLastState)
{
if (digitalRead(6)!=aState)
{
count++;
if (counter)stato=0;
}
else
{
count--;
stato=1;
}
}
aLastState=aState;
//t = millis();
}
void CW()
{
digitalWrite(12, LOW); // Impostazione della direzione “avanti” del motore collegato al canale A
digitalWrite(9, LOW); // Disattivazione del brake del motore per il canale A
analogWrite(3, pwmSin[epos]); // Massima velocità del motore
}
void CCW()
{
digitalWrite(12, HIGH); // Impostazione della direzione “avanti” del motore collegato al canale A
digitalWrite(9, LOW); // Disattivazione del brake del motore per il canale A
analogWrite(3, pwmSin[epos]); // Massima velocità del motore
}
void move()
{
if (stato==1)
{
digitalWrite(12, HIGH); // Impostazione della direzione “avanti” del motore collegato al canale A
digitalWrite(9, LOW); // Disattivazione del brake del motore per il canale A
analogWrite(3, pwmSin[epos]); // Massima velocità del motore
}
if (stato==0)
{
digitalWrite(12, LOW); // Impostazione della direzione “avanti” del motore collegato al canale A
digitalWrite(9, LOW); // Disattivazione del brake del motore per il canale A
analogWrite(3, pwmSin[epos]); // Massima velocità del motore
}
if (stato==2)
{
digitalWrite(12, LOW); // Impostazione della direzione “avanti” del motore collegato al canale A
digitalWrite(9, LOW); // Disattivazione del brake del motore per il canale A
analogWrite(3, 0); // Massima velocità del motore
}
}
void nomove()
{
if (pos<0 || pos>360)
{
digitalWrite(9, HIGH);
pos=180;
}
delay(20);
digitalWrite(9, LOW);
}
void loop()
{
pos=map(counter,-900,900,0,360);
//pos=pos%4;
epos=pos%45;
//nomove();
//freq();
//CW();
//CCW();
//move();
Serial.print("pos: ");
Serial.print(pos);
Serial.print(",");
Serial.print("epos: ");
Serial.print(epos);
Serial.print(",");
Serial.print("PWM: ");
Serial.print(pwmSin[epos]);
Serial.print(",");
Serial.print("stato: ");
Serial.println(stato);
}