Lieber Besucher, herzlich willkommen bei: We-Mod-It | Das Forum von Moddern für Modder. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
int temp1 = 30; int speed1 = 20; int temp2 = 40; int speed2 = 40; int temp3 = 50; int speed3 = 60; int temp4 = 60; int speed4 = 80; int speedMax = 100; int AI_TMP36 = 0; //THIS IS P5, P5 is Analog Input 0, so when you are using analog read you refer to it as 0 int time= 20; int temp[10]; int temperature = 0; int AI_potentiometer = 3; int manualAdjust = 0; int AO_clkAmplifier = 4; int clkOutputPercent = 0; int clkOutputValue = 0; int DO_greenLed = 0; int DO_yellowLed = 1; int DO_redLed = 2; void setup() { pinMode(AO_clkAmplifier, OUTPUT); pinMode(DO_greenLed, OUTPUT); pinMode(DO_yellowLed, OUTPUT); pinMode(DO_redLed, OUTPUT); pinMode(AI_potentiometer, INPUT); pinMode(AI_TMP36, INPUT); } void loop() { //get average Temperature in Celsius { for (int i = 0; i < 10; i++) { temp[i] = map(analogRead(AI_TMP36), 0, 410, -50, 150); delay(time); } temperature=(temp[0]+temp[1]+temp[2]+temp[3]+temp[4]+temp[5]+temp[6]+temp[7]+temp[8]+temp[9])/10; } //get manual adjust in Percent { manualAdjust = map(analogRead(AI_potentiometer), 0, 1023, 0, 100); } //calculate clk output in percent, add manualAdjust and then convert in analog output range { if (temperature <= temp1) // Minimal speed { clkOutputPercent = speed1; } if (temperature > temp1 and temperature <= temp2) // Speed2 { int m1 = (speed2 - speed1) / (temp2 - temp1); // calculate linear function int b1 = speed2 - m1 * temp2; int fx1 = m1 * temperature + b1; clkOutputPercent = fx1; } if (temperature > temp2 and temperature <= temp3) // Speed3 { int m2 = (speed3 - speed2) / (temp3 - temp2); // calculate linear function int b2 = speed3 - m2 * temp3; int fx2 = m2 * temperature + b2; clkOutputPercent = fx2; } if (temperature > temp3 and temperature <= temp4) // Speed4 { int m3 = (speed4 - speed3) / (temp4 - temp3); // calculate linear function int b3 = speed4 - m3 * temp4; int fx3 = m3 * temperature + b3; clkOutputPercent = fx3; } if (temperature > temp4) // set maximal speed when temperature > temp4 { clkOutputPercent = speedMax; } clkOutputPercent = clkOutputPercent + manualAdjust; // add manualAdjust to rise the speed manually if (clkOutputPercent > 100) // maximal 100% limiter { clkOutputPercent = 100; } clkOutputValue = (255 / 100 * clkOutputPercent); //convert from Percent to Analog output range analogWrite(AO_clkAmplifier, clkOutputValue); } // set Temperature Leds { if (temperature <= temp1) { digitalWrite(DO_greenLed, HIGH); digitalWrite(DO_yellowLed, LOW); digitalWrite(DO_redLed, LOW); } if (temperature > temp1 and temperature <= temp2) { digitalWrite(DO_greenLed, HIGH); digitalWrite(DO_yellowLed, HIGH); digitalWrite(DO_redLed, LOW); } if (temperature > temp2 and temperature <= temp3) { digitalWrite(DO_greenLed, LOW); digitalWrite(DO_yellowLed, HIGH); digitalWrite(DO_redLed, LOW); } if (temperature > temp3 and temperature <= temp4) { digitalWrite(DO_greenLed, LOW); digitalWrite(DO_yellowLed, HIGH); digitalWrite(DO_redLed, HIGH); } if (temperature > temp4) { digitalWrite(DO_greenLed, LOW); digitalWrite(DO_yellowLed, LOW); digitalWrite(DO_redLed, HIGH); } } } |
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Naozumi« (27. Oktober 2016, 12:22)
Benutzerinformationen überspringen
1. Platz Enermax Casecon Contest
Registrierungsdatum: 12. März 2012
Wohnort: München
Beruf: Maschinenbautechniker
Quellcode |
|
1 |
if (temperature > temp1 and temperature <= temp2) |
Quellcode |
|
1 |
if (temperature > temp1 && temperature <= temp2) |
Benutzer, die sich für diesen Beitrag bedankt haben:
Naozumi (28.10.2016)
Benutzerinformationen überspringen
1. Platz Enermax Casecon Contest
Registrierungsdatum: 12. März 2012
Wohnort: München
Beruf: Maschinenbautechniker
Zitat
//Variables for Fancurve calculation
{
int temp1 = 30;
int speed1 = 20;
int temp2 = 40;
int speed2 = 40;
int temp3 = 50;
int speed3 = 60;
int temp4 = 60;
int speed4 = 80;
int speedMax = 100;
}
//Constantes
{
int AI_TMP36 = 0; //THIS IS P5, P5 is Analog Input 0, so when you are using analog read you refer to it as 0
int DO_greenLed = 0;
int DO_yellowLed = 1;
int DO_redLed = 2;
int AI_potentiometer = 3;
int AO_clkAmplifier = 4;
}
//Aplication Variables
{
int temp[10];
int time= 20;
int temperature = 0;
int manualAdjust = 0;
int clkOutputPercent = 0;
int clkOutputValue = 0;
}
void setup()
{
pinMode(AO_clkAmplifier, OUTPUT);
pinMode(DO_greenLed, OUTPUT);
pinMode(DO_yellowLed, OUTPUT);
pinMode(DO_redLed, OUTPUT);
pinMode(AI_potentiometer, INPUT);
pinMode(AI_TMP36, INPUT);
}
void loop()
{
//get average Temperature in Celsius
{
for (int i = 0; i < 10; i++)
{
temp = map(analogRead(AI_TMP36), 0, 410, -50, 150);
delay(time);
}
temperature=(temp[0]+temp[1]+temp[2]+temp[3]+temp[4]+temp[5]+temp[6]+temp[7]+temp[8]+temp[9])/10;
}
//calculate clk output in percent, add manualAdjust and then convert in analog output range
{
if (temperature <= temp1) // Minimal speed
{
clkOutputPercent = speed1;
}
if (temperature > temp1 and temperature <= temp2) // Speed2
{
int m1 = (speed2 - speed1) / (temp2 - temp1); // calculate linear function
int b1 = speed2 - m1 * temp2;
int fx1 = m1 * temperature + b1;
clkOutputPercent = fx1;
}
if (temperature > temp2 and temperature <= temp3) // Speed3
{
int m2 = (speed3 - speed2) / (temp3 - temp2); // calculate linear function
int b2 = speed3 - m2 * temp3;
int fx2 = m2 * temperature + b2;
clkOutputPercent = fx2;
}
if (temperature > temp3 and temperature <= temp4) // Speed4
{
int m3 = (speed4 - speed3) / (temp4 - temp3); // calculate linear function
int b3 = speed4 - m3 * temp4;
int fx3 = m3 * temperature + b3;
clkOutputPercent = fx3;
}
if (temperature > temp4) // set maximal speed when temperature > temp4
{
clkOutputPercent = speedMax;
}
manualAdjust = map(analogRead(AI_potentiometer), 0, 1023, 0, 100);
clkOutputPercent = clkOutputPercent + manualAdjust; // add manualAdjust to rise the speed manually
if (clkOutputPercent > 100) // maximal 100% limiter
{
clkOutputPercent = 100;
}
clkOutputValue = (255 / 100 * clkOutputPercent); //convert from Percent to Analog output range
analogWrite(AO_clkAmplifier, clkOutputValue);
}
// set Temperature Leds
{
if (temperature <= temp1)
{
digitalWrite(DO_greenLed, HIGH);
digitalWrite(DO_yellowLed, LOW);
digitalWrite(DO_redLed, LOW);
}
if (temperature > temp1 and temperature <= temp2)
{
digitalWrite(DO_greenLed, HIGH);
digitalWrite(DO_yellowLed, HIGH);
digitalWrite(DO_redLed, LOW);
}
if (temperature > temp2 and temperature <= temp3)
{
digitalWrite(DO_greenLed, LOW);
digitalWrite(DO_yellowLed, HIGH);
digitalWrite(DO_redLed, LOW);
}
if (temperature > temp3 and temperature <= temp4)
{
digitalWrite(DO_greenLed, LOW);
digitalWrite(DO_yellowLed, HIGH);
digitalWrite(DO_redLed, HIGH);
}
if (temperature > temp4)
{
digitalWrite(DO_greenLed, LOW);
digitalWrite(DO_yellowLed, LOW);
digitalWrite(DO_redLed, HIGH);
}
}
}
Benutzer, die sich für diesen Beitrag bedankt haben:
the_leon (04.12.2016)
Benutzerinformationen überspringen
1. Platz Enermax Casecon Contest
Registrierungsdatum: 12. März 2012
Wohnort: München
Beruf: Maschinenbautechniker
Benutzerinformationen überspringen
1. Platz Enermax Casecon Contest
Registrierungsdatum: 12. März 2012
Wohnort: München
Beruf: Maschinenbautechniker
Benutzerinformationen überspringen
1. Platz Enermax Casecon Contest
Registrierungsdatum: 12. März 2012
Wohnort: München
Beruf: Maschinenbautechniker
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »misfit« (16. Oktober 2017, 07:07)
Benutzerinformationen überspringen
1. Platz Enermax Casecon Contest
Registrierungsdatum: 12. März 2012
Wohnort: München
Beruf: Maschinenbautechniker
Benutzer, die sich für diesen Beitrag bedankt haben:
misfit (24.10.2017)
Benutzerinformationen überspringen
1. Platz Enermax Casecon Contest
Registrierungsdatum: 12. März 2012
Wohnort: München
Beruf: Maschinenbautechniker
Benutzerinformationen überspringen
1. Platz Enermax Casecon Contest
Registrierungsdatum: 12. März 2012
Wohnort: München
Beruf: Maschinenbautechniker
Benutzerinformationen überspringen
1. Platz Enermax Casecon Contest
Registrierungsdatum: 12. März 2012
Wohnort: München
Beruf: Maschinenbautechniker
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »black_devil« (3. November 2017, 21:32)
Benutzerinformationen überspringen
"Mein Name ist George - Der George"
Registrierungsdatum: 17. März 2010
Wohnort: Da wo der Berch wohnt
Beruf: Inginöööör und Freundinbeschäftiger
© 2011-2014 We-Mod-It.com | Das Forum von Moddern für Modder | © Design by Jama
Forensoftware: Burning Board® 3.1.8, entwickelt von WoltLab® GmbH