ehenkes
27.06.2024, 23:19
Ein Nibo ver.1 und ein Nibo ver.2 sollen miteinander kommunizieren. Wie erfolgt das am einfachsten? Gibt es Vorbilder?
Nibo ist in der Lage RC5-Signale zu verarbeiten.
#include <stdlib.h>
#include <avr/interrupt.h>
#include "nibo/niboconfig.h"
#include "nibo/iodefs.h"
#include "nibo/delay.h"
#include "nibo/adc.h"
#include "nibo/pwm.h"
#include "nibo/i2cmaster.h"
#include "nibo/display.h"
#include "nibo/bot.h"
#include "nibo/leds.h"
#include "nibo/gfx.h"
#include "nibo/irco.h"
#include "nibo/floor.h"
#define LOBYTE(x) (uint8_t)((uint16_t)x)
#define HIBYTE(x) (uint8_t)(((uint16_t)x)>>8)
// Hilfsfunktion
void print_hex (uint8_t val);
int main()
{
sei(); // enable interrupts
i2c_init();
pwm_init();
display_init();
bot_init();
leds_init();
gfx_init();
irco_startMeasure();
leds_set_displaylight(1000);
while(1)
{
irco_update();
gfx_move(0,0);
gfx_print_text("RC5: ", 1);
gfx_move(30,0);
print_hex(HIBYTE(irco_rc5_cmd));
print_hex(LOBYTE(irco_rc5_cmd));
// Fernbedienung Einstellung: TV1, 023
switch(LOBYTE(irco_rc5_cmd)
{
case 0x01: //1 (Ziffernblock der Fernbedienung)
for(i=0; i<6; ++i)
leds_set_status(LEDS_GREEN,i);
break;
case 0x02: //2
for(i=0; i<6; ++i)
leds_set_status(LEDS_ORANGE,i);
break;
case 0x03: //3
for(i=0; i<6; ++i)
leds_set_status(LEDS_RED,i);
break;
case 0x00: //0
for(i=0; i<6; ++i)
leds_set_status(LEDS_OFF,i);
break;
// etc.
}
}
return 0;
}
void print_hex (uint8_t val)
{
char c1=val/16;
char c2=val%16;
if (c1<10) c1+='0'; else c1+='a'-10;
if (c2<10) c2+='0'; else c2+='a'-10;
gfx_print_char(c1, 0);
gfx_print_char(c2, 0);
}
Wie kann man entsprechende Signale vom Nibo senden? Klappt solche Kommunikation?
Nibo ist in der Lage RC5-Signale zu verarbeiten.
#include <stdlib.h>
#include <avr/interrupt.h>
#include "nibo/niboconfig.h"
#include "nibo/iodefs.h"
#include "nibo/delay.h"
#include "nibo/adc.h"
#include "nibo/pwm.h"
#include "nibo/i2cmaster.h"
#include "nibo/display.h"
#include "nibo/bot.h"
#include "nibo/leds.h"
#include "nibo/gfx.h"
#include "nibo/irco.h"
#include "nibo/floor.h"
#define LOBYTE(x) (uint8_t)((uint16_t)x)
#define HIBYTE(x) (uint8_t)(((uint16_t)x)>>8)
// Hilfsfunktion
void print_hex (uint8_t val);
int main()
{
sei(); // enable interrupts
i2c_init();
pwm_init();
display_init();
bot_init();
leds_init();
gfx_init();
irco_startMeasure();
leds_set_displaylight(1000);
while(1)
{
irco_update();
gfx_move(0,0);
gfx_print_text("RC5: ", 1);
gfx_move(30,0);
print_hex(HIBYTE(irco_rc5_cmd));
print_hex(LOBYTE(irco_rc5_cmd));
// Fernbedienung Einstellung: TV1, 023
switch(LOBYTE(irco_rc5_cmd)
{
case 0x01: //1 (Ziffernblock der Fernbedienung)
for(i=0; i<6; ++i)
leds_set_status(LEDS_GREEN,i);
break;
case 0x02: //2
for(i=0; i<6; ++i)
leds_set_status(LEDS_ORANGE,i);
break;
case 0x03: //3
for(i=0; i<6; ++i)
leds_set_status(LEDS_RED,i);
break;
case 0x00: //0
for(i=0; i<6; ++i)
leds_set_status(LEDS_OFF,i);
break;
// etc.
}
}
return 0;
}
void print_hex (uint8_t val)
{
char c1=val/16;
char c2=val%16;
if (c1<10) c1+='0'; else c1+='a'-10;
if (c2<10) c2+='0'; else c2+='a'-10;
gfx_print_char(c1, 0);
gfx_print_char(c2, 0);
}
Wie kann man entsprechende Signale vom Nibo senden? Klappt solche Kommunikation?