Обсуждаем контроллеры компании Atmel.
Ответить

помогите переписать код ардуино пожалуйста

Вт мар 12, 2019 21:01:38

Здравствуйте. возникла необходимость записывать данные по включению/выключению трёх устройств в какое время они работали. Нашёл похожую схемку. она пишет температуру, давление датчиком BMP280 по шине I2C. Собрал - работает. теперь нужно переделать под мои нужды, во первых чтобы информация записывалась не по I2C, а просто логической единицей, есть один из трёх сигнал - пишет что есть, нету - пишет что нету через определённое время. Короче говоря самописец.
вот сайт с описанием.
http://kaptery.com/product/nano-logger-kit

и код

/* Starter code for the Nano Data Logger. @file NanoDataLoggerBMPv2.ino
The Nano Logger is an Arduino Nano with data logging shield with realtime clock (RTC) and microSD socket.
For use with a BMP280 I2C sensor for barometric pressure and temperature.
The components are not slept between read/write events so a sustained power source is required for
longterm operation (small batteries last just a couple of days).
Saves and displays data every x seconds (modify near line 32).
C. Fastie 12/2017
*/
#include <SdFat.h> // https://github.com/greiman/SdFat/
#include <SPI.h>
#include <Wire.h>
#include <RTClib.h> // library from https://github.com/adafruit/RTClib
#include <Adafruit_Sensor.h> // https://github.com/adafruit/Adafruit_Sensor
#include <Adafruit_BMP280.h> // https://github.com/adafruit/Adafruit_BMP280_Library
Adafruit_BMP280 bmp; // The BMP280 will be an I2C device, and "bmp" is the object.
// The following two lines allow code in the BMP280 library to compute altitude from pressure.
// Before use, change the hgInches variable to the actual sealevel barometric pressure.
// Consult a weather website for the current value. Then save and load the sketch onto the Nano.
float hgInches = 30.00; // Enter the sealevel barometric pressure here (xx.xx inches Hg)
#define SEALEVELPRESSURE_HPA (hgInches/0.02952998751) // hPa=(inches Hg)/0.02952998751
RTC_DS1307 RTC; // The real time clock object is "RTC"
#define DS1307_I2C_ADDRESS 0x68
SdFat SD; // The SdFat object is "SD"
#define MOSIpin 11 // For SD card
#define MISOpin 12 // For SD card
const int chipSelect = 10; // CS pin for the SD card
char tmeStrng[ ] = "0000/00/00,00:00:00"; // a template for a data/time string
float BMPt;
float BMPp;
float BMPa;
long utc;
int logSeconds = 5; // ****** Enter ****** the number of seconds between logging events
long logMillis = logSeconds * 1000;

void setup() {
Serial.begin(9600); // Open serial communications and wait for port to open:
Wire.begin(); // initialize the I2C interface
RTC.begin(); // initialize the RTC
// Uncomment the line below and load the sketch to the Nano to set the RTC time. Then the line must
// be commented out and the sketch loaded again or the time will be wrong.
// RTC.adjust(DateTime((__DATE__), (__TIME__))); //sets the RTC to the time the sketch was compiled.

while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
Serial.println("NanoDataLoggerBMPv2 first tests");
Serial.print("Sealevel pressure used is ");
Serial.println(hgInches);
Serial.print("Find SD card: "); // initialize and display the status of the SD card:
if (!SD.begin(chipSelect)) {
Serial.println("Card failed");
while(1);
}
Serial.println(" SD card OK");
Serial.print("Logging to microSD card every ");
Serial.print(logSeconds);
Serial.println(" seconds.");
Serial.println();
//print a header to the data file with column headings
File dataFile = SD.open("datalog.txt", FILE_WRITE);
if (dataFile) { // if the file is available, write to it:
dataFile.println("NanoDataLogger_bmp first tests");
dataFile.print("Sealevel pressure used is ");
dataFile.println(hgInches);
dataFile.println("Date,Time,UTCtime,Temp_C,Pressure_hPa,Altitude_M");
dataFile.close();
}
else {
Serial.println("file error"); // if the file is not open, display an error:
}
bool status; // initialize the BMP280 sensor and display the status
status = bmp.begin(0x76); // the I2C address of these BMP280 sensors is 0x76;
if (!status) {
Serial.println("No BMP280");
while (1);
}
delay(2000); // Wait so the sensor can initialize
} // end of setup
void loop()
{
BMPt = (bmp.readTemperature()); // read the temperature
BMPp = (bmp.readPressure() / 100.0F); // read the pressure
BMPa = (bmp.readAltitude(SEALEVELPRESSURE_HPA)); // compute the altitude
DateTime now = RTC.now(); // read the time from the RTC
utc = (now.unixtime());
sprintf(tmeStrng, "%04d/%02d/%02d,%02d:%02d:%02d", now.year(), now.month(), now.day(), now.hour(), now.minute(), now.second()); // [added seconds]

Serial.print("RTC utc Time: "); // Display results on the serial monitor:
Serial.print(now.unixtime());
Serial.println();
Serial.print("RTC time: ");
Serial.println(tmeStrng);
Serial.print("BMP280 temp: ");
Serial.print(BMPt);
Serial.println(" C");
Serial.print("Pressure: ");
Serial.print(BMPp);
Serial.println(" hPa");
Serial.print("Elevation: ");
Serial.print(BMPa);
Serial.println(" m");
Serial.println();
// write the data to the SD card:
File dataFile = SD.open("datalog.txt", FILE_WRITE); // if the file is available, write to it:
dataFile.print(tmeStrng);dataFile.print(",");
dataFile.print(utc);dataFile.print(",");
dataFile.print(BMPt);dataFile.print(",");
dataFile.print(BMPp);dataFile.print(",");
dataFile.println(BMPa);
dataFile.flush(); // wait for serial data to complete transmission
dataFile.close();
delay(logMillis); // Write data every logMillis/1000 seconds
} // end of the MAIN LOOP

Re: помогите переписать код ардуино пожалуйста

Чт мар 14, 2019 08:58:43

Или я ничего уже в этой жизни не понимаю, или это так рыночная экономика мозги электронщиков захватила, и теперь даже кот бесплатно не пёрнет, тем более для знающего человека это работы минуты на три.! :o
Ну что же, пойдём другим путём - готов заплатить денег за скетч для Nano Data Logging Shield Deek-Robot ID 8105 для записи на флешкарту трёх параметров лог0/лог1 !

Re: помогите переписать код ардуино пожалуйста

Чт мар 14, 2019 09:04:49

лично у меня проблема не в том, что задача сложная или денег хочу, а в том, что я ардуино в жизни ни разу в руки не брал.
вы как-то не принимаете в расчет тот факт, что ардуинщики в массе своей такие же, как и вы "знатоки" - готовое прошить могут, а свое написать нет. тем более написать другому по его хотелкам. а опытные любители вроде меня и профессионалы с ардуино не работают...

так что зря вы кипятитесь...

Re: помогите переписать код ардуино пожалуйста

Чт мар 14, 2019 10:35:55

Уважаемый java, как верно уже заметили основной контингент посещающий данный раздел форума это сишники и асемблерщики.
А ардуино это даже не с++, а специфическая смесь си и классов из с++ , обвернутая в либы понятные только разработчикам данного продукта.
Как то попадал на сайт(форум) где свою деятельность ведут люди занимающиеся разработкой своих изделий на основе разных ардуин, попробуйте там спросить.

Re: помогите переписать код ардуино пожалуйста

Чт мар 14, 2019 10:57:56

Написал в ЛС.

Re: помогите переписать код ардуино пожалуйста

Чт мар 14, 2019 11:01:35

Ну да. На arduino.ru вполне себе... А мне вот просто лень, хотя если бы автор сразу написал что именно является входным сигналом вкл/выкл - может еще бы вчера ответил :)

Re: помогите переписать код ардуино пожалуйста

Чт мар 14, 2019 11:46:05

лично у меня проблема не в том, что задача сложная или денег хочу, а в том, что я ардуино в жизни ни разу в руки не брал.
вы как-то не принимаете в расчет тот факт, что ардуинщики в массе своей такие же, как и вы "знатоки" - готовое прошить могут, а свое написать нет. тем более написать другому по его хотелкам. а опытные любители вроде меня и профессионалы с ардуино не работают...

так что зря вы кипятитесь...

ARV, у вас предвзятое отношение. Люди разные. Очень много профи в Ардуино среде (по сравнению с некоторыми, извиняюсь, вы будете курить в сторонке)) В тоже время встречал ТАКИХ лохов (ППЦ!), и в казалось бы таких солидных форумах...

Re: помогите переписать код ардуино пожалуйста

Чт мар 14, 2019 12:03:14

OKF писал(а):у вас предвзятое отношение. Люди разные. Очень много профи в Ардуино среде
ну да, данная тема тому подтверждение :))) те, кто саму ардуину придумал и продвигает - да, профессионалы (хотя, когда я смотрю на исходники библиотек - начинаю в этом сомневаться). а остальные 99,9% - увы, не такие

Re: помогите переписать код ардуино пожалуйста

Чт мар 14, 2019 12:50:58

В том то и дело, то что раньше это было делом избранных, а сейчас, с приходом Ардуино, стало доступно каждому. ) И в этом свои плюсы и минусы.
Да, меня тоже сильно ужасает "профессионализм" библиотекописателей, но есть всякие. В то же время, в оправдание, не известно какие были условия)

Re: помогите переписать код ардуино пожалуйста

Чт мар 14, 2019 13:02:13

Да не кипячусь я :)) просто сам факт удивил, раньше спросишь что нибудь, приходят люди стараются помочь, объяснить, да и сам сколько помогал советами, а тут написал в ноябре https://radiokot.ru/forum/viewtopic.php?f=61&t=158599 600 просмотров и ни одного ответа, ну ладно, там задача сложная, датчик новый мало изученный, а тут так вобще проще некуда, дописать на какою ногу сигнал пришёл и записать в флешку, умом то я понимаю как это сделать, а вот знаний не хватает, два дня уже сижу. всякие варианты пробую, и каждый раз выскакивает красная строка ошибки, и что то на не русском написано. Ну нет у меня сейчас времени нерусский язык учить, а изделие сделать нужно.

Re: помогите переписать код ардуино пожалуйста

Чт мар 14, 2019 13:08:30

Ну так логично же! ВАМ нужно - вы и суетитесь. Какие вопросы? Какие претензии? Или я чего то не догоняю?

Re: помогите переписать код ардуино пожалуйста

Чт мар 14, 2019 17:02:15

Всем спасибо.
Откликнулся мой старый друг и за 20 минут всё сделал. И кстати чистый АВРщик, с адруино никогда дел не имел.
Если кому нужно, вот скетч - это самописец, пишет дату, время и показатели трёх контактов замкнутых или разомкнутых на минус (GND) - ножки на плате адруино А0,А1,А2
использавано две платы:
адруино нано https://ru.aliexpress.com/item/Freeship ... 33eddzxNuR
и Nano Data Logging Shield Deek-Robot ID 8105 https://ru.aliexpress.com/item/Nano-V3- ... 33edpZ5rVx

#include <SPI.h>
#include <SD.h>
#include <RTC.h>
RTC time;
//Set by default for the SD card library
//MOSI = Pin 11
//MISO = Pin 12
//SCLK = PIN 13
//We always need to set the CS Pin
const int CS_PIN =10;
long datet;
//We set this high to provide power
const int POW_PIN =8;

int boiler = 14;
int light = 15;
int motion = 16;

void setup()
{
pinMode(boiler, INPUT_PULLUP);
pinMode(light, INPUT_PULLUP);
pinMode(motion, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);

time.begin(RTC_DS1307,5,7,6);

// time.settime(0, 44, 15, 14, 03, 19); // секунды, минуты, часы, дата, месяц, год // вводить

//CS pin is an output
pinMode(CS_PIN, OUTPUT);

//Card will draw power from pin 8, so set it high
pinMode(POW_PIN, OUTPUT);
digitalWrite(POW_PIN, HIGH);

if (!SD.begin(CS_PIN))
{
return;
}
}

void loop()
{
int boiler_status = 0;
int light_status = 0;
int motion_status = 0;

boiler_status = digitalRead(boiler);
light_status = digitalRead(light);
motion_status = digitalRead(motion);

//Open a file and write to it.
File dataFile = SD.open("log.csv", FILE_WRITE);
if (dataFile)
{
dataFile.print(time.gettime("d-m-Y, H:i"));
dataFile.print("| ");

if(!boiler_status){
dataFile.print("Печь включена | ");
}else {
dataFile.print("Печь выключена | ");
}


if(!light_status){
dataFile.print("Свет включен | ");
}else {
dataFile.print("Свет выключен | ");
}

if(!motion_status){
dataFile.print("Движение");
}else {
dataFile.print("Нет движения");
}

dataFile.println("");
dataFile.close();
}

digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(200); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(200); // wait for a second

delay(600000); //10 минут в миллисекундах

Re: помогите переписать код ардуино пожалуйста

Пт мар 15, 2019 00:02:03

java писал(а):Откликнулся мой старый друг и за 20 минут всё сделал.
Почему так медленно? Вы же писали.
java писал(а):для знающего человека это работы минуты на три.!
Должен был за 3 минуты :solder: все переделать, протестировать и сдать вам работу с пояснительной запиской. :)))

Re: помогите переписать код ардуино пожалуйста

Пт мар 15, 2019 11:15:22

А почему именно ардуино среда? Почти все платы снабжены разъемом внутрисхемного программирования, Си ближе к железу намного чем вайринг/си++. Мне например удобнее с Уно работать через программатор usbisp. Хотя начинал с ардуины знакомиться с микроконтроллерами...

Re: помогите переписать код ардуино пожалуйста

Пт мар 15, 2019 11:55:45

вот он мне тоже сказал - а почему адруино? Давай я тебе тоже самое на атмеги 8 сделаю, с экраном. Так я ему сказал, что это плату нужно разводить, деталюхи паять, а тут взял у китайцев две платы воткнул разъём и ни каких проблем!
Или я чего то не догоняю?

Наверно ВЫ не догоняете. Форум для того и создан. чтобы люди могли друг другу помогать. Человек задал вопрос и ждёт ответа. А в ответ тишина день, неделя, месяц.Если знаешь, подскажи, если ты крутой и всё знаешь. так и напиши - гони денег подскажу. Не очень приятно, когда тебя игнорят, тем более понимаешь, что знающие люди наверняка твой пост прочитали, вон предыдущее сообщение 600 просмотров и ни одного ответа.
Последний раз редактировалось java Пт мар 15, 2019 12:10:20, всего редактировалось 1 раз.

Re: помогите переписать код ардуино пожалуйста

Пт мар 15, 2019 12:01:32

не обязательно, я беру ардуину, а программу пишу как для меги (только таблица соответствия нужна портов и номера контакта...)

Re: помогите переписать код ардуино пожалуйста

Пт мар 15, 2019 12:19:31

не обязательно, я беру ардуину, а программу пишу как для меги (только таблица соответствия нужна портов и номера контакта...)

Это типа, какой я крутой?))) Ардуино ведь зачем? Затем что вы можете ЛЮБУЮ плату использовать, ЛЮБОЕ железо! Будь то на мега8, мага88, мега328, тини13, picXXX, AT91SAM, Intel... И программа будет одна и та же! Вы понимаете? Боюсь что нет. И это печально.(((

Re: помогите переписать код ардуино пожалуйста

Пт мар 15, 2019 12:45:11

слово ЛЮБОЕ я бы не стал писать, (тем более большими буквами), да, переносимость кода много выше, но какой ценой это дается? я тоже начинал с ардуин, но, эти ограничения заставили... а их иногда заказываю, потому что ленивый :)

Re: помогите переписать код ардуино пожалуйста

Пт мар 15, 2019 14:01:30

Затем что вы можете ЛЮБУЮ плату использовать,

Ну раз вы в этом разбираетесь, подскажите пожалуйста могу ли я использовать скетч предназначенный для адруино мега на плете адруино уно, и что для этого нужно делать?

Re: помогите переписать код ардуино пожалуйста

Пт мар 15, 2019 21:34:42

В настройках дуины поменять тип платы и проверить хватит ли портов io новой платы.. так же и в случае аврстудии.. поправьте, если ошибаюсь. По теме- я сажусь за ноут, цепляю ардуино Уно через usbisp программатор и пишу код в атмелстудии, отлаживаю на плате ардуино(прошивка написана на с), потом сборка голого контроллера на макете, допиливание прошивки, печатка потом и все готово. Ардуино-платы мне удобны на начальных этапах. Но ардуино среда не позволяет понять что происходит в недрах контроллера, поэтому си... Это мое мнение такое.. плюс глючность ни с того ни с сего. Было так-то работало неделю, на восьмой день встало... Оказалось виной среда ардуино. Переписал на си, 89 дней, полет нормальный. Железо не изменял. Поливалка цветов у жены... Теперь вот хочу с ассемблером разобраться, так как в си проблематично работать с одним битом регистра...
Ответить