Не могу разобраться, Счетчик кликов с записью на sd-карту лог файла csv

Тема в разделе "Arduino & Shields", создана пользователем Alex_PCB, 2 ноя 2017.

  1. Alex_PCB

    Alex_PCB Нерд

    Вроде все есть, но не работает, и код стал огромный по длинне. Помогите что за ошибка на этот раз

    exit status 1
    lvalue required as left operand of assignment
    Код (C++):

    #include <Wire.h>
    // Подключаем библиотеку Wire для работы с I2C устройствами, в данном случае с платой
    #include "RTClib.h"
    // Подключаем библиотеку RTClib
    #include <SD.h>
    // Подключаем библиотеку SD для работы с платой расширения, оснащенной SD-слотом

    Запись
    #define CS_PIN 4                                           // Контакт выбора
                                                                // Примечание: если вы используете Arduino Ethernet SD shiled
                                                                // необходимо изменить номер контакта на 4.
                                                                // Если ваша плата расширения использует другой контакт
                                                                // вам необходимо его изменить на правильный.  
    int refresh_rate = 5000;                                    // Скорость опроса по умолчанию 5 сек.
    RTC_DS1307 RTC;                                             // Объявляем RTC объект


    String year, month, day, hour, minute, second, time, date;  // Объявляем строковые переменный для хранения даты и времени


    int yearEEPROM1,yearEEPROM2, yearREAD1, yearREAD2, year2, day2, hour2, minute2, second2;
    int f = 3; //пин, к которому подключена кнопка ответсвенная за наличие microSD
    int c = 0; //для логики
    int i = 0; //последний не записанный бит
    int b = 0; //поседний считанный бит
    int button = 2;// пин, к которому подключена кнопка.
    int kolbutton = 0; //счетчик кнопки
    int kolbuttonER;
    int kolbut;
    String dataString;


    void setup()
    {
      Serial.begin(9600);                                       // Инициализация последовательного соединения на скорости 9600 бод
      Serial.println(F("Initializing Card"));                  // Распечатываем в мониторе последовательного порта "Initializing Card"("Инициализация карты")
        Wire.begin();                                            // Инициализация шины I2C                    
      RTC.begin(); // Инициализация библиотеки RTC
     
      pinMode(CS_PIN, OUTPUT);                                 // Определяем CS(контакт выбора) контакт как выход
     

     
      // Если микросхема RTC не запущена, то записываем данные часов компьютера при компиляции в RTC
      if (! RTC.isrunning())
      {
        Serial.println(F("RTC is NOT running!"));               // Распечатываем в мониторе последовательного порта "RTC is NOT running!"("Микросхема RTC не запущена!")
        RTC.adjust(DateTime(__DATE__, __TIME__));
      }
      // Инициализация SD-карты
      if (!SD.begin(CS_PIN))
      {
        Serial.println(F("Card Failure"));                      // Распечатываем в мониторе последовательного порта "Card Failure"("Сбой подключения к SD-карте")
        return;                                                 // Останавливаем выполнение программы
      }
      Serial.println(F("Card Ready"));                           // Распечатываем в мониторе последовательного порта "Card Ready"("Карта готова к работе")
      File commandFile = SD.open("speed.txt");
      if (commandFile)
      {
         Serial.println(F("Reading Command File"));             // Распечатываем в мониторе последовательного порта "Reading Command File"("Чтение конфигурационного файла")
         while(commandFile.available())
         {
           refresh_rate = commandFile.parseInt();
         }
         Serial.print(F("Refresh Rate = "));                     // Распечатываем в мониторе последовательного порта "Refresh Rate = " ("Частота обновления = ")
         Serial.print(F(refresh_rate));                          // Распечатываем в мониторе последовательного порта значение переменной refresh_rate
         Serial.println(F("ms"));                                 // Распечатываем в мониторе последовательного порта "ms"("мс.")
         commandFile.close();                                    // Закрываем файл
      }
      else
      {
        Serial.println(F("Could not read command file."));       // Распечатываем в мониторе последовательного порта "Could not read command file."("Не удалось прочитать конфигурационный файл")
        return;                                                 // Останавливаем выполнение программы
      }
       // Открываем файл и создаем заголовки
      File dataFile = SD.open("log.csv", FILE_WRITE);
      if (dataFile)
      {
        dataFile.println(F("\nNew Log Started!"));
        dataFile.println(F("Date,Time,Phrase"));
        dataFile.close();                                        // Внимание! Данные не будут записаны, пока вы не закроете соединение!
        // Распечатываем в мониторе последовательного порта те же данные для отладки
        Serial.println(F("\nNew Log Started!"));                 // Распечатываем в мониторе последовательного порта "\nNew Log Started!"("Новый лог начат")
        Serial.println(F("Date,Time,Phrase"));                    // Распечатываем в мониторе последовательного порта "Date,Time,Phrase"
      }
      else
      {
        Serial.println(F("Couldn't open log file"));             // Распечатываем в мониторе последовательного порта "Couldn't open log file"("Не удалось открыть файл журнала")
      }
    }
    void loop()
    {
    // Получаем текущую дату и время и сохраняем в строковых переменных
    DateTime now = RTC.now();
    year = int(now.year(), DEC);
    day = int(now.day(), DEC);
    hour = int(now.hour(), DEC);
    minute = int(now.minute(), DEC);
    second = int(now.second(), DEC);
    if (digitalRead(button) = 1)
    {
      kolbutton = kolbutton + 1;
    }
    if(c==2)
    {
      c = 0;
    }
    if(digitalRead(f)==1)
    {
      c = c+1;
    }
    if(c==1 & hour==23 & minute == 59 & second == 59){
    yearEEPROM1 = year/10;
    yearEEPROM2 = year - (yearEEPROM1*10);
    EEPROM.write(i, yearEEPROM1);
    i = i+1;
    EEPROM.write(i, yearEEPROM2);
    i=i+1;
    EEPROM.write(i, day);
    i=i+1;
    EEPROM.write(i, hour);
    i=i+1;
    EEPROM.write(i, minute);
    i=i+1;
    EEPROM.write(i, second);
    i=i+1;
    EEPROM.write(i, kolbutton);
    i=i+1;
    k=k+1;
    }
    if(c==0){
      while (b >= 0){
      b = i;
      yearREAD1 =EEPROM.read(b-6);
      yearREAD2 =EEPROM.read(b+1);
      year2 = yearREAD1*10 + yearREAD2;
      day2 = EEPROM.read(b+1);
      hour2 = EEPROM.read(b+1);
      minute2 = EEPROM.read(b+1);
      second2 = EEPROM.read(b+1);
      kolbuttonER = EEPROM.read(b+1);
      b = b-13;
      year = String(year2, DEC);
      day = String(day2, DEC);
      hour = String(hour2, DEC);
      minute = String(minute2, DEC);
      second = String(second2, DEC);
      kolbut = String(kolbutton, DEC);
      date = year + "/" + month + "/" + day;
      time = hour + ":" + minute + ":" + second;
      dataString = "Hello World!";
      File dataFile = SD.open("log.csv", FILE_WRITE);
      if (dataFile)
      {
        dataFile.print(date);
        dataFile.print(F(","));
        dataFile.print(time);
        dataFile.print(F(","));
        dataFile.println(dataString);
        dataFile.println(kolbut);
        dataFile.close();                                          // Внимание! Данные не будут записаны, пока вы не закроете соединение!
        // Распечатываем в мониторе последовательного порта те же данные для отладки
        Serial.print(date);
        Serial.print(F(","));
        Serial.print(time);
        Serial.print(F(","));
        Serial.println(dataString);
      }
      else
      {
        Serial.println(F("Couldn't open log file"));             // Распечатываем в мониторе последовательного порта "Couldn't open log file"("Не удалось открыть файл журнала")
      }
      delay(refresh_rate);                                       // Задержка длительностью refresh_rate
    }
    //доп начало
    c=0;
    // доп конец
      }

    //Функция обновления дисплея
    //Вывод значения счетчика на дисплей
    void DispUpdate(void)
    {
      int intValue = Counter;
      int divValue;
     
      for(int i = 3; i >= 0; i --)
      {
        divValue = intValue % 10;
        intValue = intValue / 10;
       
        CountDisp[i] = divValue;
      }
      tm1637.display(CountDisp);
    }
     
     
  2. vvr

    vvr Инженерище

    У ВАС ОШИБОК ЦЕЛАЯ ПРОСТЫНЯ.
    скобки
    нет библиотеки для дисплея
    и куча других.

    начните с простых примеров
    потом усложняйте
     
    Кириллstrelok нравится это.
  3. DIYMan

    DIYMan Guest

    Двойное равно вместо одинарного надо.
     
    Кириллstrelok нравится это.
  4. NikitOS

    NikitOS Король шутов Администратор

    Что за запись?Если это комментарий то почему без '//'?
     
    Кириллstrelok нравится это.
  5. yzh500

    yzh500 Гик

    Этот человек кинул после получения кода от нас. Наш скетч у него видимо заработал.
     
    Кириллstrelok нравится это.
  6. DIYMan

    DIYMan Guest

    Дык надо ж утром деньги, а вечером - стулья ;)
     
  7. yzh500

    yzh500 Гик

    Надеемся на честность, работаем по постоплате :)
     
    Кириллstrelok нравится это.
  8. DIYMan

    DIYMan Guest

    Ничо, это пройдёт ;)
     
    Кириллstrelok нравится это.
  9. Alex_PCB

    Alex_PCB Нерд

    Просто я как работодатель, сталкиваюсь с таким отношением впервые.
    Мы же отписались, если сможете подцепить код для связи "семисегментным экраном", то мы готовы работать. Вы не смогли, смог другой. Сейчас какой то код отправляете, куча писем от вас.
    Предоплата конечно же нужна, обязательно! . Пусть даже 500 руб, а после : по факту работы 40 000 и больше.
     
  10. yzh500

    yzh500 Гик

    Вы сказали про любой дисплей, мы подцепили жк lcd1602, после этого от вас ни одного сообщения.
    А тот человек который вам прогает, ничего не знает о программировании, судя по его коду. А мы потратили время, отладили - вам ни о чем не надо больше думать кроме как загрузить сктеч.
    P.S.: я не думаю, что вы работодатель(серьезный по крайней мере), если так себя ведете: не предупреждаете, что вам больше не нужна наша помощь, а потом берете наш скетч и не платите за него. Не имею привычки придираться к образованию, стараюсь понимать о чем говорит человек. В вашем случае, я вообще не понимаю что вы пытаетесь сказать :)
     
    Кириллstrelok нравится это.