Ulozeni cisel do pameti?

Zdravím, mám takový teoretický programovací problém. Napsal jsem si v C progam pro obsluhu maticové klavesnice 4x4 s LCD displeyem. Udělal jsem funkci, která načte(v přerušní) jeden znak z klávesnice a pošle ho na LCD(flueryho knihovna).

A teď: potřebuji z klávesnice načíst už přímo sekvenci čísel, např. 11000 Hz. Přičemž bych si to představoval tak, že na klávesnici zadám 11000#. Akorát vůbec nevím jak na to :smiley: . Předpokládám, že bych měl ty čísla nějak jednotlivě uložit někam do flash nebo eeprom, a pak znovu přečíst už jako integer(ale nevím jaké funkce na to jsou)? Nebo nějak přez Arrays, nebo jak byste to řešili? Procesor je atmega162.
Děkuji.

načti číslice do pole a zakonči nulou. atoi() to převede na číslo. S tím pak nalož dle libosti.

No jo, to je jasný, díky už to běží :slight_smile:

:arrow_right: administrator: příspěvek byl upraven
Předchozí příspěvky se necitují.

Ještě jedna věc, dal jsem tam: uint16_t nacteno_int = (atoi(nacteno)); ale problém je, že při 64k to přetýká. Funkci uint32_t nacteno_long = (atol(nacteno)) mi to nebere(převede se to jako 0) :confused: . Nebyl by nějaký nápad? Díky.

Zkus strtol().

Mě ovšem atol() funguje.static unsigned long int prom; // static jen pro ladění v simulátoru char text] = "123456"; prom = atol(text);

Další možnost je počítat stisky a číslici vždy přičíst k základu vynásobenou 10 na číslo stisku (první stisk: cislo += x10^0. Druhý: cislo += x10^1…).

Chyba byla v tomhle:

[code]static unsigned long int prom;
static unsigned int prom1;

char MyChar] = {‘1’,‘2’,‘3’,‘F’};

prom = atol(MyChar);
prom1 = atoi(MyChar);
[/code]
Zatímco atoi to převede, atol ne…

Funkce ato…() umějí pouze desítkovou soustavu (‘F’ nelze) a nemáš to pole ukončený nulou (’\0’). Na soustavu s jiným základem než 10 potřebuješ strto…().

Ukončeno nulou a stejně… Vyzkoušeno v simulatoru avr studia :confused: Ten tvuj zapis cos mi psal předtím, to taky nepřevede… V příloze je screen z watche. To by mě zajímalo, proč to u tebe funguje a u mě ne? :open_mouth:

[code]#define F_CPU 1000000

#include <avr/io.h>
#include <util/delay.h>
#include <avr/sleep.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>

int main(){
static long int prom0;
static int prom1;
static long int prom2;
static int prom3;
static long int prom4;
static int prom5;
static long int prom6;
static int prom7;

	static char MyChar0] = {0x31,0x32,0x33,'\0'};					//pod 65k
	static char MyChar1] = {0x31,0x32,0x33,0x34,0x35,0x36,'\0'};	//nad 65k
	static char MyChar2] = {0x31,0x32,0x33};						//pod 65k
	static char MyChar3] = {0x31,0x32,0x33,0x34,0x35,0x36};	//nad 65k

	prom0 = atol(MyChar0);
	prom1 = atoi(MyChar0); 
	
	prom2 = atol(MyChar1);
	prom3 = atoi(MyChar1);

	prom4 = atol(MyChar2);
	prom5 = atoi(MyChar2);

	prom6 = atol(MyChar3);
	prom7 = atoi(MyChar3);

	static unsigned long int prom;   // static jen pro ladìní v simulátoru
	char text] = "123456";
	prom = atol(text);



while(1){
	asm volatile("nop");

	PORTA=prom0;
	PORTB=prom1;
	PORTC=prom2;
	PORTD=prom3;

	PORTA=prom4;
	PORTB=prom5;
	PORTC=prom6;
	PORTD=prom7;

	PORTD=prom;
}		

}
[/code]
watch.PNG

A co si třeba načíst hlavičkovej soubor od knihovny, ve který se funkce nachází :wink:.

Varování překladače tě očividně moc neznervózňujou.

:laughing: Díky.