01-03-2020, 19:43
Na elektrodzie jeden użytkownik podał inny sposób też działa.
String test="40000001";
Serial.println(atol(test.c_str()));
String test="40000001";
Serial.println(atol(test.c_str()));
Ocena wątku:
duże liczby - zamiana stringa na double lub float
|
(01-03-2020, 16:14)m72 napisał(a): Liczby typu float muszą być bo takimi liczbami z arduino jest karmiony generator na AD9850 który ma dokładność ułamków Hertza zasięg do kilkudziesięciu MHz więc muszę mieć możliwość zapodania liczby np 19000123.1Hz
#define W_CLK 8
#define FQ_UD 9
#define DATA 10
#define RESET 11
#define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); }
void setup() {
pinMode(FQ_UD, OUTPUT);
pinMode(W_CLK, OUTPUT);
pinMode(DATA, OUTPUT);
pinMode(RESET, OUTPUT);
pulseHigh(RESET);
pulseHigh(W_CLK);
pulseHigh(FQ_UD);
sendFrequency(1000000);
}
void loop() {
}
void sendFrequency(double frequency) {
int32_t freq = frequency * 4294967295/125000000;
for (int b=0; b<4; b++, freq>>=8) {
transfer_byte(freq & 0xFF);
}
transfer_byte(0x000);
pulseHigh(FQ_UD);
}
void transfer_byte(byte data)
{
for (int i=0; i<8; i++, data>>=1) {
digitalWrite(DATA, data & 0x01);
pulseHigh(W_CLK);
}
}
void test(int32_t x){
for (int b=0; b<4; b++, x>>=8) {
transfer_byte(x & 0xFF);
}
transfer_byte(0x000);
pulseHigh(FQ_UD);
}