This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| et:arduino:book:lahendused [2017/01/16 10:02] – kaupo.raid | et:arduino:book:lahendused [2020/07/20 09:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 390: | Line 390: | ||
| === Harjutus 4.2 === | === Harjutus 4.2 === | ||
| <code c> | <code c> | ||
| + | /* | ||
| + | Nimetus: Näide #3.2 Kaugusandurite lugemine | ||
| + | Kirjeldus: Kaugusandurite lugemine | ||
| + | */ | ||
| + | #include < | ||
| + | |||
| + | // Initsialiseerime LCD koos vastavate viikude ühendamisega | ||
| + | LiquidCrystal lcd(8, 9, 4, 5, 6, 7); | ||
| + | //Määrame andurite ühendusviigud | ||
| + | const int analoogAndur = A2; | ||
| + | const int digiAndur = A3; | ||
| + | int analoogAndurVaartus, | ||
| + | |||
| + | void setup() | ||
| + | { | ||
| + | lcd.begin(16, | ||
| + | //kirjutame ekraanile selgitavad tekstid | ||
| + | lcd.print(" | ||
| + | lcd.setCursor(0, | ||
| + | lcd.print(" | ||
| + | } | ||
| + | void loop() | ||
| + | { | ||
| + | analoogAndurVaartus = analogRead(analoogAndur); | ||
| + | // https:// | ||
| + | analoogAndurVaartus = (6787/ | ||
| + | digitaalAndurVaartus = digitalRead(digiAndur); | ||
| + | lcd.setCursor(9, | ||
| + | lcd.print(analoogAndurVaartus); | ||
| + | lcd.print(" | ||
| + | lcd.setCursor(9, | ||
| + | lcd.print(digitaalAndurVaartus); | ||
| + | delay(200); // Lühike viide, et tekst ekraanil oleks loetav | ||
| + | } | ||
| </ | </ | ||
| Line 401: | Line 434: | ||
| <code c> | <code c> | ||
| + | </ | ||
| + | |||
| + | === Harjutus 5.3 === | ||
| + | <code c> | ||
| + | /* | ||
| + | Description | ||
| + | */ | ||
| + | |||
| + | |||
| + | #include " | ||
| + | |||
| + | // setup u8g object, please remove comment from one of the following constructor calls | ||
| + | // IMPORTANT NOTE: The complete list of supported devices is here: http:// | ||
| + | |||
| + | U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8 | ||
| + | |||
| + | #define KEY_NONE 0 | ||
| + | #define KEY_PREV 1 | ||
| + | #define KEY_NEXT 2 | ||
| + | #define KEY_SELECT 3 | ||
| + | #define KEY_BACK 4 | ||
| + | |||
| + | |||
| + | uint8_t uiKeyCodeFirst = KEY_NONE; | ||
| + | uint8_t uiKeyCodeSecond = KEY_NONE; | ||
| + | uint8_t uiKeyCode = KEY_NONE; | ||
| + | |||
| + | int adc_key_in; | ||
| + | int key=-1; | ||
| + | int oldkey=-1; | ||
| + | |||
| + | int selectedType = 0; | ||
| + | |||
| + | |||
| + | // Convert ADC value to key number | ||
| + | // 4 | ||
| + | // | | ||
| + | // 0 -- 1 -- 3 | ||
| + | // | | ||
| + | // 2 | ||
| + | int get_key(unsigned int input) | ||
| + | { | ||
| + | if (input < 100) return 0; | ||
| + | else if (input < 300) return 1; | ||
| + | else if (input < 500) return 2; | ||
| + | else if (input < 700) return 3; | ||
| + | else if (input < 900) return 4; | ||
| + | else return -1; | ||
| + | } | ||
| + | |||
| + | void uiStep(void) { | ||
| + | |||
| + | adc_key_in = analogRead(0); | ||
| + | key = get_key(adc_key_in); | ||
| + | if (key != oldkey) | ||
| + | { | ||
| + | delay(50); | ||
| + | adc_key_in = analogRead(0); | ||
| + | key = get_key(adc_key_in); | ||
| + | if (key != oldkey) | ||
| + | { | ||
| + | oldkey = key; | ||
| + | if (key >=0){ | ||
| + | // | ||
| + | if ( key == 0 ) | ||
| + | | ||
| + | else if ( key == 1 ) | ||
| + | | ||
| + | else if ( key == 2 ) | ||
| + | | ||
| + | else if ( key == 4 ) | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | | ||
| + | } | ||
| + | |||
| + | |||
| + | #define MENU_ITEMS 6 | ||
| + | char *menu_strings[MENU_ITEMS] = { "ITT Group OU", " | ||
| + | |||
| + | uint8_t menu_current = 0; | ||
| + | uint8_t menu_redraw_required = 0; | ||
| + | uint8_t last_key_code = KEY_NONE; | ||
| + | |||
| + | |||
| + | void drawMenu(void) { | ||
| + | uint8_t i, h; | ||
| + | u8g_uint_t w, d; | ||
| + | |||
| + | u8g.setFont(u8g_font_6x12);// | ||
| + | u8g.setFontRefHeightText(); | ||
| + | u8g.setFontPosTop(); | ||
| + | |||
| + | h = u8g.getFontAscent()-u8g.getFontDescent(); | ||
| + | w = u8g.getWidth(); | ||
| + | for( i = 0; i < MENU_ITEMS; i++ ) { | ||
| + | d = (w-u8g.getStrWidth(menu_strings[i]))/ | ||
| + | u8g.setDefaultForegroundColor(); | ||
| + | if ( i == menu_current ) { | ||
| + | if(selectedType) u8g.drawRFrame(0, | ||
| + | else{ | ||
| + | u8g.drawBox(0, | ||
| + | u8g.setDefaultBackgroundColor(); | ||
| + | } | ||
| + | // | ||
| + | } | ||
| + | u8g.drawStr(d, | ||
| + | } | ||
| + | } | ||
| + | |||
| + | void updateMenu(void) | ||
| + | { | ||
| + | switch ( uiKeyCode ) { | ||
| + | case KEY_NEXT: | ||
| + | menu_current++; | ||
| + | if ( menu_current >= MENU_ITEMS )menu_current = 0; | ||
| + | menu_redraw_required = 1; | ||
| + | break; | ||
| + | case KEY_PREV: | ||
| + | if ( menu_current == 0 )menu_current = MENU_ITEMS; | ||
| + | menu_current--; | ||
| + | menu_redraw_required = 1; | ||
| + | break; | ||
| + | case KEY_SELECT: | ||
| + | selectedType = !selectedType; | ||
| + | menu_redraw_required = 1; | ||
| + | break; | ||
| + | } | ||
| + | uiKeyCode = KEY_NONE; | ||
| + | } | ||
| + | |||
| + | |||
| + | void setup() { | ||
| + | |||
| + | u8g.setRot180();// | ||
| + | u8g.setContrast(0); | ||
| + | menu_redraw_required = 1; // force initial redraw | ||
| + | // | ||
| + | } | ||
| + | |||
| + | void loop() { | ||
| + | |||
| + | uiStep(); | ||
| + | updateMenu(); | ||
| + | |||
| + | if ( menu_redraw_required != 0 ) { | ||
| + | u8g.firstPage(); | ||
| + | do { | ||
| + | drawMenu(); | ||
| + | } while( u8g.nextPage() ); | ||
| + | menu_redraw_required = 0; | ||
| + | } | ||
| + | |||
| + | } | ||
| </ | </ | ||
| Line 407: | Line 600: | ||
| </ | </ | ||
| + | |||
| + | === Harjutus 7.1 === | ||
| + | <code c> | ||
| + | /* | ||
| + | Nimetus: Näide #7.1 Servomootor | ||
| + | Kirjeldus: Servomootori juhtimine PWM signaaliga | ||
| + | */ | ||
| + | |||
| + | // Kaasame vajalikud teegid | ||
| + | #include < | ||
| + | |||
| + | Servo mootor; | ||
| + | const int pote = A1; // määrame potentsiomeetri sisendviigu | ||
| + | const int lahedusAndur = A4; | ||
| + | |||
| + | int mootoriSuund = 1; //mootori liikumise suunda määrav muutuja (algväärtustatud paremale pöörama) | ||
| + | int servoAsend = 90; //servo hetkepositsiooni hoidev muutuja (algväärtustatud keskpositsiooni) | ||
| + | int naebObjekti; | ||
| + | |||
| + | void setup() { | ||
| + | mootor.attach(A5); | ||
| + | mootor.write(servoAsend); | ||
| + | while(digitalRead(lahedusAndur) == 1); | ||
| + | } | ||
| + | void loop() { | ||
| + | naebObjekti = digitalRead(lahedusAndur); | ||
| + | if(naebObjekti == 1){ | ||
| + | if(mootoriSuund == 1){ | ||
| + | servoAsend += 10; | ||
| + | } | ||
| + | else{ | ||
| + | servoAsend -= 10; | ||
| + | } | ||
| + | delay(50); //viide, et servo jõuaks uude positsiooni jõuda | ||
| + | } | ||
| + | else{ | ||
| + | //kui andur näeb midagi, siis mootori asend ei muutu | ||
| + | } | ||
| + | | ||
| + | if(servoAsend >=180){ | ||
| + | servoAsend = 180; | ||
| + | mootoriSuund = -1; | ||
| + | } | ||
| + | if(servoAsend <= 0){ | ||
| + | servoAsend = 0; | ||
| + | mootoriSuund = 1; | ||
| + | } | ||
| + | mootor.write(servoAsend); | ||
| + | } | ||
| + | |||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | |||