#1 Програмування Arduino » Датчик кольору » 2017-02-11 00:19:18

Владисл@в
відповідей: 1

Є два скетча. Перший працює задовільно. Другий - ні.
Другий відповідає за роботу датчика кольору.
Перший поєднання першого,однак з записом на Sd картку.

Проблема: внаслідок роботи другого скетчу дані кольору повинні зберігатися на картку,однак зберігаться лише 000.
Допоможіть....

#include <Timer.h>
#include <SPI.h>//
#include <SD.h>
#include <DS3231.h>
#include <Wire.h>
Timer timer; 
Timer t; 
File myFile;
const uint8_t PIN_CS = 4;                         // указываем номер вывода arduino подключенного к выводу CS адаптера
DS3231 Clock;



bool Century = false;
bool h12;
bool PM;
byte year, month, date, DoW, hour, minute, second;

int s0 = 8; 
int s1 = 9; 
int s2 = 2; 
int s3 = 7; 
int out = 10; 
int red ; 
int green ; 
int blue ; 

void setup() { 
  
  Wire.begin();// Start the I2C interface
 pinMode(s0, OUTPUT); 
 pinMode(s1, OUTPUT); 
 pinMode(s2, OUTPUT); 
 pinMode(s3, OUTPUT); 
 pinMode(out, INPUT); 
 Serial.begin(9600); 
 digitalWrite(s0, HIGH); 
 digitalWrite(s1, HIGH); 

 while (!Serial) {
    ; 
  }

  timer.every(60000, tr);
  
  if (!SD.begin(PIN_CS)) {                         
    Serial.println("SD-card not found"); return;   
  
   
  }  
}
  void loop() {
  
  color(); 
  Serial.print(" RED :" + String(red)); 
 Serial.print(" GREEN : " + String(green)); 
 Serial.println(" BLUE : " + String(blue)); 
  //Serial.println();  
  
  int second, minute, hour, date, month, year, temperature;
  second = Clock.getSecond();
  minute = Clock.getMinute();
  hour = Clock.getHour(h12, PM);
  date = Clock.getDate();
  month = Clock.getMonth(Century);
  year = Clock.getYear();
  temperature = Clock.getTemperature();
 
timer.update();
  
  delay(1000);

}

void color() 
{ 
 // если 11 и 12 порты отключить, то мы получим красный цвет
 digitalWrite(s2, LOW); 
 digitalWrite(s3, LOW); 
 red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); 
 // если 11 порт включить, а 12 отключить, то синий
 digitalWrite(s3, HIGH); 
 blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); 
 // если 12 включить, а 11 отключить, то зеленый
 digitalWrite(s2, HIGH); 
 green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); 
}

void tr ()
{
  String filename;
  static int number;
   int i = 0;
  filename = "file_";
    filename +=  number++;
    filename += ".txt";
  //Serial.println(filename);

  File myFile = SD.open(filename, FILE_WRITE );
  do {
      //Serial.println(filename); 
  myFile.print("20");               
  myFile.print(Clock.getYear(), DEC); 
  myFile.print('-');
  myFile.print(Clock.getMonth(Century), DEC);
  myFile.print('-');
  myFile.print(Clock.getDate(), DEC);
  myFile.print(' ');
  myFile.print(Clock.getHour(h12, PM), DEC);
  myFile.print(':');
  myFile.print(Clock.getMinute(), DEC);
  myFile.print(':');
  myFile.print(Clock.getSecond(), DEC);
  myFile.print(' ');

  myFile.print("R Intensity:");  
  myFile.print(255-red, DEC);  
 myFile.print(" G Intensity: ");  
  myFile.print(255-green, DEC);  
 myFile.print(" B Intensity : ");  
  myFile.println(255-blue, DEC); 
  delay(1000);
  i++;
  } while (i<60);
  do {
   i=i-i; 
    }while ( i = 0);
    myFile.close();  // закрытие файла "iarduino.txt":
}
int s0 = 8; 
int s1 = 9; 
int s2 = 2; 
int s3 = 7; 
int out = 10; 
int red = 0; 
int green = 0; 
int blue = 0; 
 
void setup() 
{ 
 pinMode(s0, OUTPUT); 
 pinMode(s1, OUTPUT); 
 pinMode(s2, OUTPUT); 
 pinMode(s3, OUTPUT); 
 pinMode(out, INPUT); 
 Serial.begin(9600); 
 digitalWrite(s0, HIGH); 
 digitalWrite(s1, HIGH); 
} 
 
void loop() 
{ 
 color();
 // выводим значения цветов
 Serial.print(" RED :" + String(red)); 
 Serial.print(" GREEN : " + String(green)); 
 Serial.println(" BLUE : " + String(blue)); 
 delay(500); 
} 
 
void color() 
{ 
 // если 11 и 12 порты отключить, то мы получим красный цвет
 digitalWrite(s2, LOW); 
 digitalWrite(s3, LOW); 
 red = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); 
 // если 11 порт включить, а 12 отключить, то синий
 digitalWrite(s3, HIGH); 
 blue = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); 
 // если 12 включить, а 11 отключить, то зеленый
 digitalWrite(s2, HIGH); 
 green = pulseIn(out, digitalRead(out) == HIGH ? LOW : HIGH); 
}

#2 Re: Програмування Arduino » Запуск enc28j60 на nano V3 » 2016-10-08 23:27:07

#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 10, 0, 0, 177 };
Server server(80);
void setup()
{
Ethernet.begin(mac, ip);
server.begin();
}
void loop()
{
Client client = server.available();
if (client) {
   // an http request ends with a blank line
   boolean current_line_is_blank = true;
   while (client.connected()) {
     if (client.available()) {
       char c = client.read();
       // if we've gotten to the end of the line (received a newline
       // character) and the line is blank, the http request has ended,
       // so we can send a reply
       if (c == '\n' && current_line_is_blank) {
         // send a standard http response header
         client.println("HTTP/1.1 200 OK");
         client.println("Content-Type: text/html");
         client.println();
         
         // output the value of each analog input pin
         for (int i = 0; i < 6; i++) {
           client.print("analog input ");
           client.print(i);
           client.print(" is ");
           client.print(analogRead(i));
           client.println("");
         }
         break;
       }
       if (c == '\n') {
         // we're starting a new line
         current_line_is_blank = true;
       } else if (c != '\r') {
         // we've gotten a character on the current line
         current_line_is_blank = false;
       }
     }
   }
   // give the web browser time to receive the data
   delay(1);
   client.stop();
}
}

Спробуйте цей варіант

#3 Re: Програмування Arduino » часы на газоразрядных индикаторах на ардуино » 2016-10-05 22:49:55

satway пише:

Всем привет. Сколхозил я себе а-ля модуль для ардуино на лампах ИН-12 и ИН-3.   В результате все заработало как нужно. Запитал лампы и ардуино от преобразователя на мс34063. Код был собран с горем пополам - то библиотека не подходила, то еще что-то. Короче, запустил,часы пошли. Но остался не совсем доволен, так как хотелось бы, что бы в коде еще отрабатывал перебор всех цифр каждого индикатора во избежание отравления катодов. Не хватает скилов, что бы сообразить, за счет чего это лучше сделать, то ли прерыванием, то ли как-то по другому. И как сделать прерывание по времени? Например, каждые 3 минуты запускать подпрограмму?
http://forum.arduino.ua/img/members/83/333.jpg
http://forum.arduino.ua/img/members/83/222.jpg

Доброго часу доби! Я не зовсім Вас зрозумів,але я знаю,як зробити виклик по часу

#include <Timer.h>  // бібліотека
Timer timer;  // клас таймер
void setup() {
  // put your setup code here, to run once:
timer.every(60000, tr);  // кажемо кожну хвилину викликати функцію tr
}

void loop() {
  // put your main code here, to run repeatedly:
timer.update(); // перевіримо чи не пора викликатии функцію
}
void tr () { // оголушуємо функцію
  Serial.println("ghg"); // вивід на екран
  }
Ось посилання:  http://www.ex.ua/849356801761
Скачаєте архів і знайдете бібліотеку. Ключ до скачування 849356801761

#4 Re: Програмування Arduino » Допоможіть дописати » 2016-09-17 00:40:22

NoName пише:
#include <SPI.h>
#include <SD.h>

File myFile;

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  Serial.print("Initializing SD card...");
  if (!SD.begin(4)) {
    Serial.println("initialization failed!");
    while(1);
  }
 Serial.println("initialization done.");
}

void write_data ( void )
{
	char temp [128];
	
	static int number = 0;
	String filename;
	sprintf (temp, "file_%d.txt",number);
	myFile = SD.open(temp, FILE_WRITE);
  // if the file opened okay, write to it:
  if ( myFile ) {
    number++;	
    // myFile.println("testing 1, 2, 3.");
	sprintf (temp, "testing %d,%d,%d",1,2,3);
	myFile.println (temp);
    myFile.close();  
  } else {
    // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
  }
 }


void loop() {
  // nothing happens after setup
 write_data ();
  delay (1000);
  }

Я Вас поздравлю,  железо у Вас работает , возьмите за основу этот текст  ...  и сделайте что б работало

sprintf (temp, "file_%d.txt",number);  sprintf работает в среде ардуино?

Так,дякую. Вийшло щось таке. Однак на сд карточку йде не коректно. А саме записує лише 1 секунду у файл. Тобто,якщо говорити про даний скетч,то раз в 9 секунд створюється новий файл,а інформації в ньому не за 9 секунд роботи,а лише за одну. Буду вдячний за пораду
//#include <MsTimer2.h>
#include <Timer.h>
#include <SPI.h>//
#include <SD.h>
#include <DS3231.h>
#include <Wire.h>
#include <Adafruit_BMP085.h>
Timer timer;
Timer t;
Adafruit_BMP085 bmp;
File myFile;
const uint8_t PIN_CS = 10;                         // указываем номер вывода arduino подключенного к выводу CS адаптера
DS3231 Clock;
int number = 0;

uint8_t prevMin = 0;

bool Century = false;
bool h12;
bool PM;
byte year, month, date, DoW, hour, minute, second;
long Temperature = 26, Pressure = 750, Altitude = 170;

void setup() {
  Wire.begin();// Start the I2C interface

  if (!bmp.begin()) {
    Serial.println("Could not find a valid BMP085 sensor, check wiring!");
    while (1) {}
  }

  Serial.begin(9600);// открываем последовательный порт на скорости 9600 бод
  while (!Serial) {
    ; // ожидаем соединение последовательного порта
  }

  //используем ответ инициализации, для определения работоспособности карты и адаптера
  if (!SD.begin(PIN_CS)) {                         // инициализация SD карты с указанием номера вывода CS
    Serial.println("SD-card not found"); return;   // ошибка инициализации. карта не обнаружена или не подключён (неправильно подключён) адаптер карт MicroSD
  }
  //проверяем наличие файла "iarduino.txt" на SD-карте
  // SD.exists("iarduino.txt");                   // если файл с именем "iarduino.txt" существует, то ...
  //  Serial.println("file exists");
timer.every(9000, tr); 


}
void loop() {
  int second, minute, hour, date, month, year, temperature;
  second = Clock.getSecond();
  minute = Clock.getMinute();
  hour = Clock.getHour(h12, PM);
  date = Clock.getDate();
  month = Clock.getMonth(Century);
  year = Clock.getYear();
  temperature = Clock.getTemperature();

  Serial.print("20");
  Serial.print(year, DEC);
  Serial.print('-');
  Serial.print(month, DEC);
  Serial.print('-');
  Serial.print(date, DEC);
  Serial.print(' ');
  Serial.print(hour, DEC);
  Serial.print(':');
  Serial.print(minute, DEC);
  Serial.print(':');
  Serial.print(second, DEC);
  Serial.print(' ');
  Serial.print("Temperature = ");
  Serial.print(bmp.readTemperature());
  Serial.println(" *C");
  Serial.print("Pressure = ");
  Serial.print(bmp.readPressure() / 133);
  Serial.println(" mm");
  Serial.print("Altitude = ");
  Serial.print(bmp.readAltitude());
  Serial.println(" meters");
  Serial.print("Real altitude = ");
  Serial.print(bmp.readAltitude(101600));
  Serial.println(" meters");
  Serial.println(Clock.getYear());
Serial.println(Clock.getYear());
  Serial.println();
  timer.update();

  delay(1000);

}

void tr ()
{
  String filename;
  static int number;
 
  filename = "file_";
    filename +=  number++;
    filename += ".txt";
  Serial.println(filename);

  File myFile = SD.open(filename, FILE_WRITE );
  // если файла с именем "filename " - нет, то он будет создан. |FILE_CREATE ??
  myFile.print("20");               // запись строки в открытый файл "iarduino.txt", без добавления символов перехода на новую строку.
  myFile.print(Clock.getYear(), DEC); // запись строки в открытый файл "iarduino.txt", с  добавлением символов перехода на новую строку.
  myFile.print('-');
  myFile.print(Clock.getMonth(Century), DEC);
  myFile.print('-');
  myFile.print(Clock.getDate(), DEC);
  myFile.print(' ');
  myFile.print(Clock.getHour(h12, PM), DEC);
  myFile.print(':');
  myFile.print(Clock.getMinute(), DEC);
  myFile.print(':');
  myFile.print(Clock.getSecond(), DEC);
  myFile.print(' ');
  myFile.print("Temperature= ");
  myFile.println(Temperature, DEC);
  myFile.print(' ');
  myFile.print("Altitude = ");
  myFile.print(bmp.readAltitude(101900), DEC);
  myFile.println(" meters");
  myFile.print("Pressure = ");
  myFile.print(bmp.readPressure()/133, DEC);
  myFile.println(" mm");
    myFile.close();  // закрытие файла "iarduino.txt":
}

#6 Re: Програмування Arduino » Допоможіть дописати » 2016-09-08 22:05:48

Все рівно нічого не створює. А може проблема  бути :
а)платі ардуїно
б)в бібліотеках.
в) в тому,що цей скетч займає 77% пам’яті??

NoName пише:

попробуйте что ли такой вариант

#include <Timer.h>
#include <SPI.h>//
#include <SD.h>
#include <DS3231.h>
#include <Wire.h>
#include <BMP085.h>
const uint8_t PIN_CS = 10;                         // указываем номер вывода arduino подключенного к выводу CS адаптера
File myFile;                                       // создаём переменную myFile класса File, которая будет служить "указателем" на открытый файл
Timer timer;                                    //обьявляем класс таймера
Timer t;
DS3231 Clock;    
BMP085 dps = BMP085();
bool Century=false;
bool h12;
bool PM;
byte year, month, date, DoW, hour, minute, second;
long Temperature = 0, Pressure = 0, Altitude = 40;

void setup(){
Wire.begin();// Start the I2C interface
dps.init(MODE_STANDARD, 3200, true);
  Serial.begin(9600);                              // открываем последовательный порт на скорости 9600 бод
  while(!Serial){;}                                // ожидаем соединение последовательного порта
//используем ответ инициализации, для определения работоспособности карты и адаптера
  if(!SD.begin(PIN_CS)){                           // инициализация SD карты с указанием номера вывода CS
    Serial.println("SD-card not found"); return;   // ошибка инициализации. карта не обнаружена или не подключён (неправильно подключён) адаптер карт MicroSD
  }

  timer.every(1000, write_file);               //Говорим вызывать функцию write_file каждые 60*A секунд
}
void loop() 
{
int second,minute,hour,date,month,year,temperature; 
second=Clock.getSecond();
minute=Clock.getMinute();
hour=Clock.getHour(h12, PM);
date=Clock.getDate();
month=Clock.getMonth(Century);
year=Clock.getYear();
temperature=Clock.getTemperature();
  dps.getPressure(&Pressure);
  dps.getTemperature(&Temperature);
  dps.getAltitude(&Altitude);
Serial.print("20");
Serial.print(year,DEC);
Serial.print('-');
Serial.print(month,DEC);
Serial.print('-');
Serial.print(date,DEC);
Serial.print(' ');
Serial.print(hour,DEC);
Serial.print(':');
Serial.print(minute,DEC);
Serial.print(':');
Serial.print(second,DEC);
Serial.print(' ');
Serial.print("Temperature=");
Serial.print(Temperature/10,DEC);
Serial.print(' ');
Serial.print("Pressure(mmHg):");
Serial.print(Pressure/133.3);      //Выводим давление в мм.рт ст
Serial.print(" mm ");
Serial.print(" Altitude:");
Serial.print(Altitude/103,DEC); // высота в метрах 
Serial.print('\n');
timer.update();

delay(1000);//Проверяем не пора ли вызвать функцию привязаной к таймеру
}
// открытие файла "iarduino.txt" для чтения и записи, начиная с конца файла:
void write_file()
{
	static int number;
	String filename;
	filename = "file_";
    filename += '0' + (number/100);
    filename += '0' + (number/10 )%10;
    filename += '0' + (number/1  )%10;
    filename += ".txt";
    number++;

	myFile = SD.open(filename, FILE_WRITE );  
// если файла с именем "filename " - нет, то он будет создан. |FILE_CREATE ??

myFile.print("20");               // запись строки в открытый файл "iarduino.txt", без добавления символов перехода на новую строку.
myFile.print(year,DEC); // запись строки в открытый файл "iarduino.txt", с  добавлением символов перехода на новую строку.
myFile.print('-');
myFile.print(month,DEC);
myFile.print('-');
myFile.print(date,DEC);
myFile.print(' ');
myFile.print(hour,DEC);
myFile.print(':');
myFile.print(minute,DEC);
myFile.print(':');
myFile.print(second,DEC);
myFile.print(' ');
myFile.print("Temperature= ");
myFile.println(Temperature/10,DEC); 
Serial.print(' ');
myFile.print("Pressure(mmHg):");
myFile.print(Pressure/133.3);
myFile.print(' ');
  myFile.print(' ');
myFile.print(" Altitude:");
myFile.print(Altitude/103,DEC);
delay(1000);
myFile.close();  // закрытие файла "iarduino.txt":

}

#7 Re: Програмування Arduino » Допоможіть дописати » 2016-09-05 20:20:37

vvr пише:

значение счётчика нужно сначала преобразовать в строку, и тогда уже присваивать название файла

Доброго часу доби! Вийшло наступно. Компілятор скетч приймає,помилок не видає. Однак не створює ВЗАГАЛІ  нічого на SD карточці. Можете порадити шляхи вирішення даної проблеми?

#include <Timer.h>
#include <SPI.h>//
#include <SD.h>
#include <DS3231.h>
#include <Wire.h>
#include <BMP085.h>
const uint8_t PIN_CS = 10;                         // указываем номер вывода arduino подключенного к выводу CS адаптера
File myFile;                                       // создаём переменную myFile класса File, которая будет служить "указателем" на открытый файл
File myFile2;
Timer timer;                                    //обьявляем класс таймера
Timer t;
DS3231 Clock;    
BMP085 dps = BMP085();
bool Century=false;
bool h12;
bool PM;
byte year, month, date, DoW, hour, minute, second;
long Temperature = 0, Pressure = 0, Altitude = 40;

void setup(){
Wire.begin();// Start the I2C interface
dps.init(MODE_STANDARD, 3200, true);
  Serial.begin(9600);                              // открываем последовательный порт на скорости 9600 бод
  while(!Serial){;}                                // ожидаем соединение последовательного порта
//используем ответ инициализации, для определения работоспособности карты и адаптера
  if(!SD.begin(PIN_CS)){                           // инициализация SD карты с указанием номера вывода CS
    Serial.println("SD-card not found"); return;   // ошибка инициализации. карта не обнаружена или не подключён (неправильно подключён) адаптер карт MicroSD
  }
//проверяем наличие файла "iarduino.txt" на SD-карте
  if(SD.exists("iarduino.txt")){                   // если файл с именем "iarduino.txt" существует, то ...
    Serial.println("file exists");                  
    timer.every(1000, write_file);               //Говорим вызывать функцию write_file каждые 60*A секунд
   
    
  }else{                                           // иначе ...
    Serial.println("file doesn't exist");
  }
}
void loop() {
int second,minute,hour,date,month,year,temperature; 
second=Clock.getSecond();
minute=Clock.getMinute();
hour=Clock.getHour(h12, PM);
date=Clock.getDate();
month=Clock.getMonth(Century);
year=Clock.getYear();
temperature=Clock.getTemperature();
  dps.getPressure(&Pressure);
  dps.getTemperature(&Temperature);
  dps.getAltitude(&Altitude);
Serial.print("20");
Serial.print(year,DEC);
Serial.print('-');
Serial.print(month,DEC);
Serial.print('-');
Serial.print(date,DEC);
Serial.print(' ');
Serial.print(hour,DEC);
Serial.print(':');
Serial.print(minute,DEC);
Serial.print(':');
Serial.print(second,DEC);
Serial.print(' ');
Serial.print("Temperature=");
Serial.print(Temperature/10,DEC);
Serial.print(' ');
  Serial.print("Pressure(mmHg):");
  Serial.print(Pressure/133.3);      //Выводим давление в мм.рт ст
   Serial.print(" mm ");
  Serial.print(" Altitude:");
  Serial.print(Altitude/103,DEC); // высота в метрах 
Serial.print('\n');
timer.update();

delay(1000);//Проверяем не пора ли вызвать функцию привязаной к таймеру
}
// открытие файла "iarduino.txt" для чтения и записи, начиная с конца файла:
void write_file()
{
  for(int i = 0; i<20;i++){
    String str;
    str = i + '0';
    }
myFile = SD.open("iarduino.txt"+'str', FILE_WRITE);  // если файла с именем "iarduino.txt" - нет, то он будет создан.
myFile.print("20");               // запись строки в открытый файл "iarduino.txt", без добавления символов перехода на новую строку.
myFile.print(year,DEC); // запись строки в открытый файл "iarduino.txt", с  добавлением символов перехода на новую строку.
myFile.print('-');
myFile.print(month,DEC);
myFile.print('-');
myFile.print(date,DEC);
myFile.print(' ');
myFile.print(hour,DEC);
myFile.print(':');
myFile.print(minute,DEC);
myFile.print(':');
myFile.print(second,DEC);
myFile.print(' ');
myFile.print("Temperature= ");
myFile.println(Temperature/10,DEC); 
Serial.print(' ');
myFile.print("Pressure(mmHg):");
myFile.print(Pressure/133.3);
myFile.print(' ');
  myFile.print(' ');
myFile.print(" Altitude:");
myFile.print(Altitude/103,DEC);
delay(1000);
myFile.close();  // закрытие файла "iarduino.txt":

}

#8 Re: Програмування Arduino » Допоможіть дописати » 2016-08-27 23:20:01

vvr пише:

заведите счётчик, который каждые А мин прибавляет единицу и значение этого счётчика вводите в имя нового файла

Дякую. Ви наштовхнули мене на правильне рішення. Намагався це зробити. Зрозумів шлях виконання,однак не зміг зрозуміти,як зробити так аби ім’я файла було б таке саме як поточне значення лічильника.
Буду вдячний за пояснення

#9 Re: Програмування Arduino » Допоможіть дописати » 2016-08-27 16:01:52

vvr пише:

вам каждые А мин нужно создавать новый файл с новым именем
а вы всё в один пишите

Це я вже зрозумів. Однак,як зробити так аби скетч сам змінював ім’я файла? І при цьому через кожні А хвилин змінює ім’я файла,але ж і в нього записує.
Тобто А хвилин записує у файл1,потім у файл2 і так далі.

#10 Re: Програмування Arduino » Допоможіть дописати » 2016-08-26 23:30:42

#include <Timer.h>// Тут подключаем библиотеку
#include <SPI.h>//
#include <SD.h>
#include <DS3231.h>
#include <Wire.h>
#include <BMP085.h>
#include <LiquidCrystal.h>
const uint8_t PIN_CS = 10;                         // указываем номер вывода arduino подключенного к выводу CS адаптера
File myFile;                                       // создаём переменную myFile класса File, которая будет служить "указателем" на открытый файл
File myFile2;
Timer timer;                                    //обьявляем класс таймера
DS3231 Clock;   
BMP085 dps = BMP085();
bool Century=false;
bool h12;
bool PM;
byte year, month, date, DoW, hour, minute, second;
long Temperature = 0, Pressure = 0, Altitude = 40;
int var = 0;
int vaf =0;
void setup(){
Wire.begin();// Start the I2C interface
dps.init(MODE_STANDARD, 3200, true);
  Serial.begin(9600);                              // открываем последовательный порт на скорости 9600 бод
  while(!Serial){;}                                // ожидаем соединение последовательного порта
//используем ответ инициализации, для определения работоспособности карты и адаптера
  if(!SD.begin(PIN_CS)){                           // инициализация SD карты с указанием номера вывода CS
    Serial.println("SD-card not found"); return;   // ошибка инициализации. карта не обнаружена или не подключён (неправильно подключён) адаптер карт MicroSD
  }
//проверяем наличие файла "iarduino.txt" на SD-карте
  if(SD.exists("iarduino.txt")){                   // если файл с именем "iarduino.txt" существует, то ...
    Serial.println("file exists");                 
    timer.every(60*A, write_file);               //Говорим вызывать функцию write_file каждые 60*A секунд
  }else{                                           // иначе ...
    Serial.println("file doesn't exist");
  }
}
void loop() {
int second,minute,hour,date,month,year,temperature;
second=Clock.getSecond();
minute=Clock.getMinute();
hour=Clock.getHour(h12, PM);
date=Clock.getDate();
month=Clock.getMonth(Century);
year=Clock.getYear();
temperature=Clock.getTemperature();
  dps.getPressure(&Pressure);
  dps.getTemperature(&Temperature);
  dps.getAltitude(&Altitude);

Serial.print("20");
Serial.print(year,DEC);
Serial.print('-');
Serial.print(month,DEC);
Serial.print('-');
Serial.print(date,DEC);
Serial.print(' ');
Serial.print(hour,DEC);
Serial.print(':');
Serial.print(minute,DEC);
Serial.print(':');
Serial.print(second,DEC);
Serial.print(' ');
Serial.print("Temperature=");
Serial.print(temperature);
Serial.print(' ');
  Serial.print("Pressure(mmHg):");
  Serial.print(Pressure/133.3);      //Выводим давление в мм.рт ст
   Serial.print(" mm ");
  Serial.print(" Altitude:");
  Serial.print(Altitude); // высота в метрах
Serial.print('\n');
timer.update();  //Проверяем не пора ли вызвать функцию привязаной к таймеру
}

// открытие файла "iarduino.txt" для чтения и записи, начиная с конца файла:
int write_file()
{
myFile = SD.open("iarduino.txt", FILE_WRITE);  // если файла с именем "iarduino.txt" - нет, то он будет создан.
myFile.print("20");               // запись строки в открытый файл "iarduino.txt", без добавления символов перехода на новую строку.
myFile.print(year,DEC); // запись строки в открытый файл "iarduino.txt", с  добавлением символов перехода на новую строку.
myFile.print('-');
myFile.print(month,DEC);
myFile.print('-');
myFile.print(date,DEC);
myFile.print(' ');
myFile.print(hour,DEC);
myFile.print(':');
myFile.print(minute,DEC);
myFile.print(':');
myFile.print(second,DEC);
myFile.print(' ');
myFile.print("Temperature= ");
myFile.println(temperature);
Serial.print(' ');
myFile.print("Pressure(mmHg):");
myFile.print(Pressure/133.3);
myFile.print(' ');
  myFile.print(' ');
myFile.print(" Altitude:");
myFile.print(Altitude);
delay(1000);
myFile.close();
return 0;
}  // закрытие файла "iarduino.txt":
asdpng_3342784_23069905.png
Видає таку помилку. Допоможіть будь ласка

#11 Програмування Arduino » Допоможіть дописати » 2016-08-18 23:48:06

Владисл@в
відповідей: 14

Потрібно допрацювати програму аби дані з датчика та годинника зберігалися в новий файл через кожні А хвилин. Тобто А хвилин програма працює і зберігає А хвилин своєї роботи в файл. Потім його закриває та відкриває новий для А хвилин роботи.
Ось,що є(просто зберігає всі дані в ОДИН файл):
#include <SPI.h>//
#include <SD.h>
#include <DS3231.h>
#include <Wire.h>
#include <BMP085.h>
#include <LiquidCrystal.h>
const uint8_t PIN_CS = 10;                         // указываем номер вывода arduino подключенного к выводу CS адаптера
File myFile;                                       // создаём переменную myFile класса File, которая будет служить "указателем" на открытый файл

File myFile2;

DS3231 Clock;   
BMP085 dps = BMP085();
bool Century=false;
bool h12;
bool PM;
byte year, month, date, DoW, hour, minute, second;
long Temperature = 0, Pressure = 0, Altitude = 40;
int var = 0;
int vaf =0;
void setup(){
Wire.begin();// Start the I2C interface
dps.init(MODE_STANDARD, 3200, true);

  Serial.begin(9600);                              // открываем последовательный порт на скорости 9600 бод
  while(!Serial){;}                                // ожидаем соединение последовательного порта
//используем ответ инициализации, для определения работоспособности карты и адаптера
  if(!SD.begin(PIN_CS)){                           // инициализация SD карты с указанием номера вывода CS
    Serial.println("SD-card not found"); return;   // ошибка инициализации. карта не обнаружена или не подключён (неправильно подключён) адаптер карт MicroSD
  }
//проверяем наличие файла "iarduino.txt" на SD-карте
  if(SD.exists("iarduino.txt")){                   // если файл с именем "iarduino.txt" существует, то ...
    Serial.println("file exists");
  }else{                                           // иначе ...
    Serial.println("file doesn't exist");
  }

}

void loop() {
int second,minute,hour,date,month,year,temperature;
second=Clock.getSecond();
minute=Clock.getMinute();
hour=Clock.getHour(h12, PM);
date=Clock.getDate();
month=Clock.getMonth(Century);
year=Clock.getYear();
temperature=Clock.getTemperature();
  dps.getPressure(&Pressure);
  dps.getTemperature(&Temperature);
  dps.getAltitude(&Altitude);


Serial.print("20");
Serial.print(year,DEC);
Serial.print('-');
Serial.print(month,DEC);
Serial.print('-');
Serial.print(date,DEC);
Serial.print(' ');
Serial.print(hour,DEC);
Serial.print(':');
Serial.print(minute,DEC);
Serial.print(':');
Serial.print(second,DEC);
Serial.print(' ');
Serial.print("Temperature=");
Serial.print(temperature);
Serial.print(' ');
  Serial.print("Pressure(mmHg):");
  Serial.print(Pressure/133.3);      //Выводим давление в мм.рт ст
   Serial.print(" mm ");
  Serial.print(" Altitude:");
  Serial.print(Altitude); // высота в метрах
Serial.print('\n');

// открытие файла "iarduino.txt" для чтения и записи, начиная с конца файла:

myFile = SD.open("iarduino.txt", FILE_WRITE);  // если файла с именем "iarduino.txt" - нет, то он будет создан.
myFile.print("20");               // запись строки в открытый файл "iarduino.txt", без добавления символов перехода на новую строку.
myFile.print(year,DEC); // запись строки в открытый файл "iarduino.txt", с  добавлением символов перехода на новую строку.
myFile.print('-');
myFile.print(month,DEC);
myFile.print('-');
myFile.print(date,DEC);
myFile.print(' ');
myFile.print(hour,DEC);
myFile.print(':');
myFile.print(minute,DEC);
myFile.print(':');
myFile.print(second,DEC);
myFile.print(' ');
myFile.print("Temperature= ");
myFile.println(temperature);
Serial.print(' ');
myFile.print("Pressure(mmHg):");
myFile.print(Pressure/133.3);
myFile.print(' ');
  myFile.print(' ');
myFile.print(" Altitude:");
myFile.print(Altitude);
delay(1000);
myFile.close();   // закрытие файла "iarduino.txt":
}

Підвал форуму