HarryR
1
Hallo Leute;
wird die unten stehende Berechnung funtionieren ? (wg typecast)
unsigned int vol_v; // 0-4095
unsigned int tremI; // 0-60
unsigned int lfo_amplitude, // 0-4095
vol_v = vol_v - (unsigned int) ((unsigned long) vol_v * tremI * lfo_amplitude/409500);
viele grüße harry
Wenn sie compiliert, wird der Arduino auch was ausrechnen. Probier Sie doch mit deinen Maximalwerten aus und prüfe das Ergebnis.
Edit: Kompiliert nicht:
error: redeclaration of 'unsigned int vol_v'
ausserdem ist Hier:
unsigned int lfo_amplitude, // 0-4095
das Komma falsch, Tippfehler, muss semikolon sein
Ich denke, ich hätte es so gemacht:
unsigned int vol_v; // 0-4095
unsigned int tremI; // 0-60
unsigned int lfo_amplitude; // 0-4095
uint32_t temp=vol_v * tremI;
temp*=lfo_amplitude/409500UL;
vol_v = vol_v - temp;
Edit: Das geht aber auch nicht 
ElEspanol:
Wenn sie compiliert, wird der Arduino auch was ausrechnen. Probier Sie doch mit deinen Maximalwerten aus und prüfe das Ergebnis.
Edit: Kompiliert nicht:
error: redeclaration of 'unsigned int vol_v'
ausserdem ist Hier:
unsigned int lfo_amplitude, // 0-4095
das Komma falsch, Tippfehler, muss semikolon sein
Ich denke, ich hätte es so gemacht:
unsigned int vol_v; // 0-4095
unsigned int tremI; // 0-60
unsigned int lfo_amplitude; // 0-4095
uint32_t temp=vol_v * tremI;
temp*=lfo_amplitude/409500UL;
vol_v = vol_v - temp;
Keine Gewähr.
ardubu
4
Da finde ich aber auch keine Antwort, wie
unsigned int vol_v=4095; // 0-4095
unsigned int tremI=60; // 0-60
uint32_t temp;
temp=vol_v * tremI;
Serial.println(temp);
ich in temp 245700 bekomme.
bei mir gibt es immer nur 49092
Du musst eine der Variablen auf unsigned long casten
ardubu
7
Da finde ich aber auch keine Antwort, wie
Code: [Select]
unsigned int vol_v=4095; // 0-4095
unsigned int tremI=60; // 0-60
uint32_t temp;
temp=vol_v * tremI;
ich in temp 245700 bekomme.
bei mir gibt es immer nur 49092
in dem du temp=(unsigned long)vol_v ul* tremI; schreibst
ardubu:
in dem du temp=(unsigned long)vol_v ul* tremI; schreibst
temp=(unsigned long)vol_v ul* tremI;
kompiliert bei mir nicht.
Bin aber inzwischen dahintergekommen. Danke
ardubu
9
temp=(unsigned long)vol_v ul* tremI;
kompiliert bei mir nicht.
warum kompeliert es bei dir nicht?
weil halt. Keine Ahnung:
sketch_aug24b.ino: In function 'void setup()':
sketch_aug24b:17: error: expected ';' before 'ul'
expected ';' before 'ul'
Wegen dem "ul". Was soll das da?
bin unschuldig. kam so von ardubu.
Wenn es bei ihm kompiliert, .....
Ach deshalb. ohne Ul geht's natürlich
HarryR
15
ElEspanol:
Wenn sie compiliert, wird der Arduino auch was ausrechnen. Probier Sie doch mit deinen Maximalwerten aus und prüfe das Ergebnis.
Edit: Kompiliert nicht:
error: redeclaration of 'unsigned int vol_v'
ausserdem ist Hier:
unsigned int lfo_amplitude, // 0-4095
das Komma falsch, Tippfehler, muss semikolon sein
Ich denke, ich hätte es so gemacht:
unsigned int vol_v; // 0-4095
unsigned int tremI; // 0-60
unsigned int lfo_amplitude; // 0-4095
uint32_t temp=vol_v * tremI;
temp*=lfo_amplitude/409500UL;
vol_v = vol_v - temp;
Edit: Das geht aber auch nicht :confused:
Ups, das war natürlich auch ein böser Typo :o))