Frage zu typecast

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 :confused:

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.

Schau mal hier: Wie rechnet man mit 32-Bit Zahlen mit der Arduino IDE? - Deutsch - Arduino Forum

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

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

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, .....

sorry hab ich übersehen

Ach deshalb. ohne Ul geht's natürlich

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))