Projekte
BirgerT
nibo2_akkudisplay
main.c
Projekte
Forum
Doku
Öffentliche Projekte
Startseite
Beispielprogramme
Projekte von anderen
Welcome
Username
Passwort
Eingeloggt bleiben
Zugangsdaten vergessen?
Registrieren
Projektverwaltung
⇨ Please choose! ⇦
——————————————————
✎ Create new project...
★ Browse existing projects...
——————————————————
⚬ MotorTest#1
⚬ C Tutorial 8#1
⚬ NIBO2 C Project#1
⚙ C Tutorial 15#1
⚬ 2010_11_18_el_test001#1
nibo2_akkudisplay
main.c
Project details
Compiler settings
Nachrichten
Sie sind nicht eingeloggt.
Neuigkeiten
★
NiboRoboLib 3.6
2017-01-17: Neue Version 3.6
★
NiboRoboLib 3.4.1
2016-04-16: Neue Version 3.4.1
★
Coding Tutorial
2015-11-22: Jetzt auch für den NIBO burger!
Site-Statistic
7427 private projects
385 public projects
16181052 lines compiled
58220 builds
NIBO
@
nibo2_akkudisplay/main.c [read only]
/* NIBO2 C project */ /* NIBO 2 Tutorial Bodensensoren und Akkusppanung AVR Memory Usage mit libm.a und libprintf_flt.a und Spannungsanzeige in Volt ---------------- Device: atmega128 Program: 11338 bytes (8.7% Full) (.text + .data + .bootloader) Data: 729 bytes (17.8% Full) (.data + .bss + .noinit) AVR Memory Usage ohne libm und libprintf_flt und Akku Grafik ---------------- Device: atmega128 Program: 9032 bytes (6.9% Full) (.text + .data + .bootloader) Data: 707 bytes (17.3% Full) (.data + .bss + .noinit) */ #include <nibo/niboconfig.h> #include <nibo/leds.h> #include <nibo/display.h> #include <nibo/gfx.h> // fehlende defines in gfx.h #define GFX_DISP_WIDTH 128 #define GFX_DISP_HEIGHT 64 #include <nibo/delay.h> #include <nibo/iodefs.h> // mit den Makros aus iodefs.h lassen sich eigene Makros kreieren #define toggle_output_bit(NAME) _PPCAT(NAME,_PORT) ^= (unsigned char)_BV(_PPCAT(NAME,_BIT)) // HEADLIGHT EIN, AUS und TRUE wenn eingeschaltet #define head_on set_output_bit(IO_LED_WHITE) #define head_off clear_output_bit(IO_LED_WHITE) #define head_is_on (1<<IO_LED_WHITE_BIT == get_output_bit(IO_LED_WHITE)) // DIPLAYLIGHT EIN, AUS und TRUE wenn eingeschaltet #define disp_on set_output_bit(IO_DISP_LIGHT) #define disp_off clear_output_bit(IO_DISP_LIGHT) #define disp_is_on (1<<IO_DISP_LIGHT_BIT == get_output_bit(IO_DISP_LIGHT)) #include <nibo/bot.h> #include <nibo/floor.h> #include <stdio.h> // Hilfsmakro setzt die übergebenen Parameter zu einem Ausdruck zusammen #define _XCAT(x,a,b,c,d,e,f,g,h) x##a##b##c##d##e##f##g##h // erzeugt zwei XBM Grafikbytes und tauscht HighNibble und LowNibble // XBM16(0,1,0,1,1,0,1,0,0,0,1,1,1,1,0,0) -> 0b10100101,0b11000011 //#define XBM16(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) (uint8_t) _XCAT(0b,e,f,g,h,a,b,c,d),(uint8_t) _XCAT(0b,m,n,o,p,i,j,k,l) /* Vorlage für ein 16x16 Icon #define xbm_icon16_width 16 #define xbm_icon16_height 16 static unsigned char xbm_icon16_data[] PROGMEM = { XBM16(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), XBM16(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), XBM16(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), XBM16(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), XBM16(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), XBM16(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), XBM16(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), XBM16(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), XBM16(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), XBM16(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), XBM16(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), XBM16(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), XBM16(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), XBM16(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), XBM16(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0), XBM16(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) }; */ // das funktioniert entgegen der Definitin aber so: //#define XBM16(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) (uint8_t) _XCAT(0b,h,g,f,e,d,c,b,a),(uint8_t) _XCAT(0b,p,o,n,m,l,k,j,i) // Korrektur 05.05.12 #define XBM16(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) (uint8_t) _XCAT(0b,h,g,f,e,d,c,b,a),(uint8_t) _XCAT(0b,p,o,n,m,l,k,j,i // Akku als XBM Grafik #define xbm_akku_width 16 #define xbm_akku_height 14 static unsigned char xbm_akku_data[] PROGMEM = { XBM16(0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0), XBM16(0,1,0,1,0,1,0,0,0,0,1,0,1,0,1,0), XBM16(0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0), XBM16(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1), XBM16(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1), XBM16(1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1), XBM16(1,0,1,1,1,0,0,0,0,0,0,1,1,1,0,1), XBM16(1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1), XBM16(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1), XBM16(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1), XBM16(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1), XBM16(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1), XBM16(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1), XBM16(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1) }; // Ausgabeposition //#define xbm_akku_left (GFX_DISP_WIDTH - xbm_akku_width) / 2 //#define xbm_akku_top 6 #define xbm_akku_left 100 #define xbm_akku_top 30 // Spannungswerte // Wert bei leeren Akkus (Akkuspannung 8V) #define BOT_SUPPLY_LOW_LIMIT 505 // Wert bei frisch geladenen Akkus (10,4V) #define BOT_SUPPLY_TOP_LIMIT 665 // Differenz zwischen TOP und LOW -> 0..9 #define BOT_SUPPLY_CHARGE (BOT_SUPPLY_TOP_LIMIT - BOT_SUPPLY_LOW_LIMIT) void draw_akku() { // Akkugrafik gfx_move(xbm_akku_left, xbm_akku_top); gfx_draw_mode(GFX_DM_JAM2); // ueberschreiben gfx_draw_xbm_P(xbm_akku_width, xbm_akku_height, (PGM_P) xbm_akku_data); // Spannung Ladezustand uint8_t charge = (10 * (bot_supply - BOT_SUPPLY_LOW_LIMIT)) / BOT_SUPPLY_CHARGE; gfx_draw_mode(GFX_DM_COMP); // XOR schreiben gfx_move(xbm_akku_left+1, xbm_akku_top + 13 - charge); gfx_box(xbm_akku_width - 2, charge); } int main() { leds_init(); disp_on; // Displaybeleuchtung einschalten bot_init(); floor_init(); display_init(); gfx_init(); gfx_move(22, 0); gfx_set_proportional(1); gfx_print_text("Floor sensor test"); gfx_set_proportional(0); gfx_move(5, 0); gfx_print_char('R'); gfx_move(118, 0); gfx_print_char('L'); while (1==1) { delay(10); char text[20]="-- -- -- -- --"; gfx_draw_mode(GFX_DM_JAM2); // Bodensensoren floor_update(); sprintf(text, "%02x %02x %02x %02x", (uint16_t)(floor_absolute[FLOOR_RIGHT]/8), (uint16_t)(floor_absolute[LINE_RIGHT]/8), (uint16_t)(floor_absolute[LINE_LEFT]/8), (uint16_t)(floor_absolute[FLOOR_LEFT]/8)); gfx_move(22, 30); gfx_print_text(text); sprintf(text, "%02x %02x %02x %02x", (uint16_t)(floor_relative[FLOOR_RIGHT]/8), (uint16_t)(floor_relative[LINE_RIGHT]/8), (uint16_t)(floor_relative[LINE_LEFT]/8), (uint16_t)(floor_relative[FLOOR_LEFT]/8)); gfx_move(22, 40); gfx_print_text(text); // Spannung bot_update(); /* float volt = 0.0166 * bot_supply - 0.4; sprintf(text, "%3.1fV/%6.1fS", (double)volt,(double)bot_supply); gfx_move(5, 10); gfx_set_proportional(1); gfx_print_text("supp. "); gfx_set_proportional(0); gfx_print_text(text); */ draw_akku(); } // while return 0 ; }; // main
Compiler results:
Werbung
Online
adellreinoso82318550
Bogdanasf
josch
paulinegonsalves19
randalspann5740