Показано с 1 по 10 из 18

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #6
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    55
    Сообщений
    13,381
    Вес репутации
    10

    По умолчанию Re: Arduino учебный курс для начинающих

    Цитата Сообщение от ashu Посмотреть сообщение
    Как пример решения через сохранение значения taho в EEPROM - при отключении и подключении ПК значение taho не обнуляется, а продолжает увеличиваться дальше.

    Код:
    #include <EEPROM.h>
    int test;
    int test2;
    int prev2;
    unsigned long time;
    unsigned long ptime;
    unsigned long taho; // количество импульсов
    unsigned int freq; // частота импульсов
    unsigned long stamp; // период измерения
    unsigned long byte1;
    byte byte2;
    int onoff = 0;
    void setup()
    {
      Serial.begin(115200); // настроить скорость com порта
      pinMode(7, INPUT); // 7ой порт переключаем на ввод данных
      ptime = millis();
      test = 0;
      test2 = 0;
      prev2 = 0;
      taho = 0;
      freq = 0;
      stamp = 0;
      // читаем из EEPROM
      byte2 = EEPROM.read(3);
      byte1 = byte2;
      byte1 = byte1 << 8;
      byte2 = EEPROM.read(2);
      byte1 = byte1 + byte2;
      byte1 = byte1 << 8;
      byte2 = EEPROM.read(1);
      byte1 = byte1 + byte2;
      byte1 = byte1 << 8;
      byte2 = EEPROM.read(0);
      taho = byte1 + byte2;
    }
    void loop()
    {
      test = analogRead(0); //прочитать с аналогового пина(0)
      test2 = digitalRead(7); // читаем уровень цифрового порта(7)
      if(test2 != prev2) {
        prev2 = test2;
        if(test2 = HIGH) {
          freq++;
          taho++;
          // сразу записываем в EEPROM
          byte1 = taho;
          byte2 = lowByte(byte1);
          EEPROM.write(0, byte2);
          byte1 = byte1 >> 8;
          byte2 = lowByte(byte1);
          EEPROM.write(1, byte2);
          byte1 = byte1 >> 8;
          byte2 = lowByte(byte1);
          EEPROM.write(2, byte2);
          byte1 = byte1 >> 8;
          byte2 = lowByte(byte1);
          EEPROM.write(3, byte2);
        }
      }
      stamp = millis();
      if(stamp > ptime + 500 || stamp < ptime) {
        ptime = stamp;
        Serial.print("TimeStamp: ");
        Serial.print(ptime, DEC);
        Serial.print(", Gasoile: ");
        Serial.print(test/4, DEC); // отправить значение компьютеру
        Serial.print(", Tahometer: ");
        Serial.print(taho, DEC);
        Serial.print(", Speed freq: ");
        Serial.println(freq, DEC);
        freq = 0;
        // Помигаем светодиодом в подтверждение работы микропрограммы
        if(onoff != 1) {
          digitalWrite(13, HIGH);
          onoff = 1;
        } else {
          digitalWrite(13, LOW);
          onoff = 0;
        }
      }
    }
    у EEPROM ограниченое число циклов записи, так что не забывай об этом , ты пишешь в него в цикле , он долго так не проживет. Может быть как нибудь с массивом попробовать а в EPROM писать 1 раз в минуту или после определеного расстояния.
    Может отдельную тему создать по данному проекту ?
    Думаю что многим пригодится.
    Последний раз редактировалось Chip; 13.09.2009 в 03:49.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •