Бузер как сделать?
- Войдите на сайт для отправки комментариев
Ср, 06/01/2016 - 18:23
Добрый вечер всем. Имееться термометр в машину. Подскажите как сделать чтоб бузер пикал к примеру 3 раза при какойто температуры и так же при включении устройства если температура ниже заданой температуры тоже было извещение.
Другими словами как в иномарках при температуре +2 идет предупреждение о гололеде, а так же если включаем зажигание и температура <=2 градусам идет так же предупреждение
Если нужно то выложу свой скетч сюда. Заранее благодарен
Если нужно то выложу свой скетч сюда. Заранее благодарен
Дык, выкладывайте. И скетч и схему. Чего так-то обсуждать? Мы даже не знаем, что там за буззер у Вас.
#include <OneWire.h> #include <DallasTemperature.h> #include <OLED_I2C.h> OLED myOLED(SDA, SCL, 8); #define ONE_WIRE_BUS 4 // DS18B20 подключен сюда #define TEMPERATURE_PRECISION 11 // точность измерения температуры #define R1 1000 // резисторы измерения напряжения 1 МОм #define R2 67 // резисторы измерения напряжения 67 КОм #define averageFactor 4 // коэффициент сглаживания показаний (0 = не сглаживать) extern uint8_t MegaNumbers[]; extern uint8_t SmallFont[]; extern uint8_t sun[]; extern uint8_t winter[]; OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); DeviceAddress insideThermometer; // Получили адресс датчика температуры //String tmpStr; String msg_a; String msg_t; float tempC = 0; int analogPin = 0; int light = 0; unsigned long previousMillis = 0; // время последнего измерения const long interval = 500; // интервал для измерения температуры (milliseconds) unsigned long previousSec = 0; // время последнего показа const long intervalMsg = 1000; // интервал показа сообщения о погоде int msgState = LOW; // тип сообщения void setup() { myOLED.begin(); myOLED.clrScr(); myOLED.update(); msg_a = ""; msg_t = ""; analogReference(INTERNAL); sensors.begin(); sensors.getAddress(insideThermometer, 0); sensors.setResolution(TEMPERATURE_PRECISION); myOLED.invert (false); } void loop(void) { myOLED.clrScr(); // Делаем инверсию в зависимости от подсветки ============================================================ light = analogRead(analogPin); //Устанавливаем подсветку равную напряжению на аналогом входе if (light > 50) //Считывание подсветки { myOLED.invert (true);//Подсветка день } else { myOLED.invert (false);//Подсветка ночь } unsigned long currentMillis = millis(); // раз в интервал считывает температуру ================================================================ if (currentMillis - previousMillis >= interval) { // save the last time previousMillis = currentMillis; // узнаём температуру sensors.setWaitForConversion(false); // makes it async sensors.requestTemperatures(); sensors.setWaitForConversion(true); delay(500); //Задержка опроса датчика tempC = sensors.getTempCByIndex(0); //tempC = -1.1; // отладка } myOLED.setFont(SmallFont); if (tempC >= 0) { // плюсовая температура ============================================================================== myOLED.drawBitmap(7, 40, sun, 32, 16); } else { // минусовая температура ============================================================================= myOLED.drawBitmap(7, 40, winter, 32, 16); if (tempC < 0) setMinus(47, 35); // один знак температуры else setMinus(44, 35); // два знака температуры //tempC = -tempC; }; myOLED.setFont(MegaNumbers); int tc = round(abc(tempC) * 10) / 10; // целая часть int tf = round(abc(tempC * 10)) % 10; // дробная часть if (tc > 9) myOLED.print(String(tc), 53, 15); // два знака else myOLED.print(String(tc), 77, 15); // один знак myOLED.print(String(tf), RIGHT, 15); setPoint(100, 51); // позиция запятой if (abc(tempC) <= 2) { //предупреждение о гололеде // показываем погоду msg_t = "POSSIBLE ICE"; myOLED.drawBitmap(7, 40, winter, 32, 16); if (currentMillis - previousSec >= intervalMsg) { // сохраняем время последнего показа previousSec = currentMillis; if (msgState == LOW) msgState = HIGH; else msgState = LOW; } } else msgState = HIGH; // показываем только аккум myOLED.setFont(SmallFont); if (msgState) myOLED.print(msg_a, CENTER, 5); else myOLED.print(msg_t, CENTER, 5); // сообщение погоды myOLED.update(); delay(25); } void setPoint(int x, int y) { // рисуем запятую myOLED.setPixel(x, y); myOLED.setPixel(x + 1, y); myOLED.setPixel(x, y + 1); myOLED.setPixel(x + 1, y + 1); myOLED.setPixel(x + 1, y + 2); myOLED.setPixel(x, y + 3); } void setMinus(int x, int y) { // рисуем минус myOLED.drawLine(x, y, x + 8, y); myOLED.drawLine(x, y + 1, x + 8, y + 1); } float abc(float x) { if (x >= 0) { return x; } else { return -x; } }Бузер активный при подаче +5 вольт он работает
Пока взял пьезо бузер
Я так понимаю нужно это сделать
по типу
while (var < 3) { tone (3, 1300); //включаем на 1200 Гц delay (300); tone (3, 800); //включаем на 1200 Гц delay (300); var++; noTone(3); }только не могу понять куда его вставить
Вы же писали, что у Вас активный пьезоизлучатель. Зачем ему tone?
Вы же писали, что у Вас активный пьезоизлучатель. Зачем ему tone?
Он лежит на работе, а я пока на больничном дома и есть в наличии только пьезовый