Bzučák, PT100, led pásek
Napsal: 04 lis 2018, 01:05
Ahoj,
ve Wiringu jsem začátečník a prosím o radu při konstrukci knihovny.
V projektu měřím 9 teplot pomocí PT100. Jako signalizaci jednotlivých teplotních hladin používám led pásek a buzz.
Teploty sleduji ve 3 úrovních:
1. studená úroveň, 2. příprava, 3. ready status.
1. a 2. úroveň mě úplně nezajímá, ale 3. už ano.
Když mi teplota skočí do určité hladiny, rozsvítím danou barvu na led pásku. (To mi chodí).
Když se ovšem teplota převalí do 3. hladiny, pak potřebuji navíc k led pásku aktivovat buzz po dobu (1000ms) a hned ho zase vypnout.. a tady už mi to dělá neplechu. Buď píská pořád, nebo začne pískat ve 3. úrovni - což potřebuji ale už se nevypne. Přes digitalWrite ani přes Tone a noTone mi to prostě nejde.
Buzz používám - YL-44 a desku Arduino Mega.
Co mám zadat do podmínky, aby mi v poslední úrovni sepnul, trval 1vteřinu (1000ms) a hned zase vypnul?
Díky a přeji hezký večer!
Kod:
#include <Adafruit_MAX31865.h>
#include <RGBdriver.h>
//Teploty
//CS, DI, DO, CLK
Adafruit_MAX31865 max_1 = Adafruit_MAX31865(7, 4, 2, 3); //Cont1
Adafruit_MAX31865 max_2= Adafruit_MAX31865(7, 4, 2, 5); //Cont2
Adafruit_MAX31865 max_3= Adafruit_MAX31865(7, 4, 2, 6); //Cont3
Adafruit_MAX31865 max_4 = Adafruit_MAX31865(7, 4, 2, 8); //Fpat
Adafruit_MAX31865 max_5= Adafruit_MAX31865(7, 4, 2, 9); //Pat
Adafruit_MAX31865 max_6= Adafruit_MAX31865(7, 4, 2, 10); //Bcont
Adafruit_MAX31865 max_7 = Adafruit_MAX31865(7, 4, 2, 11); //Fcont
Adafruit_MAX31865 max_8= Adafruit_MAX31865(7, 4, 2, 12); //res1
Adafruit_MAX31865 max_9= Adafruit_MAX31865(7, 4, 2, 13); //res2
#define RREF 430.0
#define RNOMINAL 100.0
//Led pasek
#define CLK 14
#define DIO 15
RGBdriver Driver(CLK,DIO);
//bzucak
#define buz 16
void setup() {
Serial.begin(115200);
pinMode(buz, OUTPUT);
max_1.begin(MAX31865_4WIRE);
max_2.begin(MAX31865_4WIRE);
max_3.begin(MAX31865_4WIRE);
max_4.begin(MAX31865_4WIRE);
max_5.begin(MAX31865_4WIRE);
max_6.begin(MAX31865_4WIRE);
max_7.begin(MAX31865_4WIRE);
max_8.begin(MAX31865_4WIRE);
max_9.begin(MAX31865_4WIRE);
}
void loop() {
uint16_t rtd1 = max_1.readRTD();
uint16_t rtd2 = max_2.readRTD();
uint16_t rtd3 = max_3.readRTD();
uint16_t rtd4 = max_1.readRTD();
uint16_t rtd5 = max_2.readRTD();
uint16_t rtd6 = max_3.readRTD();
uint16_t rtd7 = max_1.readRTD();
uint16_t rtd8 = max_2.readRTD();
uint16_t rtd9 = max_3.readRTD();
float ratio1 = rtd1;
float ratio2 = rtd2;
float ratio3 = rtd3;
float ratio4 = rtd1;
float ratio5 = rtd2;
float ratio6 = rtd3;
float ratio7 = rtd1;
float ratio8 = rtd2;
float ratio9 = rtd3;
ratio1 /= 32768;
ratio2 /= 32768;
ratio3 /= 32768;
ratio4 /= 32768;
ratio5 /= 32768;
ratio6 /= 32768;
ratio7 /= 32768;
ratio8 /= 32768;
ratio9 /= 32768;
Serial.print("Cont1 = ");
Serial.println(max_1.temperature(100, RREF));
Serial.print("Cont2 = ");
Serial.println(max_2.temperature(100, RREF));
Serial.print("Cont3 = ");
Serial.println(max_3.temperature(100, RREF));
Serial.print("FPat = ");
Serial.println(max_4.temperature(100, RREF));
Serial.print("Pat = ");
Serial.println(max_5.temperature(100, RREF));
Serial.print("BCont = ");
Serial.println(max_6.temperature(100, RREF));
Serial.print("FCont = ");
Serial.println(max_7.temperature(100, RREF));
Serial.print("Res1 = ");
Serial.println(max_8.temperature(100, RREF));
Serial.print("Res2 = ");
Serial.println(max_9.temperature(100, RREF));
Serial.println();
//Teploty CONT1-3, piny 3,5,6
//Cont1
if(max_1.temperature(100, RREF) < 26){ //studena - prvni uroven bila
Driver.SetColor(100, 100, 100);
Driver.begin();
}
if((max_1.temperature(100, RREF) > 27) && (max_1.temperature(100, RREF) < 29)){ //priprava - druha uroven modra
Driver.SetColor(0, 0, 255);
Driver.begin();
}
if(max_1.temperature(100, RREF) > 30){ //ready - treti uroven zelena
Driver.begin();
Driver.SetColor(0, 255, 0);
digitalWrite(buz, HIGH);
delay(250);
digitalWrite(buz, LOW);
}
else{digitalWrite(buz,LOW);}
}
ve Wiringu jsem začátečník a prosím o radu při konstrukci knihovny.
V projektu měřím 9 teplot pomocí PT100. Jako signalizaci jednotlivých teplotních hladin používám led pásek a buzz.
Teploty sleduji ve 3 úrovních:
1. studená úroveň, 2. příprava, 3. ready status.
1. a 2. úroveň mě úplně nezajímá, ale 3. už ano.
Když mi teplota skočí do určité hladiny, rozsvítím danou barvu na led pásku. (To mi chodí).
Když se ovšem teplota převalí do 3. hladiny, pak potřebuji navíc k led pásku aktivovat buzz po dobu (1000ms) a hned ho zase vypnout.. a tady už mi to dělá neplechu. Buď píská pořád, nebo začne pískat ve 3. úrovni - což potřebuji ale už se nevypne. Přes digitalWrite ani přes Tone a noTone mi to prostě nejde.
Buzz používám - YL-44 a desku Arduino Mega.
Co mám zadat do podmínky, aby mi v poslední úrovni sepnul, trval 1vteřinu (1000ms) a hned zase vypnul?
Díky a přeji hezký večer!
Kod:
#include <Adafruit_MAX31865.h>
#include <RGBdriver.h>
//Teploty
//CS, DI, DO, CLK
Adafruit_MAX31865 max_1 = Adafruit_MAX31865(7, 4, 2, 3); //Cont1
Adafruit_MAX31865 max_2= Adafruit_MAX31865(7, 4, 2, 5); //Cont2
Adafruit_MAX31865 max_3= Adafruit_MAX31865(7, 4, 2, 6); //Cont3
Adafruit_MAX31865 max_4 = Adafruit_MAX31865(7, 4, 2, 8); //Fpat
Adafruit_MAX31865 max_5= Adafruit_MAX31865(7, 4, 2, 9); //Pat
Adafruit_MAX31865 max_6= Adafruit_MAX31865(7, 4, 2, 10); //Bcont
Adafruit_MAX31865 max_7 = Adafruit_MAX31865(7, 4, 2, 11); //Fcont
Adafruit_MAX31865 max_8= Adafruit_MAX31865(7, 4, 2, 12); //res1
Adafruit_MAX31865 max_9= Adafruit_MAX31865(7, 4, 2, 13); //res2
#define RREF 430.0
#define RNOMINAL 100.0
//Led pasek
#define CLK 14
#define DIO 15
RGBdriver Driver(CLK,DIO);
//bzucak
#define buz 16
void setup() {
Serial.begin(115200);
pinMode(buz, OUTPUT);
max_1.begin(MAX31865_4WIRE);
max_2.begin(MAX31865_4WIRE);
max_3.begin(MAX31865_4WIRE);
max_4.begin(MAX31865_4WIRE);
max_5.begin(MAX31865_4WIRE);
max_6.begin(MAX31865_4WIRE);
max_7.begin(MAX31865_4WIRE);
max_8.begin(MAX31865_4WIRE);
max_9.begin(MAX31865_4WIRE);
}
void loop() {
uint16_t rtd1 = max_1.readRTD();
uint16_t rtd2 = max_2.readRTD();
uint16_t rtd3 = max_3.readRTD();
uint16_t rtd4 = max_1.readRTD();
uint16_t rtd5 = max_2.readRTD();
uint16_t rtd6 = max_3.readRTD();
uint16_t rtd7 = max_1.readRTD();
uint16_t rtd8 = max_2.readRTD();
uint16_t rtd9 = max_3.readRTD();
float ratio1 = rtd1;
float ratio2 = rtd2;
float ratio3 = rtd3;
float ratio4 = rtd1;
float ratio5 = rtd2;
float ratio6 = rtd3;
float ratio7 = rtd1;
float ratio8 = rtd2;
float ratio9 = rtd3;
ratio1 /= 32768;
ratio2 /= 32768;
ratio3 /= 32768;
ratio4 /= 32768;
ratio5 /= 32768;
ratio6 /= 32768;
ratio7 /= 32768;
ratio8 /= 32768;
ratio9 /= 32768;
Serial.print("Cont1 = ");
Serial.println(max_1.temperature(100, RREF));
Serial.print("Cont2 = ");
Serial.println(max_2.temperature(100, RREF));
Serial.print("Cont3 = ");
Serial.println(max_3.temperature(100, RREF));
Serial.print("FPat = ");
Serial.println(max_4.temperature(100, RREF));
Serial.print("Pat = ");
Serial.println(max_5.temperature(100, RREF));
Serial.print("BCont = ");
Serial.println(max_6.temperature(100, RREF));
Serial.print("FCont = ");
Serial.println(max_7.temperature(100, RREF));
Serial.print("Res1 = ");
Serial.println(max_8.temperature(100, RREF));
Serial.print("Res2 = ");
Serial.println(max_9.temperature(100, RREF));
Serial.println();
//Teploty CONT1-3, piny 3,5,6
//Cont1
if(max_1.temperature(100, RREF) < 26){ //studena - prvni uroven bila
Driver.SetColor(100, 100, 100);
Driver.begin();
}
if((max_1.temperature(100, RREF) > 27) && (max_1.temperature(100, RREF) < 29)){ //priprava - druha uroven modra
Driver.SetColor(0, 0, 255);
Driver.begin();
}
if(max_1.temperature(100, RREF) > 30){ //ready - treti uroven zelena
Driver.begin();
Driver.SetColor(0, 255, 0);
digitalWrite(buz, HIGH);
delay(250);
digitalWrite(buz, LOW);
}
else{digitalWrite(buz,LOW);}
}