Конфликт sd.h и gsm модуля на atmega2560

vanila
Offline
Зарегистрирован: 25.08.2015

GSM модуль - Sim800L, подключен к tx2 и rx2 контактам атмеги2560

Sd модуль - обычный китайский  - чипселект к 53, остальное 50, 51 и 52 

для sd модуля соответственно использую стандартную библиотеку Sd.h

жсм мудуль - через ат команды посредсвом serial3

По отдельности все работает, но как только подключаю Sd.h и инициализирую "SD.begin(53)" начинаются какие то глюки с приемом и отправкой смс и вообще с жсм модулем, ответ от модуля приходит не тот что должен то, пустые смс отправляет вместо нужного итд итп. 

В чем может быть причина? И как исправить.

vanila
Offline
Зарегистрирован: 25.08.2015

vanila пишет:

Sim800L, подключен к tx2 и rx2

к tx3 и rx3

b707
Offline
Зарегистрирован: 26.05.2017

vanila пишет:

В чем может быть причина? И как исправить.

В кривом коде. А исправить - написать правильный.

 

Если вам не понравился мой ответ - подумайте, как вы задали вопрос.

vanila
Offline
Зарегистрирован: 25.08.2015

странно, но вот такой способ инициализации, похоже, избавляет от этой проблемы:

SD.begin();

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

vanila пишет:

странно, но вот такой способ инициализации, похоже, избавляет от этой проблемы:

SD.begin();

И это замечательно!

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

vanila пишет:

странно, но вот такой способ инициализации, похоже, избавляет от этой проблемы:

SD.begin();

Это надо сюда записать: 

 

vanila
Offline
Зарегистрирован: 25.08.2015

ЕвгенийП пишет:

И это замечательно!

Ну почти, теперь если  вынуть карточку и перезагрузить устройство, начинается вообще какой-то цирк с конями)

Опять жсм модуль перестает нормально работать, а когда приходит пакет от 433 модуля  подключенного к прерыванию на пине 2, он вообще зависает, на экране мусор и вочдог перезагружает устройство. 

Еще вчера думал что может оперативы не хватает, но вот этот код сейчас показывает 1200 

Когда на офф сайте говорят о достаточных 700

Serial.println(memoryFree());


int memoryFree()
{
   int freeValue;
   if((int)__brkval == 0)
      freeValue = ((int)&freeValue) - ((int)&__bss_end);
   else
      freeValue = ((int)&freeValue) - ((int)__brkval);
   return freeValue;
}

при этом если вынуть карту в процессе работы, все продолжает работать как надо

vanila
Offline
Зарегистрирован: 25.08.2015

DetSimen пишет:

Это надо сюда записать: 

 

рано)

b707
Offline
Зарегистрирован: 26.05.2017

vanila, как вы недогадливы, однако...

Саркастические комментарии не навели вас на мысль, что вы как-то не так вопросы задаете? В частности, какой смысл спрашивать о неправильно работающем коде, не показывая сам код?

vanila
Offline
Зарегистрирован: 25.08.2015

b707 пишет:

vanila, как вы недогадливы, однако...

Саркастические комментарии не навели вас на мысль, что вы как-то не так вопросы задаете? В частности, какой смысл спрашивать о неправильно работающем коде, не показывая сам код?

Да, я вообще не понял, что вы тем хотели сказать. 

Вообще весь код полностью надо? там 6,5к строк, если все выкладывать то сомневаюсь что кто то будет в нем разбираться, а если удалить из него все что не затрагивает данная проблема то выходит что конфликтующих сторон у меня 2:  sd и жсм модули. ну вот щас еще и радио модуль на прерывание добавился) 

и в итоге код sd модуля: 

   
#include <SPI.h>
#include <SD.h>
const int chipSelect = 53;

setup (){
    pinMode(chipSelect, OUTPUT);
 
    if (!SD.begin()) 	Serial.println(F("Карта НЕ завелась!!!"));
    else	Serial.println(F("карта завелась"));
}

 

а код gsm модуля сводится к :

Serial3.println("AT+CSQ");  // уровень сигнала

 

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

 

b707
Offline
Зарегистрирован: 26.05.2017

Соберите минимальный проект только из СД-карты и GSM модуля - но такой, чтобы он компилировался. Если проблема не ушла - выложите этот код.

Если в маленьклм коде проблем нет - начинайте добавлять обратно другие модули и смотрите, когда проблема вернется...

vanila
Offline
Зарегистрирован: 25.08.2015

b707 пишет:

Да, спасибо.
В результате, судя по всему, как обычно виновником оказался совсем не тот на кого с начало подумали, и я не про свои руки) а про висящее в воздухе прерывание для линии данных радио модуля. Ну и соответственно, видимо, библиотеке сд модуля не нравится хаотичное постоянное его срабатывание . 

При этом если подтянуть этот пин, хаотичное срабатывание заканчивается но и данные перестают приниматься. 

 

b707
Offline
Зарегистрирован: 26.05.2017

"смешались в кучу кони, люди..."

Как связана библиотека SD.h и пин радио-модуля?

Совет тот же - соберите минимальный код, демонстрирующий проблему - и выкладывайте.

vanila
Offline
Зарегистрирован: 25.08.2015

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

но в данном виде через некоторое время работы, ардуино зависает. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Это вот чего сейчас было?

Потереть сразу? Пока не началось?

vanila
Offline
Зарегистрирован: 25.08.2015

ЕвгенийП пишет:

Это вот чего сейчас было?

Потереть сразу? Пока не началось?

а што не так? 

как то не так отображается? 

У меня все красивенько)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

vanila пишет:

#include <Gyver433.h>

Вы не на тот форум обратились.

Вам сюда https://community.alexgyver.ru/

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

vanila пишет:

а што не так? 

как то не так отображается? 

А Вы правила этого форума читали? Вангую, что - нет.

Не так - нет номеров строк.

vanila пишет:

У меня все красивенько)

Уже - нет.

vanila
Offline
Зарегистрирован: 25.08.2015

ЕвгенийП пишет:

Вы не на тот форум обратились.

Вам сюда https://community.alexgyver.ru/

а что есть библа для 433 от этого форума? 

 

vanila
Offline
Зарегистрирован: 25.08.2015

ЕвгенийП пишет:

Не так - нет номеров строк.

да тут косяк. 

vanila
Offline
Зарегистрирован: 25.08.2015
#include <Arduino.h>

#include <Gyver433.h>
Gyver433_RX<2, 20> rx; // приемник

#include <SPI.h>
#include <SD.h>
const int chipSelect = 53;
char result_file_name[] = "10/24.15.22.txt";

// прототипы
String sendATCommand(String, bool);
String waitOtvet();
void read_dtchk_tepl();
void dtchk_tepl();
void sd_create(byte);
void sd_write(byte tepl, String &temp_hum_str);

void setup()
{

  attachInterrupt(0, read_dtchk_tepl, CHANGE); // приемник

  Serial3.begin(9600); // SIM800
  Serial.begin(9600);  //
  Serial.println(F("Serial Initializing..."));
  Serial.println();
  sendATCommand("AT", true);
  Serial.println(F("Качество сигнала: "));
  sendATCommand("AT+CSQ", true); // Проверка качества сигнала, диапазон значений 0-31, 31 - лучший

  // sd карта
  pinMode(chipSelect, OUTPUT);
  if (!SD.begin(chipSelect))
    Serial.println(F("Карта НЕ завелась"));
  else
    Serial.println(F("карта завелась"));
}

void loop()
{
  static int count = 0;
  if (rx.gotData()) dtchk_tepl(); // если пришел пакет
   

  delay(1000);
  count++;
  Serial.print(count);
  Serial.println(F("     -------------------------"));
  Serial.println(F("Качество сигнала: "));

  sendATCommand("AT+CSQ", true); // Проверка качества сигнала
}

String sendATCommand(String cmd, bool waiting)
{
  String respond = "";  // Для хранения результата
  Serial3.println(cmd); // Отправляем команду модулю
  if (waiting)
  {                          // Если необходимо дождаться ответа
    respond = waitOtvet();   // ждем, ответа
    Serial.println(respond); //ответ в монитор порта
  }
  return respond; // передаем ответ дальше
}

String waitOtvet()
{                                           // ожидаем ответа
  String respond = "";                      // для ответа
  unsigned long _timeout = millis() + 6000; // таймаут 6 секунд
  while (!Serial3.available() && millis() < _timeout)
  {
  } // ждем ответа 6 секунд
  // если есть ответ
  if (Serial3.available())
    respond = Serial3.readString(); // считываем
  else
    return "Timeout";

  return respond;
}

void dtchk_tepl()
{                            // если чтото получили, попали сюда
  char received_message[20]; // полученное сообщение от датчика

  char number_t_array[3];  // массив для номера теплицы
  byte number_tepl;        // номер теплицы
  char type_array[4];      // что прислали
  char temp_hum_array[10]; // для температуры и влажности с запятой

  if (rx.readData(received_message))
  { // получили сообщение
    /////// номер датчика// выдергиваем первые два символа
    for (byte i = 0; i < 2; i++)
      number_t_array[i] = received_message[i];
    // преобразуем в число
    number_tepl = atoi(number_t_array); // !!!???
    /////// что прислали 3-4-5 cимвол
    for (byte i = 0; i < 3; i++)
      type_array[i] = received_message[i + 3];

    char tah[4] = "tah"; // массив для сравнения
    char inf[4] = "inf"; // массив для сравнения

    if (!strncmp(type_array, tah, 3))
    {
      /////// температура и влажность 7-...-15 cимвол
      for (byte i = 0; i < 9; i++)
        temp_hum_array[i] = received_message[i + 7];
      String temp_hum_str = temp_hum_array;

      sd_write(number_tepl, temp_hum_str); // пишем на карту

      Serial.write(received_message);
      Serial.println(F(" --пришла темп и влжн"));
    }
    else if (!strncmp(type_array, inf, 3))
    {

      Serial.write(received_message);
      Serial.println(F(" -- инфа с датчика"));
    }
  }
}

void sd_write(byte tepl, String &temp_hum_str)
{
  sd_create(tepl); // создаем файл если его нет

  File logFile = SD.open(result_file_name, FILE_WRITE);
  if (logFile)
  {

    logFile.print("21:22:32");   // сохраняем время на  SD карту
    logFile.print(";");          //разделитель данных
    logFile.print(temp_hum_str); // сохраняем температуру на  SD карту
    logFile.println();           //конец
    logFile.close();             //закрываем файл

    Serial.print(F("↓↓↓↓↓  записали в "));
    Serial.write(result_file_name);
    Serial.println("  ↓↓↓↓↓");
  }
  else
  {
    Serial.print(F("ой, файл "));
    Serial.write(result_file_name);
    Serial.println(F("  не записывается"));
  }
}
void sd_create(byte tepl)
{

  char file_name[] = "24_15_22.txt";// имя файла
  char dir_name[] = "10"; // имя папки

  if (tepl < 10)
  {
    dir_name[0] = '0';
    dir_name[1] = tepl + '0';
  }
  else
  {
    dir_name[0] = tepl / 10 + '0';
    dir_name[1] = tepl % 10 + '0';
  }

  char dir[4];
  dir[0] = dir_name[0];
  dir[1] = dir_name[1];
  dir[2] = '/';

  strncpy(result_file_name, dir, 3);
  strcpy(result_file_name + 3, file_name);

  if (!SD.exists(result_file_name))
  {                // если файла не существует
    SD.mkdir(dir); // создаем папку
    File logFile = SD.open(result_file_name, FILE_WRITE);
    if (logFile)
    {
      logFile.println("Time;Temperature;Humidity"); //первая строка
      logFile.close();
      Serial.println("создали новый файл");
    }
    else
    {
      Serial.println("ой, файл не создался");
    }
  }
}
void read_dtchk_tepl() { rx.tickISR(); }

 

b707
Offline
Зарегистрирован: 26.05.2017

а строчки 22 и 193 не подерутся за один и тот же интеррапт?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

vanila пишет:

а что есть библа для 433 от этого форума? 

Не знаю. Я разве говорил такое?

Просто все пользователи библиотек gyverХХХ сразу отсылаются на хер профильный форум, где по этим библиотекам могут квалифицированно проконсультировать. 

vanila
Offline
Зарегистрирован: 25.08.2015

ЕвгенийП пишет:

vanila пишет:

а что есть библа для 433 от этого форума? 

Не знаю. Я разве говорил такое?

Просто все пользователи библиотек gyverХХХ сразу отсылаются на хер профильный форум, где по этим библиотекам могут квалифицированно проконсультировать. 

так если нет бблиотеки для 433 от этого форума или хотябы от офф разработчиков, а их походу нет, то выходит, что что бы я не подключил все буду посылаться на хер правильный форум? ))

vanila
Offline
Зарегистрирован: 25.08.2015

b707 пишет:

а строчки 22 и 193 не подерутся за один и тот же интеррапт?

ну хз, вроде не должен, а как это определить? 

 

vanila
Offline
Зарегистрирован: 25.08.2015
#include <Arduino.h>

#include <Gyver433.h>
Gyver433_RX<2, 20> rx; // приемник

#include <SPI.h>
#include <SD.h>
const int chipSelect = 53;
char result_file_name[] = "24_15_22.txt";

// прототипы
String sendATCommand(String, bool);
String waitOtvet();
void read_dtchk_tepl();
void dtchk_tepl();

void sd_write();

void setup()
{
  attachInterrupt(0, read_dtchk_tepl, CHANGE); // приемник

  Serial3.begin(9600); // SIM800
  Serial.begin(9600);  //
  Serial.println(F("Serial Initializing..."));

  sendATCommand("AT", true);

  // sd карта
  pinMode(chipSelect, OUTPUT);
  if (!SD.begin(chipSelect)) Serial.println(F("Карта НЕ завелась"));
  else Serial.println(F("карта завелась"));
    
}

void read_dtchk_tepl() { rx.tickISR(); }

void loop()
{
  static int count = 0;
  if (rx.gotData()) dtchk_tepl(); // если пришел пакет
  
  delay(1000);
  count++;
  sendATCommand("AT+CSQ", true); // Проверка качества сигнала
  Serial.println(count);
}

String sendATCommand(String cmd, bool waiting)
{
  String respond = "";  // Для хранения результата
  Serial3.println(cmd); // Отправляем команду модулю
  if (waiting)
  {                          // Если необходимо дождаться ответа
    respond = waitOtvet();   // ждем, ответа
    Serial.println(respond); //ответ в монитор порта
  }
  return respond; // передаем ответ дальше
}

String waitOtvet()
{                                           // ожидаем ответа
  String respond = "";                      // для ответа
  unsigned long _timeout = millis() + 6000; // таймаут 6 секунд
  while (!Serial3.available() && millis() < _timeout)
  {
  } // ждем ответа 6 секунд
  // если есть ответ
  if (Serial3.available())
    respond = Serial3.readString(); // считываем
  else
    return "Timeout";

  return respond;
}

void dtchk_tepl()
{                            // если чтото получили, попали сюда
  char received_message[20]; // полученное сообщение от датчика


  


  if (rx.readData(received_message))// получили сообщение
  { 
    Serial.write(received_message);
    sd_write(); // пишем на карту
  
  }
}//dtchk_tepl

void sd_write()
{
  File logFile = SD.open(result_file_name, FILE_WRITE);
  if (logFile)
  {
    logFile.print("21:22:32");   // сохраняем время на  SD карту
    logFile.println();           //конец
    logFile.close();             //закрываем файл
    Serial.print(F("записали в файл"));
  }
  else Serial.print(F(" файл  не записывается"));
   
}//sd_write


 

vanila
Offline
Зарегистрирован: 25.08.2015

а в таком виде уже минуту работает не виснет)

вроде ничего особо и не поменял

b707
Offline
Зарегистрирован: 26.05.2017

vanila пишет:

вроде ничего особо и не поменял

ну как же - строчку 193 с гайверовским tickISR() выкинули, а это уже много

vanila
Offline
Зарегистрирован: 25.08.2015
if(!SD.exists(result_file_name)){
  SD.mkdir("10"); // создаем каталог
}

добавил эту строчку в функцию записи в файл - зависло

b707
Offline
Зарегистрирован: 26.05.2017

vanila пишет:

так если нет бблиотеки для 433 от этого форума или хотябы от офф разработчиков, а их походу нет

ну что за вранье? - как это нет? а RCSwitch.h ?

Вот вам гайд https://robotclass.ru/tutorials/arduino-radio-433mhz/

 

vanila
Offline
Зарегистрирован: 25.08.2015

b707 пишет:

vanila пишет:

вроде ничего особо и не поменял

ну как же - строчку 193 с гайверовским tickISR() выкинули, а это уже много

не, я ее зачемто переместил просто

b707
Offline
Зарегистрирован: 26.05.2017

vanila пишет:

if(!SD.exists(result_file_name)){
  SD.mkdir("10"); // создаем каталог
}

добавил эту строчку в функцию записи в файл - зависло

ВСЕГДА ВЫКЛАДЫВАЙТЕ ПОЛНЫЙ КОД!!!

vanila
Offline
Зарегистрирован: 25.08.2015

дык это sui77 какойто, а не arduino-libraries

 
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

vanila пишет:

выходит, что что бы я не подключил все буду посылаться на хер правильный форум? ))

Вам же объяснили, что пользователи библиотек тип giverXX получают квалифицированные консультации на профильном форуме. Что-то непонятно?

vanila
Offline
Зарегистрирован: 25.08.2015
#include <Arduino.h>

#include <Gyver433.h>
Gyver433_RX<2, 20> rx; // приемник

#include <SPI.h>
#include <SD.h>
const int chipSelect = 53;
char result_file_name[] = "24_15_22.txt";

// прототипы
String sendATCommand(String, bool);
String waitOtvet();
void read_dtchk_tepl();
void dtchk_tepl();

void sd_write();

void setup()
{
  attachInterrupt(0, read_dtchk_tepl, CHANGE); // приемник

  Serial3.begin(9600); // SIM800
  Serial.begin(9600);  //
  Serial.println(F("Serial Initializing..."));

  sendATCommand("AT", true);

  // sd карта
  pinMode(chipSelect, OUTPUT);
  if (!SD.begin(chipSelect)) Serial.println(F("Карта НЕ завелась"));
  else Serial.println(F("карта завелась"));
    
}

void read_dtchk_tepl() { rx.tickISR(); }

void loop()
{
  static int count = 0;
  if (rx.gotData()) dtchk_tepl(); // если пришел пакет
  
  delay(1000);
  count++;
  sendATCommand("AT+CSQ", true); // Проверка качества сигнала
  Serial.println(count);
}

String sendATCommand(String cmd, bool waiting)
{
  String respond = "";  // Для хранения результата
  Serial3.println(cmd); // Отправляем команду модулю
  if (waiting)
  {                          // Если необходимо дождаться ответа
    respond = waitOtvet();   // ждем, ответа
    Serial.println(respond); //ответ в монитор порта
  }
  return respond; // передаем ответ дальше
}

String waitOtvet()
{                                           // ожидаем ответа
  String respond = "";                      // для ответа
  unsigned long _timeout = millis() + 6000; // таймаут 6 секунд
  while (!Serial3.available() && millis() < _timeout)
  {
  } // ждем ответа 6 секунд
  // если есть ответ
  if (Serial3.available())
    respond = Serial3.readString(); // считываем
  else
    return "Timeout";

  return respond;
}

void dtchk_tepl()
{                            // если чтото получили, попали сюда
  char received_message[20]; // полученное сообщение от датчика


  


  if (rx.readData(received_message))// получили сообщение
  { 
    Serial.write(received_message);
    sd_write(); // пишем на карту
  
  }
}//dtchk_tepl

void sd_write()
{
if(!SD.exists(result_file_name)){
  SD.mkdir("10"); // создаем каталог
}

  File logFile = SD.open(result_file_name, FILE_WRITE);
  if (logFile)
  {
    logFile.print("21:22:32");   // сохраняем время на  SD карту
    logFile.println();           //конец
    logFile.close();             //закрываем файл
    Serial.print(F("записали в файл"));
  }
  else Serial.print(F(" файл  не записывается"));
   
}//sd_write


 

vanila
Offline
Зарегистрирован: 25.08.2015

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

но если расскоментировать строчки 95 96 97 то при первой же попытке создать папку зависает

#include <Arduino.h>

#include <Gyver433.h>
Gyver433_RX<2, 20> rx; // приемник

#include <SPI.h>
#include <SD.h>
const int chipSelect = 53;
char result_file_name[] = "24_15_22.txt";

// прототипы
String sendATCommand(String, bool);
String waitOtvet();
void read_dtchk_tepl();
void dtchk_tepl();

void sd_write();

void setup()
{
  attachInterrupt(0, read_dtchk_tepl, CHANGE); // приемник

  Serial3.begin(9600); // SIM800
  Serial.begin(9600);  //
  Serial.println(F("Serial Initializing..."));

  sendATCommand("AT", true);

  // sd карта
  pinMode(chipSelect, OUTPUT);
  if (!SD.begin(chipSelect)) Serial.println(F("Карта НЕ завелась"));
  else Serial.println(F("карта завелась"));
  
}

void read_dtchk_tepl() { rx.tickISR(); }

void loop()
{
  static int count = 0;
  if (rx.gotData()) dtchk_tepl(); // если пришел пакет
  
  delay(1000);
  count++;
  sendATCommand("AT+CSQ", true); // Проверка качества сигнала
  Serial.println(count);
}

String sendATCommand(String cmd, bool waiting)
{
  String respond = "";  // Для хранения результата
  Serial3.println(cmd); // Отправляем команду модулю
  if (waiting)
  {                          // Если необходимо дождаться ответа
    respond = waitOtvet();   // ждем, ответа
    Serial.println(respond); //ответ в монитор порта
  }
  return respond; // передаем ответ дальше
}

String waitOtvet()
{                                           // ожидаем ответа
  String respond = "";                      // для ответа
  unsigned long _timeout = millis() + 6000; // таймаут 6 секунд
  while (!Serial3.available() && millis() < _timeout)
  {
  } // ждем ответа 6 секунд
  // если есть ответ
  if (Serial3.available())
    respond = Serial3.readString(); // считываем
  else
    return "Timeout";

  return respond;
}

void dtchk_tepl()
{                            // если чтото получили, попали сюда
  char received_message[20]; // полученное сообщение от датчика


  


  if (rx.readData(received_message))// получили сообщение
  { 
    Serial.write(received_message);
    sd_write(); // пишем на карту
  
  }
}//dtchk_tepl

void sd_write()
{
// if(!SD.exists(result_file_name)){
//   SD.mkdir("20"); // создаем каталог
// }

  File logFile = SD.open(result_file_name, FILE_WRITE);
  if (logFile)
  {
    logFile.print("21:22:32");   // сохраняем время на  SD карту
    logFile.println();           //конец
    logFile.close();             //закрываем файл
    Serial.print(F("записали в файл"));
  }
  else Serial.print(F(" файл  не записывается"));
   
}//sd_write


 

vanila
Offline
Зарегистрирован: 25.08.2015

зависает при первой попытке создать файл если карту вынуть а если карта вставлена то все работает

b707
Offline
Зарегистрирован: 26.05.2017

vanila пишет:

дык это sui77 какойто, а не arduino-libraries

а когда вы берете библиотеки от Гайвера - вас это не смущает?То что это "какой-то гайвер"  а не ардуино?
 
На самом деле не важно, прописана библиотека в списке ардуино или нет, почти все библиотеки для ардуино писаны пользователями, а не фирмой. И библиотеки надо отличать не потому, "от ардуино" они или нет, а по тому, какой там код. Бывают библиотеки хорошие, проверенные, например как эта RCSwitch.h. которая является самом популярной либой для радио 433 МГц. А бывают библиотеки "не очень" или вообще откровенная дрянь. Гайверовские - в основном из таких.
b707
Offline
Зарегистрирован: 26.05.2017

vanila пишет:

зависает при первой попытке создать файл если карту вынуть а если карта вставлена то все работает

Вы пытаетесь создать файл, вынув карту?  в своем ли вы уме?

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

 

vanila
Offline
Зарегистрирован: 25.08.2015

b707 пишет:

vanila пишет:

дык это sui77 какойто, а не arduino-libraries

а когда вы берете библиотеки от Гайвера - вас это не смущает?То что это "какой-то гайвер"  а не ардуино?
 
На самом деле не важно, прописана библиотека в списке ардуино или нет, почти все библиотеки для ардуино писаны пользователями, а не фирмой. И библиотеки надо отличать не потому, "от ардуино" они или нет, а по тому, какой там код. Бывают библиотеки хорошие, проверенные, например как эта RCSwitch.h. которая является самом популярной либой для радио 433 МГц. А бывают библиотеки "не очень" или вообще откровенная дрянь. Гайверовские - в основном из таких.

тогда вранье это вот это)

b707 пишет:

ну что за вранье? - как это нет? а RCSwitch.h ?

меня то как раз не смущает, что этот немецкий камбоджиец что гайвер. разница не большая. 

 

vanila
Offline
Зарегистрирован: 25.08.2015

b707 пишет:

vanila пишет:

зависает при первой попытке создать файл если карту вынуть а если карта вставлена то все работает

Вы пытаетесь создать файл, вынув карту?  в своем ли вы уме?

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

 

карта вынута, стартую все заново

так эта функция должна вернуть false если каталог не создался. 

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

инициализировать занового понятно, но не зависнуть же нафик дожна?)

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

vanila пишет:

тогда вранье это вот это)

Вы уже настолько прокачали свой уровень, что можете квалифицированно оценивать качество библиотек?

vanila
Offline
Зарегистрирован: 25.08.2015

ЕвгенийП пишет:

vanila пишет:

тогда вранье это вот это)

Вы уже настолько прокачали свой уровень, что можете квалифицированно оценивать качество библиотек?

отнюдь.

но читать и понимать написанное я все еще не разучился)

b707
Offline
Зарегистрирован: 26.05.2017

vanila пишет:

карта вынута, стартую все заново

так эта функция должна вернуть false если каталог не создался. 

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

инициализировать занового понятно, но не зависнуть же нафик дожна?)

 

значит версия о влиянии радио на СД-карту уже отставлена? - тогда сделайте скетч с одной только сдкартой и проверьте

vanila
Offline
Зарегистрирован: 25.08.2015

b707 пишет:

Вот вам гайд https://robotclass.ru/tutorials/arduino-radio-433mhz/

пробежался немного, у гайвера она конечно поудобнее) 

а эта на аттини85 заведется? 

если в ближайшее время проблема не решится попробую с этой библиотекой переписать

b707
Offline
Зарегистрирован: 26.05.2017

vanila пишет:

пробежался немного, у гайвера она конечно поудобнее)

вас никто не заставляет отказывать от гайвера. Только вопросы тогда будете задавать у него на форуме. (оно может и к лучшему...)

vanila
Offline
Зарегистрирован: 25.08.2015

b707 пишет:

vanila пишет:

пробежался немного, у гайвера она конечно поудобнее)

вас никто не заставляет отказывать от гайвера. Только вопросы тогда будете задавать у него на форуме. (оно может и к лучшему...)

а если та не заработает, то к камбоджийцу, понял)

b707
Offline
Зарегистрирован: 26.05.2017

vanila пишет:

а если эта не заработает, то к камбоджийцу, понял)

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

vanila
Offline
Зарегистрирован: 25.08.2015

b707 пишет:

vanila пишет:

а если эта не заработает, то к камбоджийцу, понял)

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

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

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

vanila
Offline
Зарегистрирован: 25.08.2015

а на контрл-а + делит и все заново, еще решиться надо, вот вы меня и подтолкнули, уже какая никакая а польза)

b707
Offline
Зарегистрирован: 26.05.2017

ну так что, продолжим? - если оставить в скетче ТОЛЬКО СД-карт - виснет при создании каталога без карты?