/* wyœwietlanie temperatury na pozycji X w pierwszej linii LCD */
void display_temp(uint8_t x) {
	lcd_locate(0,x);
	if(subzero) lcd_str("-");	/* jeœli subzero==1 wyœwietla znak minus (temp. ujemna) */
	else lcd_str(" ");	/* jeœli subzero==0 wyœwietl spacjê zamiast znaku minus (temp. dodatnia) */
	lcd_int(cel);	/* wyœwietl dziesiêtne czêœci temperatury  */
	lcd_str(".");	/* wyœwietl kropkê */
	lcd_int(cel_fract_bits); /* wyœwietl dziesiêtne czêœci stopnia */
	lcd_str(" C"); /* wyœwietl znak jednostek (C - stopnie Celsiusza) */
	lcd_char(0xDF);
}
Example #2
0
main()
{
unsigned char ret;
unsigned char buf[8];
unsigned char i=0;
unsigned char l1=strlen(pass);
unsigned char l2;
lcd_init();
lcd_cmd(0x80);
lcd_string("password:"******"Invalid");
delay_ms(5000);
}
else
{
//ret=strcmp(pass,buf);
ret=my_comp(pass,buf,l2);
if(ret==0)
{
	lcd_cmd(0x01);
	lcd_string("Valid");
	delay_ms(5000);
}
else
	{
	lcd_cmd(0x01);
	lcd_string("Invalid");
	delay_ms(5000);
	}
}
}
Example #3
0
void lcd_float(float f)
{
u16 t;
t=f;
lcd_int(t);
lcd_char('.');
f-=t;
f*=100;
t=f;
lcd_int(t);
}
Example #4
0
/*ISR(ADC_vect)
{
	if(i%5==0)
	{
		PORTB^=(1<<PB1);
		wynik=(ADCH<<8)|ADCL;
		i=0;
	}


	i++;
	ADCSRA |= 1<<ADSC;
	//ADCSRA&=~(1<<ADIF);
}
*/
int main()
{
	DDRC&=~(1<<PC5); //Input
	DDRB |=(1<<PB1);
	lcd_init();
	/*TCNT0=0;
	TCCR0A |= (1<<WGM01);
	TCCR0B |= (1<<CS02);		//preskaler = 256
	OCR0A = 10;*/						//podzial przez 10

	/*ADMUX |= (1<<REFS1)|(1<<REFS0)|(1<<MUX2)|(1<<MUX0); //1,1V REF || Chan ADC5
	ADCSRB|=(1<<ADTS1)|(1<<ADTS0); //Trigger: Timer0 CpMA
	ADCSRA |= (1<<ADEN)|(1<<ADATE)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); //ADC Enable | Start Conv ||| Prescaler 128
	*/
	//ADMUX |= (1<<REFS1)|(1<<REFS0)|(1<<MUX2)|(1<<MUX0); //1,1V REF || Chan ADC5
	//ADCSRA |= (1<<ADEN)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); //ADC Enable | Start Conv ||| Prescaler 128
	//ADCSRA |= 1<<ADSC; //ADC On

	ADMUX |=(3<<6)|(5<<0);
	ADCSRA |=(1<<7)|(6<<0);
	ADCSRA |= 1<<ADSC; //Start Meas

	//sei();
	while(1)
	{
		while(ADCSRA &(1<<ADSC));
		wynik=(ADCH<<8)|ADCL;
		lcd_locate(0,0);
		lcd_int(wynik);
		_delay_ms(500);
		ADCSRA |= 1<<ADSC; //Start Meas
	}

}
main()
{
unsigned char temp;
unsigned char a[10];
	unsigned char i=0;

	uart_init();
lcd_init();

	do
	{		
		temp=uart_rx();
		uart_tx(temp);
		a[i++]=temp;
		lcd_cmd(0x01);
		lcd_data(temp);
		lcd_cmd(0x85);
		lcd_int(temp);
		lcd_cmd(0x89);
		lcd_string("0x");
		lcd_hex(temp);
		delay_ms(1000);
	}while(temp!=13);
	a[--i]='\0';
	lcd_cmd(0xc0);
	lcd_string(a);
	delay_ms(5000);
}
Example #6
0
int main(int argc, char **argv) {
  int val;

  lnp_integrity_set_handler(&getdata);
  ds_active(&SENSOR_2);

  while(1) {
    wait_event(WaitForData, 0);

    switch (in) {
      case 0: val = SENSOR_1; break;
      case 1: val = SENSOR_2; break;
      case 2: val = SENSOR_3; break;
    }

    lcd_int(val);

    buf[0] = val/256;
    buf[1] = val%256;

    lnp_integrity_write(buf,2);
    got = 0;
  }
  return 0;
}
Example #7
0
File: batt.C Project: abbrev/xs
int 
main(int argc, 
     char **argv) 
{
  Battery b;

  while (!shutdown_requested()) {
    cputs("batt");
    sleep(1);
    lcd_int(b.get());
    sleep(1);
  }
  return 0;
}
Example #8
0
int main(void)
{
	lcd_init();
	init_adc();
	while(1)
	{
		if(czujnik_dymu_ON)
		{
			lcd_locate(0,0);
			lcd_str("WYKRYTO DYM");
		}
		else
		{
			lcd_locate(0,0);
			lcd_str("BRAK DYMU  ");
		}
		wartosc_pomiaru = pomiar(czujnik_dymu_ktory);
		lcd_locate(1,0);
		lcd_int(wartosc_pomiaru);
		lcd_str("   ");
		_delay_ms(500);
	}
}
void M11_func_ustawienia_godzina(char *str)
{
	static uint8_t i=0, edit=0;
	static uint8_t state=0;
	static uint32_t cnt=0, offset_cnt=0;
	
	if(Flagi.flaga_lcd)
	{
		lcd_locate(0, 10);
		lcd_char(0x7E);
		lcd_str(str);
		EI2C_read_buf(ADDR_EEMEM_24C64, offsetof(EXT_EEPROM_var, empty), SIZEOF (EXT_EEPROM_var, empty), (uint8_t *)str);
		lcd_locate(1, 0);
		lcd_str(str);
		Flagi.flaga_lcd=0;
	}

	switch(state)
	{
		case 0:
			state=1;	
			
			if(i>8)
				i=0;
			lcd_locate(0, 10);
			lcd_char(0x7E);
			fifo_bufor_lcd(str,i,strlen(str));
			lcd_str(str);
			
			cli();
			cnt=25000;
			offset_cnt=licznik;
			sei();
			break;
		case 1:
			if(cnt<=licznik-offset_cnt)
			{
				i++;
				state=0;
			}
			break;
	}
	
	if (key_code == PRZYCISK_ENTER)
	{
		edit++;
		if (edit>3)
			edit=1;
		Flagi.flaga_klawiatura=0;
	}
	else if (key_code == PRZYCISK_POWROT && Flagi.flaga_klawiatura==0)
	{
		edit=0;
		Flagi.flaga_klawiatura=1;
		ustaw_czas(&czas);
	}
	
	
	switch(edit)
	{
		case 1:
			if (key_code == PRZYCISK_GORA && Flagi.flaga_klawiatura==0)
			{
				czas.godziny++;
				if(czas.godziny>23)
					czas.godziny=0;
				lcd_locate(1,0);
				if( czas.godziny < 10 ) lcd_char('0');
				lcd_int(czas.godziny);
			}
			else if (key_code == PRZYCISK_DOL && Flagi.flaga_klawiatura==0)
			{
				czas.godziny--;
				if((int8_t)czas.godziny<0)
					czas.godziny=23;	
				lcd_locate(1,0);
				if( czas.godziny < 10 ) lcd_char('0');
				lcd_int(czas.godziny);
			}

			lcd_cursor_on();
			lcd_blink_on();
			lcd_locate(1,1);
			break;
		case 2:
			if (key_code == PRZYCISK_GORA && Flagi.flaga_klawiatura==0)
			{
				czas.minuty++;
				if(czas.minuty>59)
				czas.minuty=0;
				lcd_locate(1,3);
				if( czas.minuty < 10 ) lcd_char('0');
				lcd_int(czas.minuty);
			}
			else if (key_code == PRZYCISK_DOL && Flagi.flaga_klawiatura==0)
			{
				czas.minuty--;
				if((int8_t)czas.minuty<0)
				czas.minuty=59;
				lcd_locate(1,3);
				if( czas.minuty < 10 ) lcd_char('0');
				lcd_int(czas.minuty);
			}
			lcd_cursor_on();
			lcd_blink_on();
			lcd_locate(1,4);
			break;
		case 3:
			if (key_code == PRZYCISK_GORA && Flagi.flaga_klawiatura==0)
			{
				czas.sekundy++;
				if(czas.sekundy>59)
				czas.sekundy=0;
				lcd_locate(1,6);
				if( czas.sekundy < 10 ) lcd_char('0');
				lcd_int(czas.sekundy);
			}
			else if (key_code == PRZYCISK_DOL && Flagi.flaga_klawiatura==0)
			{
				czas.sekundy--;
				if((int8_t)czas.sekundy<0)
				czas.sekundy=59;
				lcd_locate(1,6);
				if( czas.sekundy < 10 ) lcd_char('0');
				lcd_int(czas.sekundy);
			}
			lcd_cursor_on();
			lcd_blink_on();
			lcd_locate(1,7);
			break;
		default:
			lcd_cursor_off();
			lcd_blink_off();
			if(Flagi.flaga_rtc)
			{
				pobierz_czas(&czas);
				Flagi.flaga_rtc=0;
			}
			lcd_locate(1,0);
			if( czas.godziny < 10 ) lcd_char('0');
			lcd_int(czas.godziny);
			lcd_char(':');
			if( czas.minuty < 10 ) lcd_char('0');
			lcd_int(czas.minuty);
			lcd_char(':');
			if( czas.sekundy < 10 ) lcd_char('0');
			lcd_int(czas.sekundy);
		break;
	}

}
void M0(char *str)
{	
	static uint8_t state=0, term_state=0, i=0;
	static uint32_t cnt=0, offset_cnt=0;
	static char buf[41], buf_lcd[9];
	if(Flagi.flaga_lcd)
	{
		lcd_locate(0, 0);
		lcd_str(str);
		lcd_locate(1, 0);
		lcd_str(str);
		Flagi.flaga_lcd=0;
	}
	if (Flagi.flaga_term)
	{
		switch(term_state)
		{
			case 0:
					DS18X20_start_meas( DS18X20_POWER_EXTERN, NULL );
					term_state=1;
					break;
			case 1:
					if( DS18X20_OK == DS18X20_read_meas(gSensorIDs[0], &subzero, &cel, &cel_fract_bits) ) display_temp(0);
					else {
						lcd_locate(0,0);
						lcd_str("term. error ");	/* wyœwietlamy informacjê o b³êdzie jeœli np brak czujnika lub b³¹d odczytu */
					}
					term_state=0;
					break;
		}
		Flagi.flaga_term=0;

	}
	
	if(Flagi.flaga_rtc)
	{
		pobierz_czas(&czas);
		pobierz_date(&data);
		Flagi.flaga_rtc=0;
	}

	lcd_locate(1,0);
	if( czas.godziny < 10 ) lcd_char('0');
	lcd_int(czas.godziny);
	lcd_char(':');
	if( czas.minuty < 10 ) lcd_char('0');
	lcd_int(czas.minuty);
	lcd_char(':');
	if( czas.sekundy < 10 ) lcd_char('0');
	lcd_int(czas.sekundy);
	
	switch(state)
	{
		case 0:
				state=1;
				
				if(i>= 2*strlen(buf))
					i=0;
				
				lcd_wyswietl_date(&data, buf, 0);
				fifo_bufor_lcd(buf, i, strlen(buf));
				lcd_locate(1,8);
				strncpy(buf_lcd,buf,sizeof(buf_lcd)-1);
				lcd_str(buf_lcd);
				
				cli();
				cnt=25000;
				offset_cnt=licznik;
				sei();
				break;
		case 1:
				if(cnt<=licznik-offset_cnt)
				{
					i++;
					state=0;
				}
				break;
	}
}
Example #11
0
void move()
{
  int i;

  /*variable to use in figuring out the "best" option*/
  int max_q_score = 0;

  /*what do we do next? store it here*/
  /*we init to -1 as an error*/
  int next_movement = -1;

  /*Where we started.*/
  /*We don't use ROTATION_2 all the way through in case it changes.*/
  int initial_angle = norm_rotation(ROTATION_2);

  /*Where we ended up.*/
  int new_angle;

  /*Show the current angle*/
  cputc_native_user(CHAR_A, CHAR_N, CHAR_G, CHAR_L);  // ANGL
  msleep(200);
  lcd_int(initial_angle);
  msleep(500);
  
  /*
   * Most of the time, we do the "correct" thing
   * by finding the best q_score of our possible options.
   * On the off chance that norm_random() is low (or EPSILON is high ;)
   * we then "explore" by choosing a random movement.
   */

  if(norm_random() > EPSILON_CURRENT)
    {
      /*We are doing what the table tells us to.*/
      cputc_native_user(CHAR_r, CHAR_e, CHAR_a, CHAR_l);  // real
      msleep(500);

      for(i=0; i<MOVEMENTS; i++)
  {
    if(q_score[initial_angle][i] > max_q_score)
      {
        max_q_score = q_score[initial_angle][i];
        next_movement = i;
      }
  }
    }
  else
    {
      double temp;
      /*We are just picking something at random.*/
      cputc_native_user(CHAR_r, CHAR_a, CHAR_n, CHAR_d);  // rand
      msleep(500);

      /*pick one. Any one.*/
      
      temp = norm_random();
      next_movement = temp*MOVEMENTS;   

      /*show what we do next*/
      lcd_int(next_movement);
      sleep(1);
    }
  
  /*what happens if next_movement never gets changed?*/
  /*we'd hate to do HARD_LEFT over and over again*/
  /*so we choose randomly*/

  if(-1==next_movement)
    {
      double temp;
      temp = norm_random();
      next_movement = temp*MOVEMENTS;
    }

  /*having chosen a movement, lets do it*/
  switch(next_movement)
    {
    case HARD_LEFT:
      cputc_native_user(CHAR_H, CHAR_L, 0, 0);  // HL
      hard_left();
      break;
    case SOFT_LEFT:
      cputc_native_user(CHAR_S, CHAR_L, 0, 0);  // SL
      soft_left();
      break;
    case FORWARD:
      cputc_native_user(CHAR_F, CHAR_W, CHAR_W, CHAR_D); // FWD
      go_forward();
      break;
    case SOFT_RIGHT:
      cputc_native_user(CHAR_S, CHAR_R, 0, 0);  // SR
      soft_right();
      break;
    case HARD_RIGHT:
      cputc_native_user(CHAR_H, CHAR_R, 0, 0);  // HR
      hard_right();
      break;
    case REVERSE:
      cputc_native_user(CHAR_R, CHAR_E, CHAR_V, 0);  // REV
      go_back();
      break;
    default:
      /*this is an error and should never be reached*/
      cputc_native_user(CHAR_E, CHAR_R, CHAR_R, 0);  // ERR
      stop_motors();
      sleep(1);
      break;
    }

  /*Once we've started, we'd better stop*/
  stop_motors();

  /*Allows us to read direction*/
  msleep(500);

  /*This is here just to make the next function cleaner*/
  new_angle = norm_rotation(ROTATION_2);

  /*Where are we now?*/
  cputc_native_user(CHAR_N, CHAR_E, CHAR_W, CHAR_W);  // NEW
  msleep(200);
  lcd_int(new_angle);
  msleep(500);
  
  /*
   * Since we know that "next_movement" took us from "initial_angle"
   * to new_angle (ROTATION_2), we store that increased probability.
   */
  
  steering_results[initial_angle][next_movement][new_angle] += ALPHA;
  
  /*here we re-norm so that the sum of the probabilities is still 1*/
  for(i=0; i<ANGLES; i++)
    {
      steering_results[initial_angle][next_movement][i] /= (1+ALPHA);
    }  
  
  /*The last thing we do is reduce Epsilon*/
  if(EPSILON_CURRENT > EPSILON_MIN)
    {
      EPSILON_CURRENT-=EPSILON_DECAY;
    }

}
Example #12
0
 int main()
 {
 	int x,y,z;
	adc_init();
	uart_init();

	lcd_init();	delay(100);
	
	lcd_char('a');
 	
	while(1) 
	{	cmd(0x01); // Clear LCD
		
		AD0CR = 0x01200600; // ADC Stop, select Channel 0
		//AD0CR |= 0x01000000;  // Start ADC, Channel 0
		x = read_adc();
		cmd(0x80);
		lcd_int(x);
		uart_tx_num(x);
		uart_tx_char(' ');
		
		AD0CR = 0x01200602;
		//AD0CR |= 0x01000000;  // Start ADC, Channel 0
		y = read_adc();
		cmd(0x85); 
		lcd_int(y);
		uart_tx_num(y);
		uart_tx_char(' ');

		
	
		AD0CR = 0x01200604;
		//AD0CR |= 0x01000000;  // Start ADC, Channel 0
		z = read_adc();
		cmd(0x8A); 
		lcd_int(z);
		uart_tx_num(z);
		uart_tx_str("\r");

				  
		if(x>600 )
		{
			cmd(0x01);
			lcd_str("ALERT x = ");
			uart_tx_str("\nAlert x");
			cmd(0xc0);
			lcd_int(x);
			delay(1000);
			cmd(0x01);
		}
		if(y<300 )
		{
			cmd(0x01);
			lcd_str("ALERT y = ");
			uart_tx_str("\nAlert y");
			cmd(0xc0);
			lcd_int(y);
			delay(1000);
			cmd(0x01);
		}
		delay(100);	
		
			

	}
 	
 }
Example #13
0
void menu_update() {

    // czas pobrany z RTC
    time_t time;
    unsigned char n;

    // czyœæ ekran przed aktualizacj¹ menu
    if ( menu_updated ) {
        lcd_clear();
    }

    // rysuj g³ówne menu
    lcd_xy(0,0);  lcd_char(lcd_larrow);
    lcd_xy(15,0); lcd_char(lcd_rarrow);

    lcd_xy(2,0);

    // ogranicz
    if (menu_pos == 0xff) {
        menu_pos = MENU_POS_COUNT - 1; 
    }
    else if(menu_pos >= MENU_POS_COUNT) {
        menu_pos = 0;
    }

    // wybierz g³ówne menu
    switch(menu_pos) {
        
        // czas i trzy temperatury
        //
        case 0:
            // pobierz czas ...
            ds1306_time_get(&time);

            // ... i poka¿
            lcd_xy(1,0);
            lcd_int2(time.tm_hour); lcd_char(uptime%2 ? ':' : ' '); lcd_int2(time.tm_min);
            lcd_char(' ');//lcd_text_P(PSTR(" 20"));
            lcd_int2(time.tm_year);lcd_char('/');lcd_int2(time.tm_mon);lcd_char('/');lcd_int2(time.tm_mday);

            
            // ogranicz podmenu do liczby czujników
            if (menu_sub_pos == 0xff) {
                menu_sub_pos = 0;
            }
            else if ( (menu_sub_pos > ds_devices_count-3) && (ds_devices_count > 3) ) {
                menu_sub_pos = ds_devices_count-3;
            }

            // poka¿ temperatury
            lcd_xy(1,1);

            for (n=0; n<ds_devices_count && n<3; n++) {
                lcd_int2(abs(ds_temp[menu_sub_pos + n])/10); lcd_char('.'); lcd_char('0' + (abs(ds_temp[menu_sub_pos + n])%10)); lcd_char(' ');
            }

            // strza³ki
            lcd_xy(0,1);  lcd_char( (menu_sub_pos > 0)                  ? lcd_larrow : ' ');
            lcd_xy(15,1); lcd_char( (menu_sub_pos < ds_devices_count-3) ? lcd_rarrow : ' ');

            break;

        // temperatury
        //
        case 1:

            // poka¿ temperatury
            lcd_xy(1,0);

            for (n=0; n<ds_devices_count && n<3; n++) {
                lcd_int2(abs(ds_temp[n])/10); lcd_char('.'); lcd_char('0' + (abs(ds_temp[n])%10)); lcd_char(n<2 ? ' ' : lcd_rarrow);
            }

            lcd_xy(1,1);

            for (n=3; n<ds_devices_count && n<6; n++) {
                lcd_int2(abs(ds_temp[n])/10); lcd_char('.'); lcd_char('0' + (abs(ds_temp[n])%10)); lcd_char(' ');
            }

            break;

        // sieæ (IP, brama, DHCP, pakiety)
        //
        case 2:
            lcd_text_P(PSTR("Sie\x09/")); // sieæ

            // ogranicz podmenu
            if (menu_sub_pos == 0xff) {
                menu_sub_pos = 6;
            }
            else if (menu_sub_pos > 6) {
                menu_sub_pos = 0;
            }

            lcd_xy(7,0);

            switch (menu_sub_pos) {

                case 0:
                    lcd_text_P(PSTR("IP"));

                    lcd_xy(2,1);

                    for (n=0; n<4; n++) {
                        lcd_int(my_net_config.my_ip[n]);
                        lcd_char(n<3 ? '.' : ' ');
                    }
                    break;

                case 1:
                    lcd_text_P(PSTR("brama"));

                    lcd_xy(2,1);
                    for (n=0; n<4; n++) {
                        lcd_int(my_net_config.gate_ip[n]);
                        lcd_char(n<3 ? '.' : ' ');
                    }
                    break;

                case 2:
                    lcd_text_P(PSTR("DHCP"));

                    lcd_xy(2,1);

                    // DHCP
                    if (my_net_config.using_dhcp) {
                        lcd_text_P(PSTR("u\x0fywane"));
                    }
                    else {
                        lcd_text_P(PSTR("nie"));
                    }
                    break;

                case 3:
                    lcd_text_P(PSTR("\x0b\x08")); lcd_text_P(PSTR("cze"));

                    lcd_xy(2,1);

                    // stan ³¹cza
                    if ( enc28_is_link_up() ) {
                        lcd_text_P(PSTR("tak"));
                    }
                    else {
                        lcd_text_P(PSTR("brak"));
                    }
                    break;

                case 4:
                    lcd_text_P(PSTR("pakiety"));

                    lcd_xy(2,1);
                    lcd_text_P(PSTR("Tx: ")); lcd_int(net_ip_packet_id);
                    break;

                case 5:
                    lcd_text_P(PSTR("pakiety"));

                    lcd_xy(2,1);
                    lcd_text_P(PSTR("Rx: ")); lcd_int(my_net_config.pktcnt);
                    break;

                case 6:
                    lcd_text_P(PSTR("MAC"));
                    
                    lcd_xy(2,1);
                    for (n=0; n<6; n++) {
                        lcd_hex(my_net_config.my_mac[n]);
                    }
                    break;
            }

            // strza³ki
            lcd_xy(0,1);  lcd_char(lcd_larrow);
            lcd_xy(15,1); lcd_char(lcd_rarrow);

            break;

        // PID (wysterowania, nastawy, PV, SP)
        //
        /*
        case 3:
            lcd_text_P(PSTR("PID")); // PID

            break;
        */

        // PWM (wype³nienia)
        //
        case 3:
            lcd_text_P(PSTR("PWM"));

            // ogranicz podmenu do liczby kana³ów PWM
            if (menu_sub_pos == 0xff) {
                menu_sub_pos = 0;
            }
            else if (menu_sub_pos > PWM_CHANNELS-3) {
                menu_sub_pos = PWM_CHANNELS-3;
            }

            // nr pokazywanych kana³ów
            lcd_xy(11,0);
            lcd_char('1' + menu_sub_pos);
            lcd_char('-');
            lcd_char('3' + menu_sub_pos);

            // poka¿ wype³nienia
            lcd_xy(2,1);

            for (n=0; n<PWM_CHANNELS && n<3; n++) {
                lcd_char('0' + pwm_get_fill(menu_sub_pos + n)/100);lcd_int2(pwm_get_fill(menu_sub_pos + n)); lcd_char(' ');
            }

            // strza³ki
            lcd_xy(0,1);  lcd_char( (menu_sub_pos > 0)              ? lcd_larrow : ' ');
            lcd_xy(15,1); lcd_char( (menu_sub_pos < PWM_CHANNELS-3) ? lcd_rarrow : ' ');

            break;

        // informacje (wersja, ENC28J60, karta pamiêci, EEPROM)
        //
        case 4:
            lcd_text_P(PSTR("Informacje")); // sieæ

            // ogranicz podmenu
            if (menu_sub_pos == 0xff) {
                menu_sub_pos = 6;
            }
            else if (menu_sub_pos > 6) {
                menu_sub_pos = 0;
            }

            lcd_xy(2,1);

            switch (menu_sub_pos) {

                case 0:
                    lcd_text_P(PSTR(__DATE__));
                    break;

                case 1:
                    lcd_text_P(PSTR("GCC " __AVR_LIBC_VERSION_STRING__));
                    break;

                case 2:
                    //lcd_text_P(PSTR("Up "));

                    // dni
                    lcd_int((uptime/3600/24)); lcd_char('d');
                    // godziny
                    lcd_int2((uptime/3600)%24); lcd_char(':');
                    // minuty
                    lcd_int2((uptime/60)%60); lcd_char(':');
                    // sekundy
                    lcd_int2((uptime%60));

                    break;

                case 3:
                    lcd_text_P(PSTR("ENC28 rev.B"));
                    lcd_char('0' + enc28_read_rev_id());
                    break;

                case 4:
                    lcd_text_P(PSTR("Czujnik\x0dw: "));
                    lcd_int(ds_devices_count);
                    break;

                case 5:
                    lcd_text_P(PSTR("EEPROM "));
                    lcd_int(eeprom_get_size() >> 10);
                    lcd_char('k');lcd_char('B');
                    break;

                case 6:
                    if (sd_get_state() != SD_FAILED) {
                        lcd_text_P(sd_get_state() == SD_IS_SD ? PSTR("SD") : PSTR("MMC"));
                        lcd_char(' ');
                        lcd_int(sd_size >> 10); // kB
                        lcd_char('k');lcd_char('b');
                    }
                    else {
                        lcd_text_P(PSTR("SD/MMC: b\x0b\x08d"));
                    }
                    break;
            }
Example #14
0
int main(void) {

	DDRA |= (1<<PA7);
	PORTA |= (1<<PA7); // podœwietlenie wyœwietlacza LCD

	// Przerwanie INT0
	MCUCR |= (1<<ISC01);	// wyzwalanie zboczem opadaj¹cym
	GICR |= (1<<INT0);		// odblokowanie przerwania
	PORTD |= (1<<PD2);		// podci¹gniêcie pinu INT0 do VCC


	// definiujemy sobie dla polepszenia czytelnoœci programu typ wyliczeniowy
	// wskazuj¹cy nam póŸniej na odpowiednie indeksy w tablicy (buforze)
	enum {ss=1, mm, hh};
	uint8_t bufor[4];		// rezerwacja bufora 4 bajty
	uint8_t sekundy, minuty, godziny;


	i2c_init();
	lcd_init();

	sei();

	lcd_str_P(PSTR("start..."));

	// Ustawianie czasu na godzinê: 18:34:27
	/*
	bufor[0] = 0;			// setne czêœci sekundy
	bufor[1] = dec2bcd(27);	// sekundy
	bufor[2] = dec2bcd(34);	// minuty
	bufor[3] = dec2bcd(18);	// godziny
	// zapis 4 bajtów z bufora pod adres 0x01 w pamiêci RAM naszego RTC
	I2C_write_buf( PCF8583_ADDR, 0x01, 4, bufor );
	*/

	// zapis tekstu do pamiêci EEPROM od adresu 253, dlatego aby tekst
	// zosta³ zapisany w jednym i drugim banku pamiêci
	EI2C_write_buf( _24C04_ADDR, 253, sizeof(tekst), tekst );

	while(1) {

		if ( int0_flag ) {
			//odczyt 4 bajtów do bufora od adresu 0x01 z pamiêci RAM naszego RTC
			I2C_read_buf( PCF8583_ADDR, 0x01, 4, bufor );

			sekundy = bcd2dec( bufor[ss] );
			minuty = bcd2dec( bufor[mm] );
			godziny = bcd2dec( bufor[hh] );

			// wyœwietlenie czasu na LCD
			lcd_locate(1,0);
			if( godziny < 10 ) lcd_str("0");
			lcd_int(godziny);
			lcd_str(":");
			if( minuty < 10 ) lcd_str("0");
			lcd_int(minuty);
			lcd_str(":");
			if( sekundy < 10 ) lcd_str("0");
			lcd_int(sekundy);

			// odczyt z EEPROM
			EI2C_read_buf( _24C04_ADDR, 253, sizeof(tekst), bo );

			// wyœwietlenie napisu z EEPROM na LCD
			lcd_locate(0, 9);
			lcd_str( (char*)bo );

			int0_flag=0;
		}

	}
}