#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"); } } }