Реалізація практичної частини на Arduino 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Реалізація практичної частини на Arduino



Приложение №2 Текст программы.

// include the library code:#include <LiquidCrystal.h>#include "OneWire.h"#include <MsTimer2.h>OneWire ds(3); // on pin 10 (a 4.7K resistor is necessary)// initialize the library with the numbers of the interface pins LiquidCrystal lcd(8, 9, 4, 5, 6, 7);///////////menu///////////// int selectKey=0; int depthMenu=0; int selectingMenu=1;//////------cooler int countMenuSpeedCuuler; int speedCooler=255;/////////////////////////// int i=0; int pinCooler=10; int countMenu=1; int pinLed=A1; ///////cooler///// int coolrPin; int countMenuCuuler=1; int hightTemperature=30; int lowTemperatura=20; float celsius; boolean updateTemperature=false; ////////////////// int coolerMenuId=0; int coolerPort=2;void setup() { //initial main menu pinMode(pinCooler, OUTPUT); pinMode(pinLed, OUTPUT); lcd.begin(16, 2); lcd.setCursor(0,0); lcd.print("---Main menu----"); lcd.setCursor(0,1); lcd.print("1.set t* diapazon");} void loop() { int x; x = analogRead (0); ////////////////////////////////////////////////////////////////////_RIGHT_/////////////////////////////////////////////////////////////////// if (x < 60) { if(depthMenu==1&&countMenuCuuler==1){ hightTemperature++; crateMenuCooler(); } if(depthMenu==1&&countMenuCuuler==2){ lowTemperatura++; crateMenuCooler(); }//////////////////////////////////speed cooler///////////if(depthMenu==3&&countMenuSpeedCuuler==3){ ///////При свиборі пункта меню із швидкістю блокується усі перемінні,countMenuSpeedCuuler надається ключ по якому усі дії відбуваються if(speedCooler<255){ speedCooler= speedCooler+5; } //////лише із перемінними які відносяться до даного пункта меню crateMenuSpeedCool(); ////// } //////////////////////////////////speed cooler/////////// } ////////////////////////////////////////////////////////////////////_UP_////////////////////////////////////////////////////////////////////////// else if (x < 200) { //up if(depthMenu==0){ menuSelect(--countMenu); } if(depthMenu==1){ countMenuCuuler=1; crateMenuCooler(); } } ///////////////////////////////////////////////////////////////////_DOWN_//////////////////////////////////////////////////////////////////// else if (x < 400){ //down/ if(depthMenu==0){ menuSelect(++countMenu); } if(depthMenu==1){ countMenuCuuler=2; crateMenuCooler(); } } ///////////////////////////////////////////////////////////////_LEFT_/////////////////////////////////////////////////////////////////////////// else if (x < 600){ if(!depthMenu<1){ } if(depthMenu==1&&countMenuCuuler==1){ hightTemperature--; crateMenuCooler(); } if(depthMenu==1&&countMenuCuuler==2){ lowTemperatura--; crateMenuCooler(); } //////////////////////////////////speed cooler///////////if(depthMenu==3&&countMenuSpeedCuuler==3){ ///////При свиборі пункта меню із швидкістю блокується усі перемінні,countMenuSpeedCuuler надається ключ по якому усі дії відбуваються speedCooler-=5; //////лише із перемінними які відносяться до даного пункта меню crateMenuSpeedCool(); } //////////////////////////////////speed cooler/////////// } ////////////////////////////////////////////////////////////////_SELECT_///////////////////////////////////////////////////////////// else if (x < 800){ //selectswitch(selectingMenu){ case 1:crateMenuCooler();//createdMenuCooler selectKey++; depthMenu=1; break; case 2:crateMenuSpeedCool(); selectKey++; depthMenu=3; if(selectKey==2){ digitalWrite(pinCooler, LOW); clearLCD(3); } break case 3:createStartInfo(); selectKey++; depthMenu=2; if(selectKey==2){ MsTimer2::stop(); clearLCD(3); } break; } if(selectKey==2){ depthMenu=0; selectKey=0; menuSelect(1); lcd.setCursor(0,0); lcd.print("---Main menu----"); } } } void menuSelect(int downCount){ lcd.setCursor(0,1); delay(300); if(countMenu<1){ countMenu=3; downCount=3; }else if(countMenu>3){ countMenu=1; downCount=1; } switch(downCount){ case 1:lcd.print("1.set t' diapazon"); selectingMenu=1; break; case 2:lcd.print("2.set speed cool"); selectingMenu=2; break; case 3:lcd.print("3.start"); selectingMenu=3; } lcd.print(" "); }void crateMenuCooler(){ delay(300); clearLCD(3); depthMenu=1; lcd.setCursor(0,0); lcd.print("1. t* diapazon"); lcd.setCursor(0,1); if(countMenuCuuler==1){ lcd.print("High t*: "); lcd.print(hightTemperature); lcd.print(" T"); } if(countMenuCuuler==2){ lcd.print("Low t*: "); lcd.print(lowTemperatura); lcd.print(" T"); }; } void crateMenuSpeedCool(){ delay(300); clearLCD(3); depthMenu=3; lcd.setCursor(0,0); lcd.print("2.speed cooler"); lcd.setCursor(0,1); countMenuSpeedCuuler=3; lcd.print("speed: "); lcd.print(speedCooler); lcd.print(" rpm"); analogWrite(pinCooler, speedCooler); };void createStartInfo(){ delay(300); clearLCD(3); depthMenu=4; lcd.setCursor(0,0); lcd.print("3.--about info--"); lcd.setCursor(0,1); updateTemperature=true; MsTimer2::set(100, loadTemperature); // 500ms period MsTimer2::start(); lcd.print("L:"); lcd.print(lowTemperatura); lcd.print("T:"); lcd.print(celsius); lcd.print("H:"); lcd.print(hightTemperature); if(hightTemperature<celsius){ analogWrite(pinCooler, speedCooler); }else if(celsius<hightTemperature){ digitalWrite(pinCooler, LOW); } if(celsius<lowTemperatura){ digitalWrite(pinLed,HIGH);} else if(celsius>lowTemperatura){ digitalWrite(pinLed,LOW);} } void clearLCD(int i){ switch(i){ case 1: lcd.setCursor(0,0); lcd.print(" "); break; case 2: lcd.setCursor(0,1); lcd.print(" "); break; case 3: lcd.setCursor(0,0); lcd.print(" "); lcd.setCursor(0,1); lcd.print(" "); break; } } void loadTemperature(){ byte i; byte present = 0; byte type_s; byte data[12]; byte addr[8]; if (!ds.search(addr)) { ds.reset_search(); delay(250); return; } ds.reset(); ds.select(addr); ds.write(0x44, 1); // start conversion, with parasite power on at the end delay(1000); // maybe 750ms is enough, maybe not // we might do a ds.depower() here, but the reset will take care of it. present = ds.reset(); ds.select(addr); ds.write(0xBE); // Read Scratchpad for (i = 0; i < 9; i++) { // we need 9 bytes data[i] = ds.read(); } // Convert the data to actual temperature // because the result is a 16 bit signed integer, it should // be stored to an "int16_t" type, which is always 16 bits // even when compiled on a 32 bit processor. int16_t raw = (data[1] << 8) | data[0]; if (type_s) { raw = raw << 3; // 9 bit resolution default if (data[7] == 0x10) { // "count remain" gives full 12 bit resolution raw = (raw & 0xFFF0) + 12 - data[6]; } } else { byte cfg = (data[4] & 0x60); // at lower res, the low bits are undefined, so let's zero them if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms //// default is 12 bit resolution, 750 ms conversion time } celsius = (float)raw / 16.0; if(updateTemperature==true){ createStartInfo(); } }

 


Приложение №2 Блок-схема

 

 

 

 

Граф

 

 

Состояния:

a1 – Начало программы

a2 – Переход на верхнее меню

а3 – Переход на нижнее меню

а4 – Выбор меню

а5 – Находимся на меню №3

а6 – Находимся на меню №1

а7 – Переход на верхнее подменю

а8 – Переход на нижнее подменю

а9 – Находимся в подменю №2

а10 – Находимся в подменю №1

Условия:

Х1 – Если нажата кнопка вверх

Х2 – Если нажата кнопка вниз

Х3 – Если нажата кнопка выбора

Х4 – Если нажата кнопка сброса

Х5 – Если счётчик меню меньше 1

Х6 – Если счётчик меню больше 3

Х7 – Если кнопка выбора нажата больше одного раза

Х8 – Если нажата кнопка вверх в подменю

Х9 – Если нажата кнопка вниз в подменю

Х10 – Если счётчик подменю меньше 1

Х11 – Если счётчик подменю больше 2

 



Поделиться:


Последнее изменение этой страницы: 2016-08-01; просмотров: 128; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.116.40.47 (0.008 с.)