Kasulikud koodijupid on abiks õpetajale erinevate ülesannete lahendusena või täiendavate näidetena. Koodinäited on täisprogrammid, mis tähendab, et kopeerides konkreetse näite programmeerimiskeskkonda, saab selle kompileerida ja kontrollerisse laadida. Tähele tuleks panna, millised moodulid on konkreetse näite juures kasutusel ja millistesse viikudesse on parasjagu mingi seade (mootor, andur, jne) ühendatud.
// Näitekood käib läbi kõik kuni 255 erinevat LCD sümbolit // ja kuvab need koos LCD koodiga ekraanile // Riistvara: Kontrollerplaat, Kasutajaliidese plaat, Anduriplaat // Autor: Raivo Sell 2011 #include <stdio.h> #include <homelab/delay.h> #include <homelab/module/lcd_gfx.h> // // Põhiprogramm // int main(void) { signed short number=0; char text[16]; // LCD ekraani seadistamine lcd_gfx_init(); lcd_gfx_clear(); // Taustavalgustuse tööle lülitamine lcd_gfx_backlight(true); // Programmi nime kuvamine lcd_gfx_goto_char_xy(1, 1); lcd_gfx_write_string("Charecter map"); // Lõputu tsükkel while (true) { sprintf(text, "%i - %c ", number, number); // Teksti kuvamine LCD teise rea alguses lcd_gfx_goto_char_xy(1, 2); lcd_gfx_write_string(text); number++; sw_delay_ms(500); } }
// Potentsiomeetriga märgi valimine // Riistvara: Kontrollerplaat, Kasutajaliidese plaat, Anduriplaat // Autor: Raivo Sell 2011 #include <stdio.h> #include <homelab/adc.h> #include <homelab/module/lcd_gfx.h> // // Põhiprogramm // int main(void) { unsigned short value; char text[16]; // LCD ekraani seadistamine lcd_gfx_init(); lcd_gfx_clear(); // Taustavalgustuse tööle lülitamine lcd_gfx_backlight(true); // Programmi nime kuvamine lcd_gfx_goto_char_xy(1, 1); lcd_gfx_write_string("Pote tekst"); // ADC muunduri seadistamine adc_init(ADC_REF_AVCC, ADC_PRESCALE_8); // Lõputu tsükkel while (true) { value = adc_get_average_value(3, 4); value=value/10+25; sprintf(text, "%i - %c ", value, value); // Teksti kuvamine LCD teise rea alguses lcd_gfx_goto_char_xy(1, 2); lcd_gfx_write_string(text); } }
// // 7-segmendilise indikaatori näidisprogrammi täiendus // Kasutatakse mooduliga jagamist, ehk segmendil näidatakse // ainult jagamise jääki. Nii on mis tahes counter väärtuse korral // jääk alati ühekohaline arv. // Riistvara: Kontrollerplaat, Kasutajaliidese plaat // Autor: Mikk Leini 2009 // #include <homelab/module/segment_display.h> #include <homelab/delay.h> // // Põhiprogramm // int main(void) { int counter = 0; // 7-segmendilise indikaatori seadistamine segment_display_init(); // Lõputu tsükkel while (true) { // Loenduri üheliste väärtuse näitamine segment_display_write(counter % 10); // Loendamine väga pikalt counter++; // Paus 1 sekund sw_delay_ms(1000); } }
// Näidisprogramm, mis demonstreerib mootori kiiruse muutmist. // Nupp S1 suurendab ja nupp S2 vähendab esimese mootori kiirust. // Mootori pöörlemissuunda muudab nupp S3. // Riistvara: Kontrollerplaat, Kasutajaliidese plaat, // Mootoriplaat, Alalisvoolu mootor // Autor: Heiko Pikner 2012 #include <homelab/delay.h> #include <homelab/pin.h> #include <homelab/module/motors.h> // Nuppude viigud pin button1 = PIN(C, 0); pin button2 = PIN(C, 1); pin button3 = PIN(C, 2); int main(void) { unsigned char speed = 0; signed char direction = -1; unsigned char new_value1, old_value1 = 0; // Seab nupud töökorda pin_setup_input_with_pullup(button1); pin_setup_input_with_pullup(button2); pin_setup_input_with_pullup(button3); // Mootori initsialiseerimine dcmotor_drive_pwm_init(0); while(1) { // Loeb nupu S3 väärtuse new_value1 = pin_get_debounced_value(button3); // Nupp S1 alla vajutatud if(!pin_get_debounced_value(button1)) { // Suurendab kiirust if(speed < 255) { speed++; } } // Nupp S2 alla vajutatud if(!pin_get_debounced_value(button2)) { // Vähendab kiirust if(speed > 255) { speed--; } } // Nupp S3 alla vajutatud. Registreeritakse ainult üks vajutus. if((!new_value1) && (old_value1)) { // Pöörlemissuuna vahetamine if(direction == 1) { direction = -1; } else { direction = 1; } } // Jätab eelmise nupu S3 väärtuse meelde old_value1 = new_value1; // Mootorile valitud kiiruse etteandmine dcmotor_drive_pwm(0, direction, speed); sw_delay_ms(2); } }