Arduino map Funktion an Potentiometer anpassen.

OP (Firma: Trafo AG) #6433176
Lesenswert?

Hallo zusammen

Ich steuere mit einem Potentiometer ein PWM-Signal. Das Problem ist ich 
habe ein 5kOhm Poti. Nach 1/3 der Drehung ist bereits die Maximale 
Geschwindigkeit erreicht. Ich möchte gerne ohne an der Hardware was zu 
verändern(Aufgabe des Lehrmeisters) die Komplette Drehung des 
Potentiometer verwenden, aber ich möchte nicht einfach nach hinten 
schiebe indem ich in der map Funktion einen grösseren Wert eintrage dort 
wo im Moment die "1" steht. Wäre es möglich das ganze in die Länge zu 
ziehen. Freue mich auf eure Antworten und Danke schon im voraus.

1
  int ValuePoti = analogRead(Poti);
2
  int Output = map(ValuePoti,1,255,1,1023);
3
  analogWrite(Q,Output);
Gast #6433253
Lesenswert?

Guest schrieb:
> analogRead liefert einen 16Bit Wert zurück

int ist schon richtig:siehe HELP-Sektion....
========================================
Syntax

analogRead(pin)
Parameters

pin: the number of the analog input pin to read from (0 to 5 on most 
boards, 0 to 7 on the Mini and Nano, 0 to 15 on the Mega)
Returns

int (0 to 1023)
=========================================

Aus dem Stehgreif wuerde ich sagen:
int(1023/3) und das sollte es schon gewesen sein.
1023/3 = 341 - das ist auch der Wert der dem Motor die volle Drehzahl 
gibt 1/3 Poti ergeben 1.67V welches vom A/D-wandler in 341 umgewandelt 
wird.
Probier es aus.

  analogWrite(Q,int(analogRead(Poti)/3));
#6434025
Lesenswert?

Elektro F. schrieb:
> int ValuePoti = analogRead(Poti);
> int Output = map(ValuePoti,1,255,1,1023);
> analogWrite(Q,Output);

Sly_marbo schrieb:
> Müsste es nicht sogar so aussehen:
>
> //map(value, fromLow, fromHigh, toLow, toHigh)
>
> int Output = map(ValuePoti,1,1023,1,255);
>
> Der AD Wandler hat doch 10bit und die PWM 8?

Oder man spart sich das in diesem Fall und macht nen right shift.
1
int ValuePoti = analogRead(Poti);
2
int Output = (ValuePoti >> 2);
3
analogWrite(Q,Output);

Dabei fällt mir grad auf, die Funktion analogWrite:
Sie erlaubt "int":
1
void analogWrite(uint8_t pin, int val)
...aber in der Funktion wird nur auf == 0 oder == 255 abgefragt,
sonst kommt "val" direkt ins OCR Register.

Kann man so machen, ist halt kacke... :-D

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren