forum logo image
caferacer-forum.de - Das Forum für Petrolheads, Garagenschrauber, Ölfinger, Frickelracer und Alteisentreiber

Elektronik Bastelei mit Arduino (Selbstbau Tacho, DZM etc)

Technische Fragen und Antworten, Tipps und Tricks für Profis und Bastler
Benutzeravatar
artur
Beiträge: 297
Registriert: 13. Mär 2013
Motorrad:: Moto Guzzi LM II
Wohnort: Nürnberg

Re: Elektronik Bastelei mit Arduino (Selbstbau Tacho, DZM et

Beitrag von artur »

Euer Programm sieht mir ziemlich zusammengebaut aus.
z.B.:
currentMode = getBlinkmode(currentResistance);

getBlinkmode() bekommt hier dem Argument nach einen Widerstandswert. In der Funktion selbst wird aber anscheinend ein Temperaturwert erwartet:

Code: Alles auswählen

int getBlinkmode(int temp) {
 							if (temp <= 60) {
 															return BLUE;
 							} else if (temp >= 140) {
 															return RED_BLINK;
 							} else if (temp >= 120) {
 															return RED;
 							} else {
 															return GREEN;
 					}
}
Es wird schon was machen, aber nicht GENAU das was Ihr gewollt habt.


letztendlich muss man sich darauf verlassen, dass das hier bei Euch funktioniert:

Code: Alles auswählen

void setLED(int led, int r, int g, int b) {
 							analogWrite(led, r);
 							analogWrite(led + 1, g);
 							analogWrite(led + 2, b);
}
analogWrite(), Sind das Bibliotheksfunktionen?
Alles richtig angeschlossen?

Benutzeravatar
GalosGarage
Beiträge: 6161
Registriert: 22. Aug 2013
Motorrad:: Ducati ST2 Umbau ( 9.5 )
Cagiva Alazzurra (Caffè Corretto) im Aufbau
digitaler Umbau Ducati 750ss (emozione) später mal
Cagiva-Duc-BMW Mix (Quattro Stagioni) im Aufbau
Wohnort: 41564 Kaarst

Re: Elektronik Bastelei mit Arduino (Selbstbau Tacho, DZM et

Beitrag von GalosGarage »

sorry das ich so abgebrochen habe, musste unerwartet mit dem hund zum tierarzt....
hatte plötzlich rücken mit leichter lähmung... :roll:

aus den temp werten, hab ich erst mal widerstandswerte gemacht.

int getBlinkmode(int temp) {
if (temp <= 39) {
return RED_BLINK;
} else if (temp >= 550) {
return BLUE;
} else if (temp <=77 ) {
return RED;
} else if (temp <=227) {
return OUT;
} else if (temp <=550) {
return GREEN;

wenn ich hier:

return 0 ;

entsprechende widerstandswerte eingebe, schaltet die rgb diode auch auf die zugewiesene farbe.

return 330 ; wäre dann grün, also im temp bereich 60 bis 80°

naja, solche programmstrukturen kommen raus, wenn man sich halt nicht auskennt u im lernstadium ist.

weiter bin ich aber nicht gekommen. ich weiss auch gerade nicht, wie ich den ausgelesenen wert in die ausgabe bekomme... :dontknow:

was ist aber, wenn ich die "digitalen" werte vorgebe anstelle der ohm werte und auf die berechnung über den R1 und R2 und der formel 5/1023 * raw verzichte?

ich stoße gerade an meine grenzen. :banghead:

evtl. sollte ich auch mal das arduino forum befragen.


mich würde auch mal interessieren, wie weit die anderen "quereinsteiger" sind.
Projekte:

9.5
Quattro Stagioni (abgebrochen)
Caffè Corretto
Emozione
Ducati 750SSie (noch keine Idee)
Cagiva SST 250 (noch keine Idee)

Benutzeravatar
artur
Beiträge: 297
Registriert: 13. Mär 2013
Motorrad:: Moto Guzzi LM II
Wohnort: Nürnberg

Re: Elektronik Bastelei mit Arduino (Selbstbau Tacho, DZM et

Beitrag von artur »

Na das wird schon langsam was.
So bekommst Du Deine LEDs in Abhängigkeit vom Pegel an PIN2 gesteuert:

Code: Alles auswählen

  int measureResistance() {
   if (millis() - lastUpdate > updateTime) {
     int raw = analogRead(analogPin);    // Reads the Input PIN
   }
   
   return raw ; 
  }
also return raw ; und es sollte sich was ändern.

Du könntest natürlich die "didgitalen" Werte direkt in der int getBlinkmode() verarbeiten.
Die Umrechnung Widerstand -->Digit müsstest Du vorher auf Papier oder Excel gemacht haben. Die Widerstandswerte sind ja nur furs menschliche Auge - der Maschine ist es völlig wurscht ob Du es umrechnest oder nicht. Eine Frage der Lesbarkeit des Programms.
Den Serial.print-Kram kannst auskommentieren - der ist wohl für irgendein Terminal gedacht gewesen.

Gruß
Artur

Benutzeravatar
artur
Beiträge: 297
Registriert: 13. Mär 2013
Motorrad:: Moto Guzzi LM II
Wohnort: Nürnberg

Re: Elektronik Bastelei mit Arduino (Selbstbau Tacho, DZM et

Beitrag von artur »

GalosGarage hat geschrieben:
int getBlinkmode(int temp) {
.
.
.
} else if (temp <=227) {
return OUT;
} else if (temp <=550) {
return GREEN;
.
.
.
}
Hier hast Du was durcheinanderbekommen...

Benutzeravatar
GalosGarage
Beiträge: 6161
Registriert: 22. Aug 2013
Motorrad:: Ducati ST2 Umbau ( 9.5 )
Cagiva Alazzurra (Caffè Corretto) im Aufbau
digitaler Umbau Ducati 750ss (emozione) später mal
Cagiva-Duc-BMW Mix (Quattro Stagioni) im Aufbau
Wohnort: 41564 Kaarst

Re: Elektronik Bastelei mit Arduino (Selbstbau Tacho, DZM et

Beitrag von GalosGarage »

int getBlinkmode(int temp) {
.
.
.
} else if (temp <=227) {
return OUT;
} else if (temp <=550) {
return GREEN;
.
.
.
was soll da durcheinander sein? :dontknow:

der andere teil sieht nun so aus:

int measureResistance() {
if (millis() - lastUpdate > updateTime) {

int raw = 0;
int Vin = 5;
float Vout = 0;
float R1 = 10;
float R2 = 0;
float buffer = 0;

int raw = analogRead(analogPin); // Reads the Input PIN
Vout = (5.0 / 1023.0) * raw; // Calculates the Voltage on th Input PIN
buffer = (Vin / Vout) - 1;
R2 = R1 / buffer;
//Serial.print("Voltage: "); //
//Serial.println(Vout); // Outputs the information
//Serial.print("R2: "); //
//Serial.println(R2); //
//lastUpdate = millis();
}

return raw ;

}

macht aber fehlermeldung:

RGB_Thermo_RG_test.ino: In function 'int measureResistance()':
RGB_Thermo_RG_test:63: error: redeclaration of 'int raw'
RGB_Thermo_RG_test:56: error: 'int raw' previously declared here
RGB_Thermo_RG_test:74: error: 'raw' was not declared in this scope
Projekte:

9.5
Quattro Stagioni (abgebrochen)
Caffè Corretto
Emozione
Ducati 750SSie (noch keine Idee)
Cagiva SST 250 (noch keine Idee)

Benutzeravatar
artur
Beiträge: 297
Registriert: 13. Mär 2013
Motorrad:: Moto Guzzi LM II
Wohnort: Nürnberg

Re: Elektronik Bastelei mit Arduino (Selbstbau Tacho, DZM et

Beitrag von artur »

Das sind diese Zeilen, die die Fehlermeldung erzeugen:
int raw = 0;
.
.
.
int raw = analogRead(analogPin); // Reads the Input PIN

Du hast raw zwei Mal im gleichen Block angelegt.
Haus rein wie in meinem Post um 8:18, dann gehts.


Im ursprünglichen Programm hast das verwendet;

Code: Alles auswählen

  int getBlinkmode(int temp) {
  if (temp <= 39) {
    return RED_BLINK;
  } else if (temp <= 77 >= 39){
    return RED;
  } else if (temp >= 550) {
    return BLUE;
  } else if (temp <= 550 >= 227) {
    return GREEN;  
  } else {
    return OUT;
  }
und nun ist OUT vor GREEN, und es gibt keinen else-Zweig.

Was soll OUT sein?
Vielleicht ist OFF gemeint?

Benutzeravatar
GalosGarage
Beiträge: 6161
Registriert: 22. Aug 2013
Motorrad:: Ducati ST2 Umbau ( 9.5 )
Cagiva Alazzurra (Caffè Corretto) im Aufbau
digitaler Umbau Ducati 750ss (emozione) später mal
Cagiva-Duc-BMW Mix (Quattro Stagioni) im Aufbau
Wohnort: 41564 Kaarst

Re: Elektronik Bastelei mit Arduino (Selbstbau Tacho, DZM et

Beitrag von GalosGarage »

soooo.
gemacht wie geschrieben. aber wieder fehlermeldung.
ihm fehlt wohl noch die definition für "raw"

Bild

ich verzweifel noch da dran.... :banghead:
Projekte:

9.5
Quattro Stagioni (abgebrochen)
Caffè Corretto
Emozione
Ducati 750SSie (noch keine Idee)
Cagiva SST 250 (noch keine Idee)

Benutzeravatar
artur
Beiträge: 297
Registriert: 13. Mär 2013
Motorrad:: Moto Guzzi LM II
Wohnort: Nürnberg

Re: Elektronik Bastelei mit Arduino (Selbstbau Tacho, DZM et

Beitrag von artur »

Ah, ok. Sorry könnte an mir liegen))
Probiers so:

Code: Alles auswählen

  int measureResistance() {
   int raw = 0;
   if (millis() - lastUpdate > updateTime) 
     raw = analogRead(analogPin);    // Reads the Input PIN
   
   return raw ; 
  }
currentResistance = res != 0 ? res : currentResistance;
Durch diese Anweisung wird abgefangen, falls updateTime nicht erfüllt und damit return = 0 sein sollte.
Passt.

Benutzeravatar
GalosGarage
Beiträge: 6161
Registriert: 22. Aug 2013
Motorrad:: Ducati ST2 Umbau ( 9.5 )
Cagiva Alazzurra (Caffè Corretto) im Aufbau
digitaler Umbau Ducati 750ss (emozione) später mal
Cagiva-Duc-BMW Mix (Quattro Stagioni) im Aufbau
Wohnort: 41564 Kaarst

Re: Elektronik Bastelei mit Arduino (Selbstbau Tacho, DZM et

Beitrag von GalosGarage »

suuuuper :respekt: :beten:

kein fehler beim kompilieren. :prost: 6-pack verdient... :mrgreen:

0 u 5volt zeigt auch die richtigen farben an wenn ich auf A2 gehe.

ich hab nun anstelle der widerstandswerte, die digitaliesierten werte genommen.
5volt = blau
0volt = rot blinkend, wobei bei mir das rote blinken nur ein hochfrequentes flimmern ist..... :oops:

als nächstes muss ich nun den richtigen spannungsteiler bauen.

edit: werte erhöht in der bliksequenz, dann gehts. waren viel zu klein.
Projekte:

9.5
Quattro Stagioni (abgebrochen)
Caffè Corretto
Emozione
Ducati 750SSie (noch keine Idee)
Cagiva SST 250 (noch keine Idee)

Benutzeravatar
artur
Beiträge: 297
Registriert: 13. Mär 2013
Motorrad:: Moto Guzzi LM II
Wohnort: Nürnberg

Re: Elektronik Bastelei mit Arduino (Selbstbau Tacho, DZM et

Beitrag von artur »

Freut mich)
Ausm gröbsten raus...

Tip:
könntest Deinen Temperatursensor in kochendem Wasser auf 100° "eichen".
Stellst im Programm in etwa einen digitalen Wert ein, der bei ca. 90° eine LED schalten soll. Kocht das Wasser und die LED wird geschaltet, verringerst den Wert iterativ etwas bis Wasser kocht und LED nicht mehr geschaltet wird.
...Oder verwendest diesen Serial.print...wohin auch immer das geschickt wird.

Genauso könntest auf 37° eichen. Wie das geht verrät Dir Deine Fantasie oder Dein Hausarzt alter Schule :grinsen1:

Antworten

Zurück zu „Elektrik/Beleuchtung“

Kickstarter Classics