Hallo,
ich arbeite gerade mit einen Servo ein emp Sensor und dem Multi Funktions Shield .
Ich versuche : das der servo sich höher dreht jee wärmer es wird und jee kälter soll er sich auch stuffenlos zurück drehen.
Im Display sollte Temparatur angezeigt werden .
Zur zeit zeigt es mir den dat wert ( temparatur an ) und der servo fährt auf null .
Aber ich bekomme es nicht hin das er mit der Temparatur arbeitet.
Was mache ich falsch ?
LG
#include <TimerOne.h>
#include <Wire.h>
#include <Servo.h> //Bibliothek ansteuern von mainServo
#define PinTemp A4 // sensor
#define latch 4
#define clk 7
#define data 8 // data 8 Setzen
const byte SEGMENT_MAP[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0X80, 0X90};
const byte SEGMENT_SELECT[] = {0xF1, 0xF2, 0xF4, 0xF8};
//decode_results results;
Servo mainServo; //mainServo Objekt erstellen (noch nicht initialisiert)
int position = 0;
int previousPosition;
int mainServoPosition = 0; // Start mainServo am start auf null fahren
int mainServoSchritte = 10; // schritte angeben für den mainServo
int mainServoGrad = 190; // grad angabe wie weit soll sich der mainServo drehen
void setup() {
Serial.begin(115200); // serial Monitor start
Timer1.initialize();
pinMode(PinTemp, INPUT); // input setzen
mainServo.attach(5); //digitalen PIN 5 für mainServo
mainServo.write(0); // servo auf null seten
mainServo.write(mainServoPosition);
pinMode(latch, OUTPUT); // Output pins vom mainServo
pinMode(clk, OUTPUT);
pinMode(data, OUTPUT);
}
void loop() {
//MFS.beep(1, 5, 2); // bereit
int val = analogRead(PinTemp); // Den analogen Wert des Temperatursensors lesen.
int dat = (1019 * val) >> 8 ; // Aus dem gelesenen Wert die Temperatur berechnen.
/* while (1) {
int wert = analogRead(PinTemp);
float mV = wert * 4935. / 1024.; // MFS liefert gemessene 4,935 V an +5V
float temp = mV / 10.; // OUTPUT = 0 mV + 10.0 mV/°C
*/
int position = map(dat, 28, 40, 0, 180);
Serial.println(position);
if (previousPosition != position) {
mainServo.write(position);
mainServo.write(mainServoPosition);
//mainServo.write(10); // servo test
WriteNumberToSegment(0 , dat / 1000);
WriteNumberToSegment(1 , (dat / 100) % 10);
WriteNumberToSegment(2 , (dat / 10) % 10);
WriteNumberToSegment(3 , dat % 10);
// delay(2000);
}
}
void WriteNumberToSegment(byte segment, byte value) {
digitalWrite(latch, LOW);
shiftOut(data, clk, MSBFIRST, SEGMENT_MAP[value]);
shiftOut(data, clk, MSBFIRST, SEGMENT_SELECT[segment] );
digitalWrite(latch, HIGH);
}
mein erster versuch sah so aus :
dort will der servo aber das Display zeigt mir keine werte an . Und wollte extra die Lib vom Shield nutzen komisch . deswegen über den alten weg versucht .
#include <TimerOne.h>
#include <Wire.h>
#include <Servo.h>
#include <MultiFuncShield.h> // API für das Multi Function Shield
#define PinTemp A4 // sensor
Servo mainServo;
int position = 0;
int previousPosition;
void setup() {
Serial.begin(115200); //serial konrolle
Timer1.initialize();
MFS.initialize(&Timer1); // initialize multi-function shield library
MFS.write("temp");
pinMode(PinTemp, INPUT); // input setzen
mainServo.attach(5);
}
void loop() {
//MFS.beep(1, 5, 2); // bereit
//while (1) {
int wert=analogRead(PinTemp);
float mV = wert * 4935. / 1024.; // MFS liefert gemessene 4,935 V an +5V
float temp = mV / 25.; // OUTPUT = 0 mV + 10.0 mV/°C
MFS.write(temp);
int position = map(temp, 28, 40, 0, 180);
Serial.println(position);
if(previousPosition != position){
mainServo.write(position);
delay(2000);
}
}