100 lines
2.7 KiB
C++
100 lines
2.7 KiB
C++
// 8-channel relay on arduino serial control with led blink with DS18B20
|
|
// v0.1 under dwtwl
|
|
// ch1 = pin2; ch2 = pin3; ch3 = pin4; ch4 = pin5;
|
|
// ch5 = pin6; ch6 = pin7; ch7 = pin8; ch8 = pin9; led = pin13;
|
|
// send: switch on = 21X; switch off = 22X; get status = 23X;
|
|
// codes: in = init; eX = enabled; dX = disabled; tX = power on; fX = off;
|
|
#include <Thread.h>
|
|
#include <OneWire.h> // DS18B20 temp sensor
|
|
#include <DallasTemperature.h>
|
|
#define ONE_WIRE_BUS 10
|
|
OneWire oneWire(ONE_WIRE_BUS);
|
|
DallasTemperature sensors(&oneWire);
|
|
Thread ledThread = Thread();
|
|
|
|
int incomingNumber = 0;
|
|
|
|
void setup() {
|
|
Serial.begin(9600);
|
|
pinMode(13, OUTPUT);
|
|
for(int i=2;i<10;i++){
|
|
pinMode(i, OUTPUT);
|
|
digitalWrite(i, HIGH);
|
|
}
|
|
Serial.println("in");
|
|
|
|
ledThread.onRun(ledBlink);
|
|
ledThread.setInterval(1000);
|
|
|
|
sensors.begin();
|
|
|
|
}
|
|
|
|
void ledBlink() {
|
|
static bool ledStatus = false;
|
|
ledStatus = !ledStatus;
|
|
digitalWrite(13, ledStatus);
|
|
}
|
|
|
|
void loop() {
|
|
// Thread init:
|
|
if (ledThread.shouldRun())
|
|
ledThread.run();
|
|
|
|
if (Serial.available() > 0) {
|
|
int incomingByte = Serial.read()-48;
|
|
if (incomingByte>=0 && incomingByte<=9) {
|
|
incomingNumber=incomingNumber*10+incomingByte;
|
|
} else {
|
|
if (incomingNumber>=210 && incomingNumber<=219) {
|
|
delay(500);
|
|
int currentPin = incomingNumber - 209;
|
|
char currentChannel[] = "e0";
|
|
currentChannel[1] = '0' + (currentPin - 1);
|
|
digitalWrite(currentPin, LOW);
|
|
Serial.println(currentChannel);
|
|
delay(500);
|
|
}
|
|
|
|
if (incomingNumber>=220 && incomingNumber<=229) {
|
|
delay(500);
|
|
int currentPin = incomingNumber - 219;
|
|
char currentChannel[] = "d0";
|
|
currentChannel[1] = '0' + (currentPin - 1);
|
|
digitalWrite(currentPin, HIGH);
|
|
Serial.println(currentChannel);
|
|
delay(500);
|
|
}
|
|
|
|
if (incomingNumber>=230 && incomingNumber<=239) {
|
|
delay(500);
|
|
int currentPin = incomingNumber - 229;
|
|
if (digitalRead(currentPin)==HIGH) {
|
|
char currentChannel[] = "f0";
|
|
currentChannel[1] = '0' + (currentPin - 1);
|
|
Serial.println(currentChannel);
|
|
} else {
|
|
char currentChannel[] = "t0";
|
|
currentChannel[1] = '0' + (currentPin - 1);
|
|
Serial.println(currentChannel);
|
|
}
|
|
delay(500);
|
|
}
|
|
|
|
if (incomingNumber == 99) {
|
|
int sensorData = readDS18B20();
|
|
String temperature = "t";
|
|
String stringToPrint = temperature + sensorData;
|
|
Serial.println(stringToPrint);
|
|
}
|
|
incomingNumber = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
// DS18B20 Temperature
|
|
float readDS18B20() {
|
|
sensors.requestTemperatures(); // Send the command to get temperature readings
|
|
return sensors.getTempCByIndex(0);
|
|
}
|