fancontroler aanpassen van 1 naar 8 sensers

algemene C code
Gebruikers-avatar
Berichten: 43
Geregistreerd: 28 Jul 2016, 14:37

Re: fancontroler aanpassen van 1 naar 8 sensers

Berichtdoor Spikey1973 » 25 Aug 2016, 17:52

nicoverduin schreef:Als je jouw code tussen de code tags (dus tussen vierkante haken) code2=cpp en /code2 zet krijg je die mooie listing.

Waarschijnlijk is die 32 de minimale waarde die je nodig hebt om uberhaupt de fan te laten draaien. Het is een PWM poort (analogWrite). Dus die kan tussen de 0 en 255 lopen. Maar daar had je zelf ook achter kunnen komen.


eh ja dat deel van de 0 - 255 dat snap ik (had ik ok gezegd toch?) alleen waar die 32 vandaan komt. heb nu gelezen dat dat een 12.5% duty cycle inhoud.
sorry als ik simpele dingen vraag. maar snap niet helemaal hoe dat aansturen van de fan snelheid werkt, aanpassing van voltage dacht ik initieel, maar zie dat het pwm/analog write is.. dus voor cpu fans met 4 draden.
wat curieus is, want t leuke youtube filmpje van de basic setup. wordt er gewoon een simpele 2 draden fan gebruikt. dus nu vraag ik me af, wordt de pmw software matig naar voltage omgezet?
ifso. ik weet dat je 3pin fans kan ombouwen tot pmw gecontroleerde fan. mijn vraag is dan ook, gaat t een verschil geve om de fan door via pmw of voltage te controleren?

anyway ik vond deze link dus ga eens goed doorlezen.
http://provideyourown.com/2011/analogwr ... o-voltage/

ik vraag dit want wil een andere fan gebruiken dus moet wel weten waar op te letten en wil die dit weekend in nl gaan halen. nzxt fz200 led white, maar als ik daar voor een of andere reden qua prog. niet goed aan doe dan niet natuurlijk.
Maar heb met veel specs rekening te houden en deze lijkt ideaal. het heeft een rpm van 700+/- 200 en 3 pins. so no pwm control verder weet ik er niet veel van. vind niet veel data. zou liefst minimale voltage willen weten. maar ik zoek nog wel verder. maar soit, 32 minimale waarde, maar daarna gewoon gaat het met een loop gewoon in stappen van 1 omhoog ??? heeft dat nut met pmw modulatie of een is een keuze van 8 of 16 beter?? vooral de opmerking van shooter meenemende.

shooter schreef:wil je het scrijven naar een analoge uitgang aub alleen doen als er iets verandert is, want de interne teller heeft er anders problemen mee.


sorry voor mn moeilijk doen he. maar ik ben gewoon aan t proberen de code zoals nu te begrijpen zodat ik het kan aanpassen naar hoe ik het ga willen met die leds. maar bij dat begrijpen ben ik nog niet helemaal. maar dat komt wel met (veel) tijd. maar dat is het leuke eraan.

voor shooter.: als ik de code zoals nu eenmaal begrijp ga ik hier zeker rekening mee houden. is er nu een plek waar er wel geschreven wordt naar de analoge uitgang als er niks veranderd. iets waar ik speciaal op moet letten (regelnr?)

iig bedankt voor de tip!

grtz matthieu
Laatst gewijzigd door Spikey1973 op 25 Aug 2016, 18:44, in totaal 1 keer gewijzigd.

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: fancontroler aanpassen van 1 naar 8 sensers

Berichtdoor nicoverduin » 25 Aug 2016, 18:42

PWM wordt aangestuurd door een breedte puls. Die werkt intern met een hardware timer. En als je elke keer dezelfde waarde naar die PWM schrijft, is de timer ff de kluts kwijt. Nu maakt dat voor die fan geen bal uit. Die wordt of 980 (16 bit timer) of 490 (8bit timer) x per seconde aangestuurd. De centrifugale kracht op die fan gaat dat niet eens merken.
PWM gaat uit van een 2 draads fan. Die kun je niet rechtstreeks aansturen waarschijnlijk. De pin van de Arduino kan max 40mA (en ik zou dat niet testen) aansturen. Heb je meer nodig dan gaat je dat een pin kosten. Dus zorg dat je de specificaties van je fan kent.
Die PWM waarde 32 zul je experimenteel moeten vaststellen. Maw hoe groot moet de minimale pwm zijn om die fan in beweging te krijgen.
Dus de rpm van de FAN vind ik minder relevant. Eerder de stroom afname. En als je het niet weet, tijd voor een klein spanningregelaartje maken? LM317, potmetertje en met een dvm kun je zowel spanning als stroom meten.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 43
Geregistreerd: 28 Jul 2016, 14:37

Re: fancontroler aanpassen van 1 naar 8 sensers

Berichtdoor Spikey1973 » 25 Aug 2016, 18:56

de fan loopt op een Fan Current van 0.23 A ( 0.42 A max.). wat reken kundig netjes liniear correleerd met 500-900 rpm (700 +/- 200)
qua pinnen denk ik genoeg te hebben aan aantal en gezien de max van 0.42A en je zegt t beter niet te testen lijkt me een extra pin te nemen hiervoor geen slecht plan.
echtde hoe en wat hiervan is dan een ander verhaal voor mij op dit moment.

maar pmw controle op 2 draden. ik geloof je helemaal hoor das niet de issue!!! maar wat ik denk te snappen van pwm modulatie lijkt me dat tegenstrijdig.
pwm gecontroleede fans gebruiken 4 drade. 2 twaalf solt.een sensingen een modulatie.
op 2 draden is een voltage regulatie, ik zie dit als een regeling van het minimale tot maximale voltage (zeg van 7 tot 12 volt).
hoe wordtdan de pulse width geimplementeerd?
of gaat de fan heel snel continue aan en uit gezet worden door de pmw. op 12 volt. ipv draaien op zeg 7 volt?

grtz matthieu

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: fancontroler aanpassen van 1 naar 8 sensers

Berichtdoor nicoverduin » 25 Aug 2016, 23:06

Je kan niet 10 pinnen aansluiten om de fan te besturen en zo 400mA krijgen. Zo werkt het niet.... Ik ga uit van een gewoon fan die zijn stroom via de PWM geregeld krijgt. Als je een 4 draads hebt die een PWM signaal toegevoegd krijgt zul je op zoek moeten naar een datasheet van dat ding om te zien welke spanning hij op de PWM ingang verwacht. Als dat ook 12V is zul je een transistor moeten gebruiken om van 5V naar 12V te schakelen.
Bij een directe aansturing (dus een 2 draads) heb je slechts een tor nodig (wel een stevige of een mosfet) om dat ding te sturen. En inderdaad door de snelle schakeling krijg je het effect van wat jij noemt spanningsregulatie (wat het overigens niet is). Je geeft alleen gedurende een fractie van een seconde (1/490) * duty cycle de volle energie en daarna is het weer uit.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 43
Geregistreerd: 28 Jul 2016, 14:37

Re: fancontroler aanpassen van 1 naar 8 sensers

Berichtdoor Spikey1973 » 26 Aug 2016, 03:15

hoi :) het is bedtijd hier maar wilde nog even m'n code posten en reageren.

na het posten van m'n laatste bericht begreep ik ook dat de voeding natuurlijk niet van de arduino komt en dus het pin gebeuren niet direct van toepassing is hier. te snel gerageerd.
ondertussen heb ik alles netjes het aangesloten. niet op het hele tor (geen idee wat dat is maar zoek ik op) / mosfet (zegt me wel iets maar.. even te moe) gebeuren want dat lees iknu net.
aandacht vol op de code gegooit en dan alles netjes aangesloten voor de proef opstelling.

code compileerd. maar twee foutes, blijkbaar had ik een accolade gemist en stond er nog een oude code regel in die ik over het hoofd had gezien.
vond dat meevallen vooreen beginneling als ik.

anyway. ik heb even de spanning er op gezet kon het iet laten)en leds branden en display verlichting ook, alleen geen info in het display, toch niet zichtbaar.
dus helemaal in orde is de code nog niet.

anyway. mn code staat hier onder, ga ik goed zo met regel 139,140 en speciaal 141? en met de rest natuurlijk.

ccp code
#include <FastLED.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

//source: <!-- m --><a class="postlink" href="http://www.electroschematics.com/9540/arduino-fan-speed-controlled-temperature/">http://www.electroschematics.com/9540/a ... mperature/</a><!-- m -->
//source: nicoverduin.

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // I2C Liquid Crystal
//
// pin definitions
//
const int tempPin1 = A6; // the output pin of LM35-1
const int tempPin2 = A7; // the output pin of LM35-2
const int tempPin3 = A8; // the output pin of LM35-3
const int tempPin4 = A9; // the output pin of LM35-4
const int tempPin5 = A10; // the output pin of LM35-5
const int tempPin6 = A11; // the output pin of LM35-6
const int tempPin7 = A12; // the output pin of LM35-7
const int tempPin8 = A13; // the output pin of LM35-8
const int fan = 11; // the pin where fan is
//
// program constants
//
const int tempMin = 30; // the temperature to start the fan
const int tempMax = 75; // the maximum temperature when fan is at 100%
const int UPDATE_LCD_SPEED = 500; // Update LCD every 500 ms
//
// global variables
//
uint8_t AnalogPinArray[8]= {tempPin1, tempPin2, tempPin3, tempPin4, tempPin5, tempPin6, tempPin7, tempPin8 };
uint8_t temp[8]; // array of temperatures per analog port
boolean BelowMin = false; // determines if any temperature is below tempMin
int tempHigh; // highest read temperature of all ports
int fanSpeed; // speed for the fan
int fanLCD; // percentage of fanspeed
int r; // intensiteit rode led
int g; // intensiteit rode led
int b; // intensiteit rode led
uint32_t timer; // timer used for scrolling LCD
//
// defined pins
//
#define NUM_LEDS 1 // Since the LEDs are being controlled with a P9813 module, there is only '1' LED
#define CLOCK_PIN 4
#define DATA_PIN 5 // Clock and data pins for LED data

CRGB leds[NUM_LEDS]; // Define LED object

// various program control variables
int cycleTime = 10;
int blinkTime = 1000;
byte mode = 1;
boolean RGBMode;
boolean on = false;

//
void setup() {
//
// setup output ports. Default is Input mode
//
pinMode(fan, OUTPUT);
//
// set output ports
//
analogWrite(fan, 0); // stop fan
//
// other initialization activities
//
delay(2000);

LEDS.addLeds<P9813, DATA_PIN, CLOCK_PIN>(leds, NUM_LEDS); // initialize LED control object
Serial.begin(115200); // Used to type in characters
lcd.begin(16, 2); // initialize LCD
lcd.clear(); // clear screen
timer = millis(); // start timer for LCD updates
}

// main loop
void loop() {
//
// local variables
//
char lcdMsg[17]; // use a temp char array for LCD displaying row
//
// execute loop
//
BelowMin = false; // assume all temperatures are above tempMin
//
// read all analog inputs
//
for (uint8_t i = 0; i < 8; i++) {
//
// get the temperature into our temp array
//
temp[i] = readTemp(i);
//
// check if any temperature is below tempMin
//
if (temp[i] < tempMin) {
BelowMin = true; // this is one
}
//
// get the highest temperature
//
if(i == 0) {
//
// this is the first temperature read so it is automatically the highest
//
tempHigh = temp[i];
}
else {
//
// all other temperatures are compared to the current tempHigh
//
if (temp[i] > tempHigh) {
//
// got one
//
tempHigh = temp[i];
}
}
}

//
// check if any temperature was below min
//
if (BelowMin) {
fanSpeed = 0; // stop fan
leds[0].setRGB(255, 255, 255);

} else {
//
// we are above temp min so determine the fan speed
//
fanSpeed = map(tempHigh, tempMin, tempMax, 122, 255); // the actual speed of fan
fanLCD = map(tempHigh, tempMin, tempMax, 0, 100); // speed of fan to display on LCD
//
// set color and intensity depending on temperature and equal to fanspeed
//
r = map(tempHigh, tempMin, tempMax, 122, 255); // the actualcolor of the red led
g = 122;
b = 377-r;
}
//
// update our fan speed
//
analogWrite(fan, fanSpeed); // spin the fan at the fanSpeed speed
//
// if we are exceeding the max permissable temperature
//
if (tempHigh > tempMax) { // if temp1 is higher than tempMax
leds[0] = CRGB::Red;
FastLED.show();
delay(blinkTime);
leds[0] = CRGB::Black;
FastLED.show();
delay(blinkTime);
}
//
// Do we have to update the LCD?
//
if (millis() - timer > UPDATE_LCD_SPEED) {
//
// update the LCD
//
sprintf(lcdMsg, "%2d,%2d,%2d,%2d:%3d", temp[0], temp[1], temp[2], temp[3], fanSpeed);
lcd.setCursor(0, 0);
lcd.print(lcdMsg);

sprintf(lcdMsg, "%2d,%2d,%2d,%2d:%3d%%", temp[4], temp[5], temp[6], temp[7], fanLCD);
lcd.setCursor(0, 1);
lcd.print(lcdMsg);
//
// start the timer for the next time
//
timer = millis();
}
}
/**
* @name readTemp
* @param portIndex index to AnalogPinArray referencing the correct analog port
* @returns Integer value with temperature in degrees Celcius (no decimals)
* This routine reads the indicated analog port and converts a read 16 bit number into
* a temperature in degrees Celcius.
*/
int readTemp(uint8_t portIndex) { // get the temperature and convert it to celsius
//
// read the requested analog port
//
uint16_t temp = analogRead(AnalogPinArray[portIndex]);
//
// convert and return its temperature in Celcius
//
return int((float)temp * 0.48828125);
}

Gebruikers-avatar
Berichten: 43
Geregistreerd: 28 Jul 2016, 14:37

Re: fancontroler aanpassen van 1 naar 8 sensers

Berichtdoor Spikey1973 » 26 Aug 2016, 06:09

oke.

toch nog niet naar bed,is lastig om iets te laten liggen als je verder kan.

display bleek de 4 en 5 omgewisseld. heb nu dus wel iets op het display maar op een regel enkel de volle blokjes en op de volgende niks.
weet niet wat boven is of onder dus dan lastig om te melden.

anyway het systeem lijkt te draaien. echter iets mis met het tellen.. want de fan draait opvolle toeren en de leds knipperen rood. dus het systeem denkt datalles ernstig heet is.
nu was het vandaag wel warm maar... zo heet nu ook weer niet.

10 min later.

blijkt dat de voeding naar de rail waar de lm35 opstaan los was gekomen. daarom dus rood en vol op draaien zals ik zei ant geen info. dus dat deel werkt.

nu met de voeding. leds uit, fan uit en display hetzelfde als boven beschreven.
geprobeerd er eentje op warmen met soldeerbout. maar had geen effect.

ok gekeken via de serial monitor. geen idee hoe daarmee om te gaan maar iig geen meldingen.

kom langzaamdichterbij.
maar nu echtrest voor morgen.

grtz matt

Gebruikers-avatar
Berichten: 43
Geregistreerd: 28 Jul 2016, 14:37

Re: fancontroler aanpassen van 1 naar 8 sensers

Berichtdoor Spikey1973 » 26 Aug 2016, 20:53

Hoi :) ik heb deze middag wat zitten inlezen in het hele serial monitor idee (toch handig als je wat moet de buggen.)
en krijg dat redelijk werkend, krijg de info die ik wil al niet altijd op de verwachte / gewilde plaats, maar dat heeft vast wat met het loop systeem en met de delays van doen.

anyway waar ik achter kom is het volgende:

1) temps lezen netjes in (al vertrouw ik de waardes niet helemaal, want de sensor die ik opwarmde kwam zelfs bij direct contact bij een soldeerbout op 350 graden maar net boven de 65.
iig niet boven de 70 (of 75 zoals ik hem nu had) maar das voor een later tijdstip.

2) de fanspeed blijft desondanks op 0 staan en vanaf 30 zou dat al moeten oplopen. zoals ik het zie is er iets mis met de if / else statement waardoor die nooit in de else terechtkomt of in de else iets misgaat. misschen metde map.
maar kan ookiets simpels zijn als eenmisplaatste accolade die ikover het hoofd zie.

gezien ik de temp niet boven de 65 kreeg heb ik de code opnieuw geupload met de tempHigh op 50, gewoon even de grenzen verlegd.

toen was het ineens niet meer zo super langzaam, dat tot dat de temphigh boven de 50 kwam toen werd het weer langzaam.
meer weer snel onder de 50 bij afkoelen. dus zal zoeken naar een delay ergens in het deel van tempHigh boven 50 maar wat niet in het else deel van de if else loop zit.
hoe dan ook geen verandering in de led kleur en de fan snelheid, mn gedachte bevestigend dat de else van de loop nooit bereikt of dat het daar ergens misgaat.

3) bovendien blijft de display niet functioneren zoals het moet.

nu heb ik met een I2C scanner gezocht naar het adres van de display en krijg dan alleen 0x27,
niet het ", 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE)" deel. gezien ik niet echt snap wat dat betekend.. ga ik daar even naar verder zoeken.

als iemand even mee wil kijken naar het geheel zou dat fijn zijn. ik heb t idee een beetje boven mn kunnen terecht te komen op t moment.
maar we proberen verder. wie weet.

keeping you all informed.

anyway hieronder de huidige code.

cpp code
#include <FastLED.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

//source: <!-- m --><a class="postlink" href="http://www.electroschematics.com/9540/arduino-fan-speed-controlled-temperature/">http://www.electroschematics.com/9540/a ... mperature/</a><!-- m -->

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // I2C Liquid Crystal
//
// pin definitions
//
const int tempPin1 = A6; // the output pin of LM35-1
const int tempPin2 = A7; // the output pin of LM35-2
const int tempPin3 = A8; // the output pin of LM35-3
const int tempPin4 = A9; // the output pin of LM35-4
const int tempPin5 = A10; // the output pin of LM35-5
const int tempPin6 = A11; // the output pin of LM35-6
const int tempPin7 = A12; // the output pin of LM35-7
const int tempPin8 = A13; // the output pin of LM35-8
const int fan = 11; // the pin where fan is
//
// program constants
//
const int tempMin = 30; // the temperature to start the fan
const int tempMax = 50; // the maximum temperature when fan is at 100%
const int UPDATE_LCD_SPEED = 500; // Update LCD every 500 ms
//
// global variables
//
uint8_t AnalogPinArray[8]= {tempPin1, tempPin2, tempPin3, tempPin4, tempPin5, tempPin6, tempPin7, tempPin8 };
uint8_t temp[8]; // array of temperatures per analog port
boolean BelowMin = false; // determines if any temperature is below tempMin
int tempHigh; // highest read temperature of all ports
int fanSpeed; // speed for the fan
int fanLCD; // percentage of fanspeed
int r; // intensiteit rode led
int g; // intensiteit rode led
int b; // intensiteit rode led
uint32_t timer; // timer used for scrolling LCD
//
// defined pins
//
#define NUM_LEDS 1 // Since the LEDs are being controlled with a P9813 module, there is only '1' LED
#define CLOCK_PIN 4
#define DATA_PIN 5 // Clock and data pins for LED data

CRGB leds[NUM_LEDS]; // Define LED object

// various program control variables
int cycleTime = 10;
int blinkTime = 1000;
byte mode = 1;
boolean RGBMode;
boolean on = false;

//
void setup() {
//
// setup output ports. Default is Input mode
//
pinMode(fan, OUTPUT);
//
// set output ports
//
analogWrite(fan, 0); // stop fan
//
// other initialization activities
//
delay(2000);

LEDS.addLeds<P9813, DATA_PIN, CLOCK_PIN>(leds, NUM_LEDS); // initialize LED control object
Serial.begin(115200); // Used to type in characters
Serial.println("--- Start Serial Monitor SEND_RCVE ---");
Serial.println();
lcd.begin(16, 2); // initialize LCD
lcd.clear(); // clear screen
timer = millis(); // start timer for LCD updates
}

// main loop
void loop() {
//
// local variables
//
char lcdMsg[17]; // use a temp char array for LCD displaying row
//
// execute loop
//
BelowMin = false; // assume all temperatures are above tempMin
//
// read all analog inputs
//
for (uint8_t i = 0; i < 8; i++) {
//
// get the temperature into our temp array
//
temp[i] = readTemp(i);
Serial.print("temp ");
Serial.print(i);
Serial.print(" : ");
Serial.println(temp[i]);
Serial.println();
//
// check if any temperature is below tempMin
//
if (temp[i] < tempMin) {
BelowMin = true; // this is one
Serial.println(BelowMin);
}
//
// get the highest temperature
//
if(i == 0) {
//
// this is the first temperature read so it is automatically the highest
//
tempHigh = temp[i];
Serial.print("tempHigh ");
Serial.print(" : ");
Serial.println(tempHigh);
Serial.println();
}
else {
//
// all other temperatures are compared to the current tempHigh
//
if (temp[i] > tempHigh) {
//
// got one
//
tempHigh = temp[i];
}
}
}

//
// check if any temperature was below min
//
if (BelowMin) {
fanSpeed = 0; // stop fan
leds[0].setRGB(255, 255, 255);
Serial.print("fanSpeed : ");
Serial.println(fanSpeed);

} else {
//
// we are above temp min so determine the fan speed
//
fanSpeed = map(tempHigh, tempMin, tempMax, 122, 255); // the actual speed of fan
fanLCD = map(tempHigh, tempMin, tempMax, 0, 100); // speed of fan to display on LCD
//
// set color and intensity depending on temperature and equal to fanspeed
//
r = map(tempHigh, tempMin, tempMax, 122, 255); // change the color of the red led linearly to the fanspeed
g = 122;
b = 377-r; // change the color of the blue led linverse to the red led
Serial.print("fanSpeed : ");
Serial.println(fanSpeed);
Serial.print("Red : ");
Serial.println(r);
Serial.print("Blue : ");
Serial.println(b);
Serial.print("Green : ");
Serial.println(g);
Serial.println();
}
//
// update our fan speed
//
analogWrite(fan, fanSpeed); // spin the fan at the fanSpeed speed
//
// if we are exceeding the max permissable temperature
//
if (tempHigh > tempMax) { // if temp1 is higher than tempMax
leds[0] = CRGB::Red;
FastLED.show();
delay(blinkTime);
leds[0] = CRGB::Black;
FastLED.show();
delay(blinkTime);
}
//
// Do we have to update the LCD?
//
if (millis() - timer > UPDATE_LCD_SPEED) {
//
// update the LCD
//
sprintf(lcdMsg, "%2d,%2d,%2d,%2d:%3d", temp[0], temp[1], temp[2], temp[3], fanSpeed);
lcd.setCursor(0, 0);
lcd.print(lcdMsg);

sprintf(lcdMsg, "%2d,%2d,%2d,%2d:%3d%%", temp[4], temp[5], temp[6], temp[7], fanLCD);
lcd.setCursor(0, 1);
lcd.print(lcdMsg);
//
// start the timer for the next time
//
timer = millis();
}
}
/**
* @name readTemp
* @param portIndex index to AnalogPinArray referencing the correct analog port
* @returns Integer value with temperature in degrees Celcius (no decimals)
* This routine reads the indicated analog port and converts a read 16 bit number into
* a temperature in degrees Celcius.
*/
int readTemp(uint8_t portIndex) { // get the temperature and convert it to celsius
//
// read the requested analog port
//
uint16_t temp = analogRead(AnalogPinArray[portIndex]);
//
// convert and return its temperature in Celcius
//
return int((float)temp * 0.48828125);
}

Gebruikers-avatar
Berichten: 43
Geregistreerd: 28 Jul 2016, 14:37

Re: fancontroler aanpassen van 1 naar 8 sensers

Berichtdoor Spikey1973 » 26 Aug 2016, 22:07

Hoi :) ik heb deze middag wat zitten inlezen in het hele serial monitor idee (toch handig als je wat moet de buggen.)
en krijg dat redelijk werkend, krijg de info die ik wil al niet altijd op de verwachte / gewilde plaats, maar dat heeft vast wat met het loop systeem en met de delays van doen.

anyway waar ik achter kom is het volgende:

1) temps lezen netjes in.

2) de fanspeed bleef desondanks op 0 staan en vanaf 30 zou dat al moeten oplopen.
zoals ik het zei was er iets mis met de if / else statement waardoor die nooit in de else terecht komt of dat er in de else iets misging.
bleek dat de BelowMin statement bij de if een "= true" miste dus dat is nu gefixed.
ook had ik fanSpeed = 255 niet onder het deel if tmepHigh > temp Max ook dus logisch dat de fanspeed daarom 0 bleef.
daarnaast stond ook het fanspeed update deel op de verkeerde plek. zodat er nooit info van stijging de fan bereikte, zou dat gebeuren.
maar das dau nu allemaal gefixed.

serialprint in een vloedstroom van info inder de tempMax, maar heeeeeel traag als boven de tempMax. dus wil de oorzaak van die delay nog zien te vinden.
nu in de praktijk wel handig om mee te werken, in functie moet die loop natuurlijk sneller lopen.

3) bovendien denk ik dat er iets misloopt in het hele map verhaal. want het deel waar de temp led en fanspeed rustig moeten oplopen doet het nog helemaal niet.
dus daar ga ik ook eens naar verder in verdiepen straks en natuurulijk met het display deel.

4) want display blijft de display niet functioneren zoals het moet.

nu heb ik met een I2C scanner gezocht naar het adres van de display en krijg dan alleen 0x27,
niet het ", 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE)" deel. gezien ik niet echt snap wat dat betekend.. ga ik daar even naar verder zoeken.

als iemand even mee wil kijken naar het geheel zou dat fijn zijn. ik heb t idee een beetje boven mn kunnen terecht te komen op t moment.
maar we proberen verder. wie weet.

keeping you all informed.

anyway hieronder de huidige code.

cpp code
#include <FastLED.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

//source: <!-- m --><a class="postlink" href="http://www.electroschematics.com/9540/arduino-fan-speed-controlled-temperature/">http://www.electroschematics.com/9540/a ... mperature/</a><!-- m -->

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // I2C Liquid Crystal
//
// pin definitions
//
const int tempPin1 = A6; // the output pin of LM35-1
const int tempPin2 = A7; // the output pin of LM35-2
const int tempPin3 = A8; // the output pin of LM35-3
const int tempPin4 = A9; // the output pin of LM35-4
const int tempPin5 = A10; // the output pin of LM35-5
const int tempPin6 = A11; // the output pin of LM35-6
const int tempPin7 = A12; // the output pin of LM35-7
const int tempPin8 = A13; // the output pin of LM35-8
const int fan = 11; // the pin where fan is
//
// program constants
//
const int tempMin = 30; // the temperature to start the fan
const int tempMax = 50; // the maximum temperature when fan is at 100%
const int UPDATE_LCD_SPEED = 500; // Update LCD every 500 ms
//
// global variables
//
uint8_t AnalogPinArray[8]= {tempPin1, tempPin2, tempPin3, tempPin4, tempPin5, tempPin6, tempPin7, tempPin8 };
uint8_t temp[8]; // array of temperatures per analog port
boolean BelowMin = false; // determines if any temperature is below tempMin
int tempHigh; // highest read temperature of all ports
int fanSpeed; // speed for the fan
int fanLCD; // percentage of fanspeed
int r; // intensiteit rode led
int g; // intensiteit rode led
int b; // intensiteit rode led
uint32_t timer; // timer used for scrolling LCD
//
// defined pins
//
#define NUM_LEDS 1 // Since the LEDs are being controlled with a P9813 module, there is only '1' LED
#define CLOCK_PIN 4
#define DATA_PIN 5 // Clock and data pins for LED data

CRGB leds[NUM_LEDS]; // Define LED object

// various program control variables
int cycleTime = 10;
int blinkTime = 1000;
byte mode = 1;
boolean RGBMode;
boolean on = false;

//
void setup() {
//
// setup output ports. Default is Input mode
//
pinMode(fan, OUTPUT);
//
// set output ports
//
analogWrite(fan, 0); // stop fan
//
// other initialization activities
//
delay(2000);

LEDS.addLeds<P9813, DATA_PIN, CLOCK_PIN>(leds, NUM_LEDS); // initialize LED control object
Serial.begin(115200); // Used to type in characters
Serial.println("--- Start Serial Monitor ---");
Serial.println();
lcd.begin(16, 2); // initialize LCD
lcd.clear(); // clear screen
timer = millis(); // start timer for LCD updates
}

// main loop
void loop() {
//
// local variables
//
char lcdMsg[17]; // use a temp char array for LCD displaying row
//
// execute loop
//
BelowMin = false; // assume all temperatures are above tempMin
//
// read all analog inputs
//
for (uint8_t i = 0; i < 8; i++) {
//
// get the temperature into our temp array
//
temp[i] = readTemp(i);
Serial.print("temp ");
Serial.print(i);
Serial.print(" : ");
Serial.println(temp[i]);
Serial.println();
//
// check if any temperature is below tempMin
//
if (temp[i] < tempMin) {
BelowMin = true; // this is one
}
//
// get the highest temperature
//
if(i == 0) {
//
// this is the first temperature read so it is automatically the highest
//
tempHigh = temp[i];
Serial.print("tempHigh ");
Serial.print(" : ");
Serial.println(tempHigh);
Serial.println();
}
else {
//
// all other temperatures are compared to the current tempHigh
//
if (temp[i] > tempHigh) {
//
// got one
//
tempHigh = temp[i];
}
}
}

//
// check if any temperature was below min
//
if (BelowMin = true) {
fanSpeed = 0; // stop fan
leds[0].setRGB(255, 255, 255);

} else {

//
// we are above temp min so determine the fan speed
//
fanSpeed = map(tempHigh, tempMin, tempMax, 122, 255); // the actual speed of fan
fanLCD = map(tempHigh, tempMin, tempMax, 0, 100); // speed of fan to display on LCD

//
// set color and intensity depending on temperature and equal to fanspeed
//
r = map(tempHigh, tempMin, tempMax, 122, 255); // change the color of the red led linearly to the fanspeed
g = 122;
b = 377-r; // change the color of the blue led linverse to the red led
Serial.print("fanSpeed : ");
Serial.println(fanSpeed);
Serial.print("Red : ");
Serial.println(r);
Serial.print("Blue : ");
Serial.println(b);
Serial.print("Green : ");
Serial.println(g);
Serial.println();
}

//
// if we are exceeding the max permissable temperature
//
if (tempHigh > tempMax) { // if temp1 is higher than tempMax
fanSpeed = 255;
leds[0] = CRGB::Red;
FastLED.show();
delay(blinkTime);
leds[0] = CRGB::Black;
FastLED.show();
delay(blinkTime);

//
// update our fan speed
//
analogWrite(fan, fanSpeed); // spin the fan at the fanSpeed speed
Serial.print("fanSpeed : ");
Serial.println(fanSpeed);
}

//
// Do we have to update the LCD?
//
if (millis() - timer > UPDATE_LCD_SPEED) {
//
// update the LCD
//
sprintf(lcdMsg, "%2d,%2d,%2d,%2d:%3d", temp[0], temp[1], temp[2], temp[3], fanSpeed);
lcd.setCursor(0, 0);
lcd.print(lcdMsg);

sprintf(lcdMsg, "%2d,%2d,%2d,%2d:%3d%%", temp[4], temp[5], temp[6], temp[7], fanLCD);
lcd.setCursor(0, 1);
lcd.print(lcdMsg);
//
// start the timer for the next time
//
timer = millis();
}
}
/**
* @name readTemp
* @param portIndex index to AnalogPinArray referencing the correct analog port
* @returns Integer value with temperature in degrees Celcius (no decimals)
* This routine reads the indicated analog port and converts a read 16 bit number into
* a temperature in degrees Celcius.
*/
int readTemp(uint8_t portIndex) { // get the temperature and convert it to celsius
//
// read the requested analog port
//
uint16_t temp = analogRead(AnalogPinArray[portIndex]);
//
// convert and return its temperature in Celcius
//
return int((float)temp * 0.48828125);
}
Laatst gewijzigd door Spikey1973 op 26 Aug 2016, 22:21, in totaal 1 keer gewijzigd.

Gebruikers-avatar
Berichten: 43
Geregistreerd: 28 Jul 2016, 14:37

Re: fancontroler aanpassen van 1 naar 8 sensers

Berichtdoor Spikey1973 » 26 Aug 2016, 22:09

graag vorige post negeren.. out of date!

Hoi :) ik heb deze middag wat zitten inlezen in het hele serial monitor idee (toch handig als je wat moet de buggen.)
en krijg dat redelijk werkend, krijg de info die ik wil al niet altijd op de verwachte / gewilde plaats, maar dat heeft vast wat met het loop systeem en met de delays van doen.

anyway waar ik achter kom is het volgende:

1) temps lezen netjes in (al vertrouw ik de waardes niet helemaal, want de sensor die ik opwarmde kwam zelfs bij direct contact bij een soldeerbout op 350 graden maar net boven de 65.
iig niet boven de 70 (of 75 zoals ik hem nu had) maar das voor een later tijdstip.

2) de fanspeed bleef desondanks op 0 staan en vanaf 30 zou dat al moeten oplopen. zoals ik het zag was er iets mis met de if / else statement waardoor die nooit in de else terecht komt of dat er in de else iets misging.
bleek dat de BelowMin statement bij de if een "= true" miste dus dat is nu gefixed.
ook had ik fanSpeed = 255 niet onder het deel if tmepHigh > temp Max ook dus logisch dat de fanspeed daarom 0 bleef.
daarnaast stond ook het fanspeed update deel op de verkeerde plek. zodat er nooit info van stijging de fan bereikte, zou dat gebeuren.

serialprint in een vloedstroom van info inder de tempMax, maar heeeeeel traag als boven de tempMax. dus wil de oorzaak van die delay nog zien te vinden.

3) bovendien denkik dat er iets misloopt in het helemap verhaal. dus daar gaik ook eens naar kijken straaks en natuurulijk met het display deel.

4) want display blijft de display niet functioneren zoals het moet.

nu heb ik met een I2C scanner gezocht naar het adres van de display en krijg dan alleen 0x27,
niet het ", 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE)" deel. gezien ik niet echt snap wat dat betekend.. ga ik daar even naar verder zoeken.

als iemand even mee wil kijken naar het geheel zou dat fijn zijn. ik heb t idee een beetje boven mn kunnen terecht te komen op t moment.
maar we proberen verder. wie weet.

keeping you all informed.

anyway hieronder de huidige code.

cpp code
#include <FastLED.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

//source: <!-- m --><a class="postlink" href="http://www.electroschematics.com/9540/arduino-fan-speed-controlled-temperature/">http://www.electroschematics.com/9540/a ... mperature/</a><!-- m -->

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // I2C Liquid Crystal
//
// pin definitions
//
const int tempPin1 = A6; // the output pin of LM35-1
const int tempPin2 = A7; // the output pin of LM35-2
const int tempPin3 = A8; // the output pin of LM35-3
const int tempPin4 = A9; // the output pin of LM35-4
const int tempPin5 = A10; // the output pin of LM35-5
const int tempPin6 = A11; // the output pin of LM35-6
const int tempPin7 = A12; // the output pin of LM35-7
const int tempPin8 = A13; // the output pin of LM35-8
const int fan = 11; // the pin where fan is
//
// program constants
//
const int tempMin = 30; // the temperature to start the fan
const int tempMax = 50; // the maximum temperature when fan is at 100%
const int UPDATE_LCD_SPEED = 500; // Update LCD every 500 ms
//
// global variables
//
uint8_t AnalogPinArray[8]= {tempPin1, tempPin2, tempPin3, tempPin4, tempPin5, tempPin6, tempPin7, tempPin8 };
uint8_t temp[8]; // array of temperatures per analog port
boolean BelowMin = false; // determines if any temperature is below tempMin
int tempHigh; // highest read temperature of all ports
int fanSpeed; // speed for the fan
int fanLCD; // percentage of fanspeed
int r; // intensiteit rode led
int g; // intensiteit rode led
int b; // intensiteit rode led
uint32_t timer; // timer used for scrolling LCD
//
// defined pins
//
#define NUM_LEDS 1 // Since the LEDs are being controlled with a P9813 module, there is only '1' LED
#define CLOCK_PIN 4
#define DATA_PIN 5 // Clock and data pins for LED data

CRGB leds[NUM_LEDS]; // Define LED object

// various program control variables
int cycleTime = 10;
int blinkTime = 1000;
byte mode = 1;
boolean RGBMode;
boolean on = false;

//
void setup() {
//
// setup output ports. Default is Input mode
//
pinMode(fan, OUTPUT);
//
// set output ports
//
analogWrite(fan, 0); // stop fan
//
// other initialization activities
//
delay(2000);

LEDS.addLeds<P9813, DATA_PIN, CLOCK_PIN>(leds, NUM_LEDS); // initialize LED control object
Serial.begin(115200); // Used to type in characters
Serial.println("--- Start Serial Monitor ---");
Serial.println();
lcd.begin(16, 2); // initialize LCD
lcd.clear(); // clear screen
timer = millis(); // start timer for LCD updates
}

// main loop
void loop() {
//
// local variables
//
char lcdMsg[17]; // use a temp char array for LCD displaying row
//
// execute loop
//
BelowMin = false; // assume all temperatures are above tempMin
//
// read all analog inputs
//
for (uint8_t i = 0; i < 8; i++) {
//
// get the temperature into our temp array
//
temp[i] = readTemp(i);
Serial.print("temp ");
Serial.print(i);
Serial.print(" : ");
Serial.println(temp[i]);
Serial.println();
//
// check if any temperature is below tempMin
//
if (temp[i] < tempMin) {
BelowMin = true; // this is one
}
//
// get the highest temperature
//
if(i == 0) {
//
// this is the first temperature read so it is automatically the highest
//
tempHigh = temp[i];
Serial.print("tempHigh ");
Serial.print(" : ");
Serial.println(tempHigh);
Serial.println();
}
else {
//
// all other temperatures are compared to the current tempHigh
//
if (temp[i] > tempHigh) {
//
// got one
//
tempHigh = temp[i];
}
}
}

//
// check if any temperature was below min
//
if (BelowMin = true) {
fanSpeed = 0; // stop fan
leds[0].setRGB(255, 255, 255);
Serial.print("fanSpeed : ");
Serial.println(fanSpeed);

} else {

//
// we are above temp min so determine the fan speed
//
fanSpeed = map(tempHigh, tempMin, tempMax, 122, 255); // the actual speed of fan
fanLCD = map(tempHigh, tempMin, tempMax, 0, 100); // speed of fan to display on LCD

//
// set color and intensity depending on temperature and equal to fanspeed
//
r = map(tempHigh, tempMin, tempMax, 122, 255); // change the color of the red led linearly to the fanspeed
g = 122;
b = 377-r; // change the color of the blue led linverse to the red led
Serial.print("fanSpeed : ");
Serial.println(fanSpeed);
Serial.print("Red : ");
Serial.println(r);
Serial.print("Blue : ");
Serial.println(b);
Serial.print("Green : ");
Serial.println(g);
Serial.println();
}

//
// if we are exceeding the max permissable temperature
//
if (tempHigh > tempMax) { // if temp1 is higher than tempMax
fanSpeed = 255;
leds[0] = CRGB::Red;
FastLED.show();
delay(blinkTime);
leds[0] = CRGB::Black;
FastLED.show();
delay(blinkTime);

//
// update our fan speed
//
analogWrite(fan, fanSpeed); // spin the fan at the fanSpeed speed
}

//
// Do we have to update the LCD?
//
if (millis() - timer > UPDATE_LCD_SPEED) {
//
// update the LCD
//
sprintf(lcdMsg, "%2d,%2d,%2d,%2d:%3d", temp[0], temp[1], temp[2], temp[3], fanSpeed);
lcd.setCursor(0, 0);
lcd.print(lcdMsg);

sprintf(lcdMsg, "%2d,%2d,%2d,%2d:%3d%%", temp[4], temp[5], temp[6], temp[7], fanLCD);
lcd.setCursor(0, 1);
lcd.print(lcdMsg);
//
// start the timer for the next time
//
timer = millis();
}
}
/**
* @name readTemp
* @param portIndex index to AnalogPinArray referencing the correct analog port
* @returns Integer value with temperature in degrees Celcius (no decimals)
* This routine reads the indicated analog port and converts a read 16 bit number into
* a temperature in degrees Celcius.
*/
int readTemp(uint8_t portIndex) { // get the temperature and convert it to celsius
//
// read the requested analog port
//
uint16_t temp = analogRead(AnalogPinArray[portIndex]);
//
// convert and return its temperature in Celcius
//
return int((float)temp * 0.48828125);
}

Gebruikers-avatar
Berichten: 43
Geregistreerd: 28 Jul 2016, 14:37

Re: fancontroler aanpassen van 1 naar 8 sensers

Berichtdoor Spikey1973 » 27 Aug 2016, 01:02

nieuwe update:

heb deze avond zitten zoeken naar een oplossing voor het niet functioneren van het display (niet kapot!), maar niets gevonden dat het mis kan laten gaan.
staan wel twee extra%% aan het einde van in regel 2 maar dat ziet er niet uit als de boosdoener maar meer het % teken zelf dat geprint moet worden.
de serial printjes die ik ertussen had gebouwd werken. zowel eronder als erboven dus er gaat echt iets mis met de sprintf zelf.

daarbij heb ik gemerkt dat de sensors zeer wispelturig zin qua hun metingen. Daarom heb geopteerd om ipv de timer te gebruiken een for loopje te bouwen en elke sensor 50x te laten meten (arbitrair getal, als te veel of te weinig is dat zo aangepast) en het te middelen waarna het display op te frissen met dit gemiddelde ipv de laatste meting.
heb ik het middelen goed gedaan zo met de floats en inters zo??.

iig is er een compliatie error nu in regel 221, denk dat ik een return "vergeten" ben, maar ik weet niet waarom wat te returnenen want deze info is alleen lokaal nodig.

nu ga ik even kijken naar de map's..misschien vind k daar wat het probleem is.

ik post maar weer mn code in het geheel.

cpp code
#include <FastLED.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

//source: <!-- m --><a class="postlink" href="http://www.electroschematics.com/9540/arduino-fan-speed-controlled-temperature/">http://www.electroschematics.com/9540/a ... mperature/</a><!-- m -->

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // I2C Liquid Crystal

// pin definitions
const int tempPin1 = A6; // the output pin of LM35-1
const int tempPin2 = A7; // the output pin of LM35-2
const int tempPin3 = A8; // the output pin of LM35-3
const int tempPin4 = A9; // the output pin of LM35-4
const int tempPin5 = A10; // the output pin of LM35-5
const int tempPin6 = A11; // the output pin of LM35-6
const int tempPin7 = A12; // the output pin of LM35-7
const int tempPin8 = A13; // the output pin of LM35-8
const int fan = 11; // the pin where fan is

// defined pins
#define NUM_LEDS 1 // Since the LEDs are being controlled with a P9813 module, there is only '1' LED
#define CLOCK_PIN 4
#define DATA_PIN 5 // Clock and data pins for LED data

// program constants
const int tempMin = 30; // the temperature to start the fan
const int tempMax = 50; // the maximum temperature when fan is at 100%
const int UPDATE_LCD_SPEED = 500; // Update LCD every 500 ms

// global variables
uint8_t AnalogPinArray[8]= {tempPin1, tempPin2, tempPin3, tempPin4, tempPin5, tempPin6, tempPin7, tempPin8 };
uint8_t temp[8]; // array of temperatures per analog port
uint8_t sensor[8]; // array of temp of spec sensor or calculations
boolean BelowMin = false; // determines if any temperature is below tempMin
int tempHigh; // highest read temperature of all ports
int fanSpeed; // speed for the fan
int fanLCD; // percentage of fanspeed
int r; // intensiteit rode led
int g; // intensiteit rode led
int b; // intensiteit rode led


// uint32_t timer; // timer used for scrolling LCD

CRGB leds[NUM_LEDS]; // Define LED object

// various program control variables
int cycleTime = 10;
int blinkTime = 1000;
byte mode = 1;
boolean RGBMode;
boolean on = false;

//
void setup() {
//
// setup output ports. Default is Input mode
//
pinMode(fan, OUTPUT);
//
// set output ports
//
analogWrite(fan, 0); // stop fan
//
// other initialization activities
//
delay(2000);

LEDS.addLeds<P9813, DATA_PIN, CLOCK_PIN>(leds, NUM_LEDS); // initialize LED control object
Serial.begin(115200); // Used to type in characters
Serial.println("--- Start Serial Monitor ---");
Serial.println();
lcd.begin(16, 2); // initialize LCD
lcd.clear(); // clear screen
// timer = millis(); // start timer for LCD updates
}

// main loop
void loop() {
//
// local variables
//
char lcdMsg[17]; // use a temp char array for LCD displaying row
//
// execute loop
//
BelowMin = false; // assume all temperatures are above tempMin
//
// read all analog inputs
//
for (uint8_t i = 0; i < 8; i++) {
//
// get the temperature into our temp array
//
temp[i] = readTemp(i);
Serial.print("temp ");
Serial.print(i);
Serial.print(" : ");
Serial.println(temp[i]);
Serial.println();
//
// check if any temperature is below tempMin
//
if (temp[i] < tempMin) {
BelowMin = true; // this is one
}
//
// get the highest temperature
//
if(i == 0) {
//
// this is the first temperature read so it is automatically the highest
//
tempHigh = temp[i];
Serial.print("tempHigh ");
Serial.print(" : ");
Serial.println(tempHigh);
Serial.println();
}
else {
//
// all other temperatures are compared to the current tempHigh
//
if (temp[i] > tempHigh) {
//
// got one
//
tempHigh = temp[i];
}
}
}

//
// check if any temperature was below min
//
if (BelowMin = true) {
fanSpeed = 0; // stop fan
leds[0].setRGB(255, 255, 255);


} else {

//
// we are above temp min so determine the fan speed
//
fanSpeed = map(tempHigh, tempMin, tempMax, 122, 255); // the actual speed of fan
fanLCD = map(tempHigh, tempMin, tempMax, 0, 100); // speed of fan to display on LCD

//
// set color and intensity depending on temperature and equal to fanspeed
//
r = map(tempHigh, tempMin, tempMax, 122, 255); // change the color of the red led linearly to the fanspeed
g = 122;
b = 377-r; // change the color of the blue led linverse to the red led
Serial.print("fanSpeed : ");
Serial.println(fanSpeed);
Serial.print("Red : ");
Serial.println(r);
Serial.print("Blue : ");
Serial.println(b);
Serial.print("Green : ");
Serial.println(g);
Serial.println();
}

//
// if we are exceeding the max permissable temperature
//
if (tempHigh > tempMax) { // if temp1 is higher than tempMax
fanSpeed = 255;
leds[0] = CRGB::Red;
FastLED.show();
delay(blinkTime);
leds[0] = CRGB::Black;
FastLED.show();
delay(blinkTime);

//
// update our fan speed
//
analogWrite(fan, fanSpeed); // spin the fan at the fanSpeed speed
Serial.print("fanSpeed : ");
Serial.println(fanSpeed);
}

//
// Do we have to update the LCD?
//
// if (millis() - timer > UPDATE_LCD_SPEED) { // oude timer
//
// calculate the average of last 50 measurements
//
for (uint8_t j = 0; j < 7; j++) { // sensor waarde op 0 stellen voor berekening
sensor[j] = 0;
}
for (uint8_t i = 0; i < 49; i++) { // 50 metingen doen
for (uint8_t j = 0; j < 7; j++) { // voor elk van de 8 sensoren
sensor[j] += temp[j];
}
if (i = 49) { // na 50x sommatie
for (uint8_t j = 0; j < 7; j++) {
sensor[j] = int ((float)sensor[j] / i); // bereken gemiddelde
}
}
}
// update the LCD
Serial.println("kijken of dit geprint word...........");
//
sprintf(lcdMsg, "%2d,%2d,%2d,%2d:%3d%r", sensor[0], sensor[1], sensor[2], sensor[3], fanSpeed);
lcd.setCursor(0, 0);
lcd.print(lcdMsg);

sprintf(lcdMsg, "%2d,%2d,%2d,%2d:%3d%%", sensor[4], sensor[5], sensor[6], sensor[7], fanLCD);
lcd.setCursor(0, 1);
lcd.print(lcdMsg);
//
// start the timer for the next time
//
// timer = millis();
//
}
}
/**
* @name readTemp
* @param portIndex index to AnalogPinArray referencing the correct analog port
* @returns Integer value with temperature in degrees Celcius (no decimals)
* This routine reads the indicated analog port and converts a read 16 bit number into
* a temperature in degrees Celcius.
*/
int readTemp(uint8_t portIndex) { // get the temperature and convert it to celsius
//
// read the requested analog port
//
uint16_t temp = analogRead(AnalogPinArray[portIndex]);
//
// convert and return its temperature in Celcius
//
return int((float)temp * 0.48828125);
}

VorigeVolgende

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 12 gasten