PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fehler bei "map"



achso
20.08.2017, 13:23
Hallo,
Ich habe mein DUO 4/1 Fahrzeug von 6 auf 12 Volt umgerüstet. Aber den 6 Volt Scheibenwischermotor wollte ich mit PWM in der Drehzahl beschränken. Das klappt auch, nur im Sketch habe ich in map von 0-1023 auf 0-255 runterskaliert. Trotzdem liegt der Wert, den ich in der folgenden "if" angeben muß, überhaupt nicht in dem Bereich 0-255. Auch nicht im 0-1023 Bereich? Eher höher?

Denn 450 entspricht ca 1/3 der Zeit HIGH.
Und 900 entspricht ca 2/3 der Zeit HIGH.
(Zusehen am Oszi)


//Konstanten
const int wischerPin = 0; // Wischermotor an Pin 0 Attiny angeschlossen
const int potiPin = A3 ; // Potenziometer am Pin 3 angeschlossen
const int LED = 1; //Kontrollleuchte Pin 1

// Variablen
int wischerSpeed = 0; // Variable für die Motorgeschwindigkeit
int potiVar = 0 ; // Variable zum speichern des Potentiometers


void setup()
{


pinMode(wischerPin, OUTPUT) ; //Setzt den WischerPin als Ausgang
pinMode(potiPin, INPUT) ; //Potipin als Eingang
pinMode(LED, OUTPUT); //Setzt den LEDPin als Ausgang
}


void loop()
{
potiVar = analogRead(potiPin) ; // Liest das Potentiometer aus
wischerSpeed = map(potiVar, 0, 1023, 0, 200); // Setzt den Bereich auf 0-255


if ((potiVar < 450) || (potiVar > 900)) //Unterhalb/Oberhalb soll Motor nicht laufen
{
digitalWrite(wischerPin, LOW); //Ist aus
digitalWrite(LED, HIGH); //deshalb Kontrolle an
}
else//sonst
{

analogWrite(wischerPin, wischerSpeed); // Variable Drehzahl mit PWM
digitalWrite(LED, LOW);
}
}

Danke, ich nehme jeden Fehlerhinweis dankend auf!

Achim

Mxt
20.08.2017, 16:22
Hallo,

der Inhalt von potiVar wird durch das map ja nicht geändert. Du fragst in dem if die Variable potiVar ab, ausgeben tust du aber wischerSpeed. Und das skalierst du zwischen 0 und 200, nicht wie du behauptest bis 255.

Geb die Werte von potiVar und wischerSpeed doch mal über den seriellen Monitor aus, dann siehst du, was drin ist.

achso
20.08.2017, 17:12
Dankeschön!
Die 200 kommen, weil ich soviel versucht habe bevor ich postete.
Zwischendurch habe ich fieserweise die kleine Schaltung eingebaut. Zugeben muß ich, dass ich das 4K7 Poti in die Mitte zwischen 2 Widerstände in Reihe setzte.
Also von Gnd an einen Widerstand 6K8, dann das Poti 4K7, dann einen Widerstand 4K7 zu VSS. Dadurch habe ich am Poti kaum "Leerweg". Vorher musste man erstmal weit drehen bis die PWM anfing. Dafür hörte Sie auch nach 2/3 Potidrehung auf. Jetzt steht fast die ganze Drehung des Poti zur Verfügung.
Das Ganze habe ich wohl komplett falsch angefangen. Hätte wohl mit Schwellwerten besser ausgesehen.

Aber heute Abend werde ich mich nochmal mit dem Sketch befassen. Den Seriellen Monitor habe ich noch nicht benutzt. Steht aber im Buch drin wie man ihn aufruft.


analogWrite(wischerPin, potiVar);

wäre das Richtig?
statt

analogWrite(wischerPin, wischerSpeed);

Danke
Achim

Mxt
20.08.2017, 17:18
Ich würde eher in der if-Abfrage den skalierten Wert, also wischerSpeed, verwenden.

Ein analogWrite will ja nur Werte von 0 bis 255, da wären die Werte von potiVar ja zu groß.

achso
20.08.2017, 17:51
Danke,
beim nächsten Mal mache ich es besser.

Schönen Gruß aus Schleswig Holstein, wo es seid Wochen regnet.

Achim