diff --git a/Readme.md b/Readme.md index d1c6f74..b25231a 100644 --- a/Readme.md +++ b/Readme.md @@ -1,6 +1,6 @@ # Introduction -# Basic +# Basic General IO configuration ## Digital outputs @@ -51,7 +51,7 @@ for(int pwm=255; pwm>=0; pwm-=5){ } ``` -## Analog readings +## Analog readings with ADC ```c #include @@ -74,3 +74,147 @@ void loop() { delay(100); } ``` + +# A general TCLab readings and heater +```c +#include + +// vars and pins at TCLab +const int LED = 9; +const int T1 = A0; // temperature sensor T1 input +const int T2 = A2; // temperature sensor T2 input +const int Q1 = 3; // PWM at Q1 (output) +const int Q2 = 5; // PWM at Q2 (output) + + +// vars and constants: +int T1Val; +int T2Val; +const int nAvg = 10; // samples per reading +const long BAUD = 115200; // Freq serial comm +const float factor = 3.3/1024*100; // 3.3V/1024*100 + +// functions + +float readDeg(int channel) { + float acc = 0; + for(int i=0;i<=nAvg;i++) { + acc += analogRead(channel)*factor-50; + } + return acc/nAvg; +} + +void setHeater(int pin, float value) { + // clamp the input value + if(value<0) value = 0; + if(value>100) value = 100; + //convert to pwm 0 - 255 + int pwm = (int)(value*255.0/100.0+0.5); + analogWrite(pin, pwm); + analogWrite(LED, pwm); +} + + +void setup() { + // put your setup code here, to run once: + pinMode(Q1, OUTPUT); + pinMode(Q2, OUTPUT); + pinMode(LED, OUTPUT); + setHeater(Q1,40); + analogReference(EXTERNAL); + Serial.begin(BAUD); + delay(100); + Serial.println("Temps"); +} + +void loop() { + // put your main code here, to run repeatedly: + float t1Val = readDeg(T1); + float t2Val = readDeg(T2); + Serial.print(t1Val,4); Serial.print(','); + Serial.println(t2Val,4); + delay(250); +} +``` + +# Serial communication + +```c +#include + +// vars and pins at TCLab +const int LED = 9; +const int T1 = A0; // temperature sensor T1 input +const int T2 = A2; // temperature sensor T2 input +const int Q1 = 3; // PWM at Q1 (output) +const int Q2 = 5; // PWM at Q2 (output) + + +// vars and constants: +const int nAvg = 10; // samples per reading +const long BAUD = 115200; // Freq serial comm +const float factor = 3.3/1024*100; // 3.3V/1024*100 + +// functions + +float readDeg(int channel) { + float acc = 0; + for(int i=0;i<=nAvg;i++) { + acc += analogRead(channel)*factor-50; + } + return acc/nAvg; +} + +void setHeater(int pin, float value) { + // clamp the input value + if(value<0) value = 0; + if(value>100) value = 100; + //convert to pwm 0 - 255 + int pwm = (int)(value*255.0/100.0+0.5); + analogWrite(pin, pwm); + analogWrite(LED, pwm); +} + + +void setup() { + // put your setup code here, to run once: + Serial.begin(BAUD); + pinMode(Q1, OUTPUT); + pinMode(Q2, OUTPUT); + pinMode(LED, OUTPUT); + analogReference(EXTERNAL); + delay(100); + //Serial.println("TCLab ready"); +} + +void loop() { + // put your main code here, to run repeatedly: + if(Serial.available()){ + String cmd = Serial.readStringUntil('\n'); + cmd.trim(); + + if(cmd == "T1"){ + float T1Val = readDeg(T1); + Serial.println(T1Val); + } + else if(cmd == "T2"){ + float T2Val = readDeg(T2); + Serial.println(T2Val); + } + else if(cmd.startsWith("Q1 ")){ + int val = cmd.substring(3).toInt(); + setHeater(Q1, val); + } + else if(cmd.startsWith("Q2 ")){ + int val = cmd.substring(3).toInt(); + setHeater(Q2, val); + } + else if(cmd == "R1"){ + Serial.println("Not yet"); + } + else { + Serial.println("Command Error"); + } + } +} +```