Black friday Black friday
Aprílový black friday tě nenechá v klidu! Až 80 % prémiového obsahu zdarma. Více informací
Pouze tento týden slevy až 80 % na programování v Javě

Diskuze: printf v Atmel Studiu nechce vypisovat čísla

C a C++ C a C++ printf v Atmel Studiu nechce vypisovat čísla American English version English version

Aktivity (1)
Avatar
Tomáš Kretek:9.12.2018 10:14

Ahoj, nevím jestli je tohle fórum dělané na tohle, ale zeptám se. Hraju si s deskou od Arduina a potřebuju zjistit hodnotu AD převodníku, ale to zjistím asi jedině tak, že si to přes printf vypíšu, protože ještě nemám funkční displej. No a vždycky když to chci vypisovat, napíše to chybu, že nemůže převést int do charu. Konkrétně: Severity Code Description Project File Line
Error invalid conversion from 'int' to 'const char*' [-fpermissive]

Zkusil jsem: Zkoušel jsem hledat na netu a našel jsem, že printf nechce zobrazovat čísla s desetinným číslem a vždycky se to tam nějak upravovalo různě, někdy i přimo v nastavení Atmel Studia, ale s totím si nevím rady. Poradí mi někdo prosím? Já mám za to, že printf umí vypisovat čísla normálně, ale v Atmel Studiu tomu asi tak není.

Editováno 9.12.2018 10:15
 
Odpovědět 9.12.2018 10:14
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na Tomáš Kretek
ostrozan:11.12.2018 18:59

Z tohoto nikdo nic nepozná, vlož sem tvůj kód.
Jinak printf umí samozřejmě formátovat i desetinná čísla (%f), ale je možné, že že je to nutné povolit někde v nastavení Atmel studia, protože práce s float docela dost vytěžuje procesor.
A ještě možná otázka - proč, když si hraješ s arduinem, nepoužíváš k tomu arduino IDE?
Možná by sis ušetřil spoustu starostí.

 
Nahoru Odpovědět  +1 11.12.2018 18:59
Avatar
Odpovídá na ostrozan
Tomáš Kretek:11.12.2018 19:39

Tak kód je takový:

#define F_CPU 16000000
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>

int main(void)
{
DDRC = 0xFF;
DDRA = 0xFF;
DDRL = 0xFF;
DDRB = 0x00;

PORTA = 0x00;
PORTC = 0x00;

// AREF = Internal 2,56V
ADMUX = (1<<REFS0)|(1<<REF­S1)|(1<<ADLAR);

// ADC Enable and prescaler of 128
// 16000000/128 = 125000
ADCSRA = 0b10100111;

// start single conversion
// write '1' to ADSC
ADCSRA |= (1<<ADSC);

while (1)
{

int adcValue = ADC;

printf(adcValue);

PORTL = 0xFF;
if(adcValue > 1024){
PORTL = 0x00;
_delay_ms(3);
}

}
}

No a Arduino IDE, to je otázka. My jsme se ve škole učili v Atmel Studiu a Atmel jako takový mi nepříjde zrovna moc složitý, narozdíl od STM, v tom jsem se nevyznal teda vůbec. Příjde mi to asi přirozenější vidět ten kód takový více otevřený, protože máš více možností a vidíš více co a jak děláš. Navíc na internetu je toho celkem dost, takže většinou najdeš nějaké řešení. U totoho si ale nevím rady.

U toho printf se teď ještě pozastavuju nad tím, jestli mi tam nechybí v těch závorkách nějaký ten argument, ale jestli to znáš více, tak mi to asi řekneš zrovna.

Editováno 11.12.2018 19:40
 
Nahoru Odpovědět 11.12.2018 19:39
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na Tomáš Kretek
ostrozan:12.12.2018 6:20

Vlastně sis odpověděl sám :)

printf("%u", adcValue) ;
 
Nahoru Odpovědět 12.12.2018 6:20
Avatar
Odpovídá na ostrozan
Tomáš Kretek:17.12.2018 19:46

Super, tak to je ono..Díky moc :)

Ale mám ještě jeden probém. Vždycky když chci použít nějakou knihovnu a něco vypsat na displej, napíše mi to několik chyb ohledně toho, že něco není definované, ikdyž to definované v té knihovně je.

Když tu dám odkaz na ty stránky z kama jsem to stáhl: https://github.com/…oled-display

A přiložím obrázek z Atmel Studia.. Tak je to tam vidět. Někde jsem četl, že u Atmel Studia 7 kvůli používání svých knihoven musí být povolený Advanced mode, někde že to musím přidat do Linkeru, což jsem zkoušel, ale nenašlo to cestu k té knihovně, protože to vždycky přes jméno té knihovny přidalo nějaké znaky navíc. No ale on tu knihovnu podle mě najde i takhle, jenomže to vždycky vyhodí takový typ chyby, ikdyž použíju jinačí knihovny. Nevíš proč to dělá?

 
Nahoru Odpovědět 17.12.2018 19:46
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.