• Многозадачная работа допускает совершение нескольких ошибок одновременно.

Измерение освещенности

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

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

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

Данные ежеминутно записываются в файл формата CSV, который легко открывается в MS Excel для просмотра значений или для построения графиков. Программа написана так, чтобы большую часть времени файл данных было свободен: его можно скопировать на компьютер в любой момент без остановки работы программы.

Вы можете скопировать указанный ниже код программы в IDE MS Small Basic, подключить блок EV3 и запустить. Программа разработана для автономной работы блока — без подключения к компьютеру. Сама программа и итоговый файл данных (в данном случае) должны располагаться на Flash карте SD, установленной в блок EV3. Вы можете изменить путь записи файла, тем самым позволив программе работать непосредственно во встроенной памяти блока.

EV3.SetLEDColor("OFF", "NORMAL")  ' отключить подсветку
Port = 0

For i = 1 To 4 ' найти датчик по портам: цикл от 1 до 4
  If Sensor.GetType(i) = 29 Then ' 29 - код цветосветового датчика
    Port = i
  EndIf
EndFor

If Port = 0 Then '  если не нашли датчик, начать мигать красным, пищать, и вывести  на экран "датчик не обнаружен"
  EV3.SetLEDColor("RED", "PULSE")  ' включить подсветку
  Speaker.Note(100,"B7",1000) ' Пищим
  LCD.Clear()
  LCD.Text(1, 10, 60, 1, "SENSOR NOT FOUND!!!") ' Выводим
  Program.Delay(3000)
  Program.End() ' завершаем работу
EndIf

Sensor.SetMode(Port, 1) ' инициализируем дачик
ffname = "l_" + Math.GetRandomNumber(100000) + ".csv" '  файл со случайным числом в имени - для нового эксперимента 
fname = "SD_Card/Light/" + ffname '  полный путь

While "True"' цикл бесконечный
  data = Sensor.ReadPercent(Port)
  LCD.Clear()' экран почистить
  LCD.Text(1,1,50,1,"FileName: " + ffname)' выводим имя файла
  LCD.Text(1,1,70,1,"Light: " + data + "%")' вывести на экран данные
  LCD.Text(1,1,90,1,"Bat: " + EV3.BatteryLevel + "%")' вывести на экран
  fiden = EV3File.OpenAppend(fname) ' открыть файл 
  EV3File.WriteLine(fiden, Math.Floor(EV3.Time/60000) + ";" + data)' записать
  EV3File.Close(fiden)' закрыть файл
  Program.Delay(60000)' пауза - 1  минута
EndWhile ' конец цикла

Поделиться: