| |
| | #2 (permalink) Top |
| Adv Moderator Data registr.: 15-08-2007 Residenza: sto a Massa ma sono molto Positivo
Messaggi: 12.070
| Comunque nel tuo programma vedo due cosucce che non mi piacciono proprio... la prima usare un float.... non serve 500/1024 = 0.488 approssimiamolo a 0.48 uint16_t temp; temp=analog_read(analog_pin); temp=((temp*100)/48); siccome tuttavia temp può arrivare a 1024 temp *100 eccederebbe 65535 allora riscriviamo come: temp=((temp*25)/12); a questo punto temp contiene la temperatura moltiplicata per 100 ti lascio il compito a casa per capire come dividerla e metterci il punto. Suggerimento... lavora sulla stringa prodotta da itoa. se comunque insisti nel usare i float: Con il tuo codice: Dimensione del file binario dello sketch: 4.904 bytes (su un massimo di 32.256 bytes) sostituisci quell' 5.0*temp*100.0 con 500.0 *temp Dimensione del file binario dello sketch: 4.892 bytes (su un massimo di 32.256 bytes) 12 bytes risparmiati.... Comunque.... regola numero uno: non usare float se non ci sei costretto regola numero due: per quanto possa essere buono un compilatore, l'ottimizzazione è meglio se la fai tu, non fare due moltiplicazioni se puoi farne una...
__________________ Vivere in qeusto mondo e molto belo belo e vale la pena starci ma a volte in questa UNICA vita che ci apartiene posono succedere cose brute brute alora mi chiedo perche siete incazziati domani pole esere anche lultimo Grazie "TRANQUILLO" FAI 15766 Ultima modifica di romoloman : 24 dicembre 12 alle ore 01:22 |
| | |
| | #3 (permalink) Top | |
| User Data registr.: 23-04-2008 Residenza: Firenze
Messaggi: 1.108
| Citazione:
http://arduino.cc/forum/ C'è anche una sezione in italiano. E poi ci sono i libri, io ho iniziato con uno di quelli. Sent from my Xoom using Tapatalk HD
__________________ 1) Honey Bee FP 2) Mini Titan (V1 e V2) 3) Paracopter 4) Ultra-Micro J-3 Cub 5) Blade msr 6) Ultra-Micro T-28 Trojan 7) Team Losi Mini T 8) Blade mcpx 9) Turnigy 1/16 Nitro Buggy 10) Basher Nictro Circus 1/10 SCT | |
| | |
| | #4 (permalink) Top | |
| User Data registr.: 08-08-2011 Residenza: Roma
Messaggi: 5.806
| Citazione:
Carlo
__________________ Dai un pesce ad un uomo e lo avrai sfamato per un giorno, insegnagli a pescare e lo avrai sfamato per sempre. (Confucio) I miei modelli: http://www.youtube.com/results?search_query=carloroma63 | |
| | |
| | #5 (permalink) Top |
| User Data registr.: 02-05-2006 Residenza: Torino
Messaggi: 449
| Ciao, vorrei farvi una domanda da ignorante e forse un pò da presuntuoso! HAhaha! ![]() Ho acquistato e ho già fritto il mio primo arduino UNO ora ne ho due funzionanti... ![]() E mi sono subito reso conto che la quantità di memoria e la possibilità di far fare molte operazioni insieme è un pò difficile ma mi doamando, essendo collegato a un PC ma non c'è il modo di far ragionare il PC e far caricare il programma giusto ad arduino? Lo sò caricare il programma è in qualche modo lento però mi sembra di usare un motore di una ferrari e far partire un motorino (scooter)?!? Certo che una domanda del genere son la farei sul forum di arduino... Se poi cos'ho pensato è una castroneria riposo il fisco sulla mensola! Grazie a chiunque mi tolga questo dubbio dubbioso ... Marco.
__________________ son nato dopo l' uovo e la gallina... Garage: non sono le cose a fare il modellista. |
| | |
| | #6 (permalink) Top | |
| Adv Moderator Data registr.: 15-08-2007 Residenza: sto a Massa ma sono molto Positivo
Messaggi: 12.070
| Citazione:
Ti assicuro comunque che con una buona ottimizzazione di codice di cose in 32K se ne fanno parecchie.
__________________ Vivere in qeusto mondo e molto belo belo e vale la pena starci ma a volte in questa UNICA vita che ci apartiene posono succedere cose brute brute alora mi chiedo perche siete incazziati domani pole esere anche lultimo Grazie "TRANQUILLO" FAI 15766 | |
| | |
| | #7 (permalink) Top |
| User Data registr.: 02-05-2006 Residenza: Torino
Messaggi: 449
| Rieccomi, io in realtà stò cercando di imparare e volevo riassemblare un mio vecchio robottone alto 50 Cm... Pensavo compro i pezzi lo rimonto e per proverò a programmare... Non vorrei fare una domanda mulfiforum ma le risposte che ho avuto sono discordanti e non sò se c'è della malizia ma mi è stata data risposta del tipo devi comprare le schede aggiuntive, su un sito che non sò se si può linkare invece c'è una persona che gestisce 6 servi con arduino senza nessuna scheda aggiuntiva, per esempio. Io nel mio piccolo vorrei gestire 10 servi e 2 matrici led e poi vediamo come me la cavo. Non ho chissà che urgenze e con calma monterò il tutto, all'inizio i movimenti sul "terreno" li farà tramite TX e RX da aereo... Cavolo non son riuscito a essere più sintetico, Marco.
__________________ son nato dopo l' uovo e la gallina... Garage: non sono le cose a fare il modellista. |
| | |
| | #8 (permalink) Top |
| User Data registr.: 23-04-2008 Residenza: Firenze
Messaggi: 1.108
|
Interessante... non posso darti alcuna risposta però mi hai fatto venire in mente che io ho un nunchuk col joystick guasto nel cassetto. Però l'accelerometro probabilmente va... Ma che vantaggio c'è (a parte la soddisfazione del fai da te) ad usare un nunchuk piuttosto che un accelerometro da pochi euro? Inviato dal mio HTC Wildfire S A510e con Tapatalk 2
__________________ 1) Honey Bee FP 2) Mini Titan (V1 e V2) 3) Paracopter 4) Ultra-Micro J-3 Cub 5) Blade msr 6) Ultra-Micro T-28 Trojan 7) Team Losi Mini T 8) Blade mcpx 9) Turnigy 1/16 Nitro Buggy 10) Basher Nictro Circus 1/10 SCT |
| | |
| | #9 (permalink) Top | |
| User Data registr.: 08-08-2011 Residenza: Roma
Messaggi: 5.806
| Citazione:
![]() Aggiungici che tutto intero e già completo costa veramente pochi .... Carlo
__________________ Dai un pesce ad un uomo e lo avrai sfamato per un giorno, insegnagli a pescare e lo avrai sfamato per sempre. (Confucio) I miei modelli: http://www.youtube.com/results?search_query=carloroma63 | |
| | |
| | #10 (permalink) Top | |
| User Data registr.: 08-08-2011 Residenza: Roma
Messaggi: 5.806
| Citazione:
Carlo __________________________________________________ _________________ #include <Servo.h> #include <SoftI2CMaster.h> #include <LiquidCrystal.h> LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7); Servo myservo; // create servo object to control a servo const byte sdaPin1 = 3; // digital pin 1 wired to 'd' on BlinkM const byte sclPin1 = 2; // digital pin 0 wired to 'c' on BlinkM const byte sdaPin2 = 1; // digital pin 3 wired to 'd' on BlinkM const byte sclPin2 = 0; // digital pin 2 wired to 'c' on BlinkM SoftI2CMaster i2c = SoftI2CMaster( sdaPin1,sclPin1 ); SoftI2CMaster i2d = SoftI2CMaster( sdaPin2,sclPin2 ); int val; // variable to read the value from the analog pin int loop_cnt; static uint8_t nunchuck_bufa[6]; // array to store nunchuck data, static uint8_t nunchuck_bufa1[6]; // array to store nunchuck data, static uint8_t nunchuck_bufa2[6]; // array to store nunchuck data, static uint8_t nunchuck_bufa3[10]; // array to store nunchuck data, static uint8_t nunchuck_bufa4[10]; // array to store nunchuck data, static uint8_t nunchuck_bufa5[10]; // array to store nunchuck data, static uint8_t nunchuck_bufb[6]; // array to store nunchuck data, static uint8_t nunchuck_bufb1[6]; // array to store nunchuck data, static uint8_t nunchuck_bufb2[6]; // array to store nunchuck data, static uint8_t nunchuck_bufb3[10]; // array to store nunchuck data, static uint8_t nunchuck_bufb4[10]; // array to store nunchuck data, static uint8_t nunchuck_bufb5[10]; // array to store nunchuck data, int joy_x_axisa; int joy_y_axisa; int accel_x_axisa; int accel_y_axisa; int accel_z_axisa; int z_buttona; int c_buttona; int joy_x_axisb; int joy_y_axisb; int accel_x_axisb; int accel_y_axisb; int accel_z_axisb; int z_buttonb; int c_buttonb; static void nunchuck_init() { i2c.beginTransmission(0x52);// transmit to device 0x52 i2c.send(0x40);// sends memory address i2c.send(0x00);// sends sent a zero. i2c.endTransmission();// stop transmitting i2d.beginTransmission(0x52);// transmit to device 0x52 i2d.send(0x40);// sends memory address i2d.send(0x00);// sends sent a zero. i2d.endTransmission();// stop transmitting } static void nunchuck_send_request(byte n) { if(n==1){ i2c.beginTransmission(0x52);// transmit to device 0x52 i2c.send(0x00);// sends one byte i2c.endTransmission();// stop transmitting }else{ i2d.beginTransmission(0x52);// transmit to device 0x52 i2d.send(0x00);// sends one byte i2d.endTransmission();// stop transmitting } } static int nunchuck_get_data(byte n) { if(n==1){ nunchuck_send_request(1); // send request for next data payload i2c.requestFrom (0x52); // request data from nunchuck // receive byte as an integer nunchuck_bufa[0] = i2c.receive(); nunchuck_bufa[1] = i2c.receive(); nunchuck_bufa[2] = i2c.receive(); nunchuck_bufa[3] = i2c.receive(); nunchuck_bufa[4] = i2c.receive(); nunchuck_bufa[5] = i2c.receiveLast(); }else{ nunchuck_send_request(2); // send request for next data payload i2d.requestFrom (0x52); // request data from nunchuck // receive byte as an integer nunchuck_bufb[0] = i2d.receive(); nunchuck_bufb[1] = i2d.receive(); nunchuck_bufb[2] = i2d.receive(); nunchuck_bufb[3] = i2d.receive(); nunchuck_bufb[4] = i2d.receive(); nunchuck_bufb[5] = i2d.receiveLast(); } } static void nunchuck_process_data(byte n) { static int i=0; if(n==1){ joy_x_axisa = nunchuck_bufa[0]; joy_y_axisa = nunchuck_bufa[1]; accel_x_axisa = nunchuck_bufa[2]; // * 2 * 2; accel_y_axisa = nunchuck_bufa[3]; // * 2 * 2; accel_z_axisa = nunchuck_bufa[4]; // * 2 * 2; z_buttona = 0; c_buttona = 0; // byte nunchuck_bufa[5] contains bits for z and c buttons switch (nunchuck_bufa[5] & 3) { case 0: z_buttona = 1; c_buttona = 1; break; case 1: z_buttona = 0; c_buttona = 1; break; case 2: z_buttona = 1; c_buttona = 0; break; case 3: z_buttona = 0; c_buttona = 0; break; } // eseguo la media delle ultime 6 o 60 letture, per rendere più stabili i valori joy_x_axisa=0; for (i=0;i<5;i++){ nunchuck_bufa1[i]=nunchuck_bufa1[i+1]; joy_x_axisa = joy_x_axisa + nunchuck_bufa1[i+1]; } nunchuck_bufa1[5]=nunchuck_bufa[0]; joy_x_axisa = (joy_x_axisa + nunchuck_bufa[0])/6; joy_y_axisa=0; for (i=0;i<5;i++){ nunchuck_bufa2[i]=nunchuck_bufa2[i+1]; joy_y_axisa = joy_y_axisa + nunchuck_bufa2[i+1]; } nunchuck_bufa2[5]=nunchuck_bufa[1]; joy_y_axisa = (joy_y_axisa + nunchuck_bufa[1])/6; accel_x_axisa=0; for (i=0;i<9;i++){ nunchuck_bufa3[i]=nunchuck_bufa3[i+1]; accel_x_axisa = accel_x_axisa + nunchuck_bufa3[i+1]; } nunchuck_bufa3[9]=nunchuck_bufa[2]; accel_x_axisa = (accel_x_axisa + nunchuck_bufa[2])/10; accel_y_axisa=0; for (i=0;i<9;i++){ nunchuck_bufa4[i]=nunchuck_bufa4[i+1]; accel_y_axisa = accel_y_axisa + nunchuck_bufa4[i+1]; } nunchuck_bufa4[9]=nunchuck_bufa[3]; accel_y_axisa = (accel_y_axisa + nunchuck_bufa[3])/10; accel_z_axisa=0; for (i=0;i<9;i++){ nunchuck_bufa5[i]=nunchuck_bufa5[i+1]; accel_z_axisa = accel_z_axisa + nunchuck_bufa5[i+1]; } nunchuck_bufa5[9]=nunchuck_bufa[4]; accel_z_axisa = (accel_z_axisa + nunchuck_bufa[4])/10; }else{ joy_x_axisb = nunchuck_bufb[0]; joy_y_axisb = nunchuck_bufb[1]; accel_x_axisb = nunchuck_bufb[2]; // * 2 * 2; accel_y_axisb = nunchuck_bufb[3]; // * 2 * 2; accel_z_axisb = nunchuck_bufb[4]; // * 2 * 2; z_buttonb = 0; c_buttonb = 0; // byte nunchuck_bufa[5] contains bits for z and c buttons switch (nunchuck_bufb[5] & 3) { case 0: z_buttonb = 1; c_buttonb = 1; break; case 1: z_buttonb = 0; c_buttonb = 1; break; case 2: z_buttonb = 1; c_buttonb = 0; break; case 3: z_buttonb = 0; c_buttonb = 0; break; } // eseguo la media delle ultime 6 o 60 letture, per rendere più stabili i valori joy_x_axisb=0; for (i=0;i<5;i++){ nunchuck_bufb1[i]=nunchuck_bufb1[i+1]; joy_x_axisb = joy_x_axisb + nunchuck_bufb1[i+1]; } nunchuck_bufb1[5]=nunchuck_bufb[0]; joy_x_axisb = (joy_x_axisb + nunchuck_bufb[0])/6; joy_y_axisb=0; for (i=0;i<5;i++){ nunchuck_bufb2[i]=nunchuck_bufb2[i+1]; joy_y_axisb = joy_y_axisb + nunchuck_bufb2[i+1]; } nunchuck_bufb2[5]=nunchuck_bufb[1]; joy_y_axisb = (joy_y_axisb + nunchuck_bufb[1])/6; accel_x_axisb=0; for (i=0;i<9;i++){ nunchuck_bufb3[i]=nunchuck_bufb3[i+1]; accel_x_axisb = accel_x_axisb + nunchuck_bufb3[i+1]; } nunchuck_bufb3[9]=nunchuck_bufb[2]; accel_x_axisb = (accel_x_axisb + nunchuck_bufb[2])/10; accel_y_axisb=0; for (i=0;i<9;i++){ nunchuck_bufb4[i]=nunchuck_bufb4[i+1]; accel_y_axisb = accel_y_axisb + nunchuck_bufb4[i+1]; } nunchuck_bufb4[9]=nunchuck_bufb[3]; accel_y_axisb = (accel_y_axisb + nunchuck_bufb[3])/10; accel_z_axisb=0; for (i=0;i<9;i++){ nunchuck_bufb5[i]=nunchuck_bufb5[i+1]; accel_z_axisb = accel_z_axisb + nunchuck_bufb5[i+1]; } nunchuck_bufb5[9]=nunchuck_bufb[4]; accel_z_axisb = (accel_z_axisb + nunchuck_bufb[4])/10; } /* // parte necessaria per sfruttare anche i due bit degli accelerometri presenti nel sesto byte. if ((nunchuck_bufa[5] >> 2) & 1) accel_x_axis += 2; if ((nunchuck_bufa[5] >> 3) & 1) accel_x_axis += 1; if ((nunchuck_bufa[5] >> 4) & 1) accel_y_axis += 2; if ((nunchuck_bufa[5] >> 5) & 1) accel_y_axis += 1; if ((nunchuck_bufa[5] >> 6) & 1) accel_z_axis += 2; if ((nunchuck_bufa[5] >> 7) & 1) accel_z_axis += 1; */ } static void nunchuck_print_data() { // sets the servo position according to the scaled value val = joy_x_axisa ; // reads the value of the potentiometer (value between 0 and 1023) val = map(val, 0, 255, 0, 180); // scale it to use it with the servo (value between 0 and 180) myservo.write(val); // mostro sullo schermo LCD i dati ottenuti dal nunchuck lcd.setCursor(0, 0); lcd.print(joy_x_axisa); lcd.print(","); lcd.print(joy_y_axisa); lcd.print(" c="); lcd.print(c_buttona); lcd.print(" z="); lcd.print(z_buttona); lcd.print(" "); lcd.setCursor(0, 1); lcd.print(joy_x_axisb); lcd.print(","); lcd.print(joy_y_axisb); lcd.print(" c="); lcd.print(c_buttonb); lcd.print(" z="); lcd.print(z_buttonb); lcd.print(" "); delay(1000) ; lcd.setCursor(0, 0); lcd.print("x="); lcd.print(accel_x_axisa); lcd.print(" y="); lcd.print(accel_y_axisa); lcd.print(" z="); lcd.print(accel_z_axisa); lcd.print(" "); lcd.setCursor(0, 1); lcd.print("x="); lcd.print(accel_x_axisb); lcd.print(" y="); lcd.print(accel_y_axisb); lcd.print(" z="); lcd.print(accel_z_axisb); lcd.print(" "); delay(1000); } void setup() { nunchuck_init(); lcd.clear(); lcd.begin(16, 2); myservo.attach(45); } void loop() { if( loop_cnt > 100 ) { // every 100 cicli LOOP legge i dati loop_cnt = 0; nunchuck_get_data(1); nunchuck_process_data(1); nunchuck_get_data(2); nunchuck_process_data(2); nunchuck_print_data(); } loop_cnt++; }
__________________ Dai un pesce ad un uomo e lo avrai sfamato per un giorno, insegnagli a pescare e lo avrai sfamato per sempre. (Confucio) I miei modelli: http://www.youtube.com/results?search_query=carloroma63 | |
| | |
![]() |
| Bookmarks |
| |
Discussioni simili | ||||
| Discussione | Autore discussione | Forum | Commenti | Ultimo Messaggio |
| Coassiale mixed controller con arduino | catman | Circuiti Elettronici | 12 | 01 aprile 11 23:17 |
| quadricottero con arduino 2009 | sailormann26 | Aeromodellismo Progettazione e Costruzione | 0 | 27 dicembre 10 23:12 |