Hallo
ich bin gerade dabei mir eine Steuerung für eine Helmlampe fürs Biken zu entwickeln. Das Ganze kommt in ein kleines Aluminiumgehäuse auf dem Helm uns soll mit einem ATtiny85 realisiert werden. Programmieren werde ich mit einem Arduino UNO als ISP. Ich werde also auch in Arduino Programmieren.
Um alles erst einmal zu simulieren, benutze ich einen Arduino.
Die Steuerung soll folgendes machen:
-Temperatur des Gehäuses mit einem LM35 überwachen. Bei steigender Temperatur sinkt der LED-Strom.
-Taster zum Ein/Ausschalten und durchschalten der Modi
-Ansteuerung der KSQ(Konstanststromquelle) mit PWM
-Akkuspannungsüberwachung, sobald gewisse Spannungen unterschritten werden blinkt die LED oder geht aus.
Hier mal ein Bild der Schaltung:

Mein Problem ist, dass die Temperaturmessung nur funktioniert wenn ich die Spannungsmessung ausschalte.
Was mache ich falsch?
Die Eingänge beeinflussen sich wohl gegenseitig...
Und hier der Code:
int temp = 0;
int sensorValue =0;
const int buttonPin = A0;
const int ledPin = 3;
int buttonPresses = 1;
int buttonState; // the current reading from the input pin
int lastButtonState = LOW; // the previous reading from the input pin
int zeit = 0;
int schutzwert = 0;
int tempMax1 = 24; //Schalttemperatur
int tempMax2 = 26; //Schalttemperatur
int tempMax3 = 28; //Schalttemperatur
int leistungsFaktorTemp =10;
float leistungsFaktorVolt =1;
int i=0;
float v =0;
float voltage =0;
int voltagevar = 1;
int once = 0;
// the following variables are long's because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long lastDebounceTime = 0; // the last time the output pin was toggled
long debounceDelay = 30; // the debounce time; increase if the output flickers
long previousMillis = 0; // will store last time LED was updated
long interval = 5000;
void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}
void loop()
{
//####### Temp ################################################################
sensorValue = analogRead(A1);
temp = (sensorValue * 500) / 1024;
Serial.println(temp);
delay(1);
//####### Volt ################################################################
v = analogRead(A2);
voltage = v/102;
//####### Button ################################################################
int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
// whatever the reading is at, it's been there for longer
// than the debounce delay, so take it as the actual current state:
buttonState = reading;
}
if (reading > lastButtonState) {
buttonPresses++;
}
// save the reading. Next time through the loop,
// it'll be the lastButtonState:
lastButtonState = reading;
if(buttonPresses >= 4){
buttonPresses = 1;
}
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
//Serial.println(temp);
//Serial.println(sensorValue);
if(temp < tempMax1){
leistungsFaktorTemp=10;
}
if(temp >= tempMax1){
leistungsFaktorTemp=5;
}
if(temp >= tempMax2){
leistungsFaktorTemp=3;
}
if(temp >= tempMax3){
leistungsFaktorTemp=0;
}
if(voltage > 6.12)
{
voltagevar = 1;
}
if(voltage <= 6.12 && voltage > 4.9)
{
voltagevar = 2;
}
if(voltage <= 4.9)
{
voltagevar = 3;
}
switch (voltagevar)
{
case 1:
leistungsFaktorVolt = 1;
break;
case 2:
if(once==0){
analogWrite(ledPin, 255);
delay(300);
analogWrite(ledPin, 30);
delay(300);
analogWrite(ledPin, 255);
delay(300);
analogWrite(ledPin, 30);
delay(300);
analogWrite(ledPin, 255);
delay(300);
analogWrite(ledPin, 30);
delay(300);
analogWrite(ledPin, 255);
delay(300);
analogWrite(ledPin, 30);
delay(300);
leistungsFaktorVolt = 1;
once = 1;}
break;
case 3:
leistungsFaktorVolt = 0;
break;
}
}
//Serial.println(buttonPresses);
switch (buttonPresses)
{
case 0:
analogWrite(ledPin, 0);
break;
case 1:
analogWrite(ledPin, 3*leistungsFaktorTemp*leistungsFaktorVolt);
break;
case 2:
analogWrite(ledPin, 8*leistungsFaktorTemp*leistungsFaktorVolt);
break;
case 3:
analogWrite(ledPin, 25*leistungsFaktorTemp*leistungsFaktorVolt);
//Serial.println(25*leistungsFaktor);
break;
}
//Serial.println(voltage);
//Serial.println("\t");
//Serial.println(leistungsFaktorVolt);
//Serial.println(leistungsFaktorTemp);
//Serial.print(25*leistungsFaktorTemp*leistungsFaktorVolt);
//Serial.println("");
}