Show Posts
Pages: 1 ... 462 463 [464] 465 466 ... 740
6946  International / Megatopic / Re: swRTC on: January 17, 2012, 05:55:19 pm
il problema deriva dal fatto che se leggi attentamente la storia del timestamp, scopriresti che in realtà anche lui ha un errore da calcolare
6947  International / Megatopic / Re: swRTC on: January 17, 2012, 05:19:22 pm
ad occhio hai solo sbagliato le dimensioni delle costanti

adesso son troppo fuso per controllare, magari domani mattina

edit: macchè domani mattina.. lavoro! magari domani sera (uff!!!) smiley-mr-green
6948  International / Generale / Re: Progetto torre di hanoi on: January 17, 2012, 05:18:00 pm
anche un paio di sensori di pressione sulla "pinza" potrebbero far comodo. per contare il numero di dischi, un ping sensor (che puoi fare con 2 led, vedi su questo forum) è abbastanza semplice, se sfrutti il fatto che di lato la torer è una scaletta smiley e a questo punto diventa anche abbastanza semplice individuare il "palo" in cui inserire l'anello

l'algoritmo p una baggianata, io l'ho scoperto giocandoci, magari non è ottimizzato ma fondamentalmente; se devi spostare una torre di pari anelli, il primo lo metti dove NON vuoi arrivare dei 2 pali liberi, viceversa se dispari.
facile no?
6949  International / Megatopic / Re: [Multicotteri]Elettronica di potenza e telai : Batterie - ESC -Motori e cablaggi on: January 17, 2012, 05:10:51 pm
allora, gli esc escono di fabbrica con già un range impostato. La cosa ideale è rifare la procedura di settaggio se l'ESC lo permette, altrimenti colleghi l'esc all'arduino, e con uno sketch vari il valore in uscita alla servo in modo da trovare il range minimo e massimo, e cambiare di conseguenza le impostazioni all'interno del programma di controllo.

per esempio io ho usato questo:

Code:
#include <Servo.h>
#define PIN_MOTORE 3

Servo motore = Servo();

void setup(){
  Serial.begin(19200);
  motore.attach( PIN_MOTORE, 700, 2500 );
}

int enginePower=0;
unsigned long lastPrint=0;
void loop(){
  boolean lettoQualcosa=false;
  while (Serial.available() > 0){
    char letto = Serial.read();
    lettoQualcosa=true;
    switch(letto){
      case '-':
        enginePower--;
        motore.write(enginePower);
        break;
      case '+':
        enginePower++;
        motore.write(enginePower);
        break;
      case 's':
        enginePower=0;
        motore.write(enginePower);
        break;
    }
  }
  if (lettoQualcosa){
    Serial.print("new power: ");
    Serial.println(enginePower);
  }
  if (millis() - lastPrint > 1000){
    lastPrint=millis();
    Serial.println(enginePower);
  }
}

come noterete con + e - aumentate e diminuite enginePower (valore max 180, min 0, secondo la libreria Servo), noterete che con enginePower a 0 probabilmente gli ESC non si armano, infatti 700 è un valore troppo basso per la maggior parte degli esc, e 2500 troppo alto (l'esc si resetta). Con s otterrete lo stop immediato dei motori.
Una volta che avete ottenuto il valore di enginePower minimo (chiamiamolo enginePowerMin) e massimo (chiamiamolo enginePowerMax), otterrete i valori da impostare con 2 map:
valoreMin = map(enginePowerMin, 0, 180, 700, 2500);
valoreMax = map(enginePowerMax, 0, 180, 700, 2500);
6950  International / Megatopic / Re: swRTC on: January 17, 2012, 04:55:43 pm
Ah, hai ricontrollato la funzione per avere il timestamp? Perché va avanti di un giorno? Eppure il codice mi pare corretto!

davvero? ma quale, la tua quale delle 2, o la tua?
6951  International / Megatopic / Re: [Multicotteri]Elettronica di potenza e telai : Batterie - ESC -Motori e cablaggi on: January 17, 2012, 02:48:03 pm
sì, gli ESC hanno una memoria interna, una volta fatto il setup deviu rifarlo solo se cambi i paramentri di min e max nel codice
6952  International / Generale / Re: anche su 1.0 le stringhe mi fanno impazzire.. on: January 17, 2012, 02:03:47 pm
basta osservare la wstring.cpp:


Code:
String & String::operator = (const char *cstr)
{
if (cstr) copy(cstr, strlen(cstr));
else invalidate();

return *this;
}

nel tuo caso "" finisce puntato da &cstr, e if (cstr) credo ritorni false... quindi viene invalidato:

Code:
void String::invalidate(void)
{
if (buffer) free(buffer);
buffer = NULL;
capacity = len = 0;
}

come puoi vedere ora il buffer è NULL. Ora quando fai += credo che avvenga un casino della madonna. Se è così è un bug della libreria.
6953  International / Generale / Re: ARDUINO e STEPPER 17PU-h324-G2VS on: January 17, 2012, 01:52:21 pm
[cancellato per eccesso di ignoranza  smiley-mr-green ]
6954  International / Megatopic / Re: swRTC on: January 17, 2012, 01:30:11 pm
questo funziona:
comuqnue ad occhio hai solo sbagliato le dimensioni delle costanti
Code:
int swRTC::updateDate(){
  unsigned long time = getTimestamp();
/* 
  Serial.print( "timestamp: " );
  Serial.println( time );
*/
  unsigned long day = time/(60L*60L*24L);
  float remaining = time-day*(60L*60L*24L);
/* 
  Serial.println( remaining );
 
  Serial.print( "day: " );
  Serial.println( day );
*/ 
  int year = (day / 365.2422);
  float dayRemaining = day-year*365.2422;
  year+=1900;
/* 
  Serial.print( "year: " );
  Serial.println( year );
  Serial.println( dayRemaining );
*/
  if (dayRemaining>=365.2422)
    return 1;//my math is wrong!
 
  if (year<1900)
    return 2;//year not supported!
/* 
  Serial.print( "dayRemaining: " );
  Serial.println( dayRemaining );
*/
  int month=0;
  while (dayRemaining > daysPerMonth[month]){
    dayRemaining -= daysPerMonth[month];
//    Serial.print( "added month: " );
//    Serial.println( dayRemaining );
    month++;
  }
 
  month++;//because month 0 doesn't exist
/* 
  Serial.print( "month: " );
  Serial.println( month );
*/ 
  if (month>12)
    return 3;//my math is wrong!
 
//  Serial.println( dayRemaining );
 
  if (dayRemaining>=(60L*60L*24L))
    return 4;//my math is wrong!
/*
  Serial.print( "dayRemaining: " );
  Serial.println( dayRemaining );
*/
  day=dayRemaining;
  if (dayRemaining-day>0){ //add partial day!
    day++;
  }
 
  int hours = remaining/(60L*60L);
  remaining = remaining-hours*(60L*60L);
/* 
  Serial.println( remaining );
 
  Serial.print( "hours: " );
  Serial.println( hours );
*/
  if (remaining>=(60L*60L))
    return 5;//my math is wrong!
 
  int minutes = remaining/(60L);
  remaining = remaining-minutes*(60L);
/*
  Serial.print( "minutes: " );
  Serial.println( minutes );
 
  Serial.print( "seconds: " );
  Serial.println( remaining );
*/ 
  if (remaining>=60)
    return 6;//my math is wrong!
   
  now.year = year;
  now.month = month;
  now.day = day;
  now.hour = hours;
  now.minute = minutes;
  now.second = remaining; 
  return 0;
}
6955  International / Megatopic / Re: [Multicotteri]Elettronica di potenza e telai : Batterie - ESC -Motori e cablaggi on: January 17, 2012, 07:29:10 am
ah tu alimenti arduino in modo indipendente dagli esc, corretto?
bel casino, magari puoi mettere un tasto che blocca l'esecusione, e che premi quando colleghi i motori, oppure usi il relè
6956  International / Generale / Re: Hardware debounce in pull-down on: January 16, 2012, 06:46:49 pm
no mauro, gli interrupt on change (se non sui due pin interrupt), lavorano sul registro. quindi devi avere una copia del byte rappresentante gli 8 registri, fare una xor (se non erro) tra nuova e vecchia immagine, e ottieni i un byte con 1 ai pin che hanno cambiato di valore. oppure in questo caso puoi direttamente estrarre un bit usando una AND tra il registro e 2^(bit che vuoi leggere da 0 a 7)

Quote
Mi pare che astro si riferisse a delle macro cbi e sbi
esatto:

Code:
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
6957  International / Generale / Re: Hardware debounce in pull-down on: January 16, 2012, 06:03:59 pm
La questione che avevo posto relativamente al debounce sw su interrupt, e che poi ha scatenato i luminari dell'elettronica, era abbastanza banale:
considerando che in caso di interrupt, non ho una routine nel loop che va a leggermi lo stato del pin continuamente, guadagno qualcosa o no in termine di risorse Arduino (chiaramente nei casi dove è possibile utilizzare interrupt)?

bhe considera che anziche chiamare digitalread stai chiamando un sacco di volte una funzione di interrupt... La via più efficace IHMO è usare le funzioni che qualche tempo fa astro aveva postato, e che effettuano una digitalRead in tipo 3 o 4 istruzioni assembly
6958  International / Generale / Re: Hardware debounce in pull-down on: January 16, 2012, 06:01:30 pm
io vedo 3 soluzioni possibili:
1. conteggio degli interrupt: tu dai per scontato che tot interrupt sono da considerare una pressione minima, se ne leggi di più consideri ancora il pulsante on ma azzeri il conteggio, e via dicendo. Svataggio: un sacco di interrupt, e non repetibilità su altro HW, o persino sullo stesso HW su diverse condizioni ambientali.
2.interrupt con delay: non si può fare, in quanto gli interrupt sono bloccati
3. tempo dall'ultimo interrupt: fattibile, ma a questo punto anzichè considerare l'interrupt consideri direttamente una digitalRead sul pin.
Certo potresti avere la sfiga di leggere per X volte sempre low e avere un falso off... ma le probabilità?

questa opzione diventa ideale se il loop dura parecchio tempo, e una gestione del tasto ha senso essere eseguita in differita.
6959  International / Generale / Re: Tutorial sensore di distanza a LED lineare on: January 16, 2012, 04:46:58 pm
eheh robba buona, fatta in casa smiley

http://www.gioblu.com/prodotti?page=shop.product_details&flypage=flypage_images.tpl&product_id=184&category_id=63
6960  International / Generale / [Votazione 1,5 di 2]Quali argomenti? on: January 16, 2012, 03:42:09 pm
Dando per scontato che alla votazione ha vinto "Diviso per argomento" (vedere http://arduino.cc/forum/index.php/topic,81690.0.html e discussioni successive a pagina 4)
che divisione per argomenti proponete? cercate di evitare gli off-topic proponendo divisioni alternative (uwe aiutami tu, sfodera il delete-hammer  smiley-twist smiley-twist).

Non serve che postiate 100 volte le stesse divisioni, e vanno bene anche variazioni minime, tutte verranno incluse quì e poi nel sondaggio.


direi data di scadenza: 23/01/2012 (una settimana tonda tonda)
edit: link per votare: http://arduino.cc/forum/index.php/topic,88405.0.html


Queste sono le proposte che ho recuperato dai 2 thread precedenti che soddisfano la divisione per argomenti
Quote
   automazione
    comunicazione
    sensori
    altro

Quote
1)  domande sul funzionamento generale di Arduino / getting started
2)  progetti comuni
3)  incontri e chiacchere moderate attinenti ad elettronica e informatica in generale

Optional:
4)  arduino e internet
5)  arduino e robotica

Quote
* Consigli e domande su Arduino e di elettronica, domande di approfondimento, anche per chi vuole incominciare.
* Arduino INPUT: tutto quello che si puó attacare a Arduino e gli da dati o segnali; elettronica e programmazione.
* Arduino OUTPUT: tutto quello che puó essere pilotato da Arduino; elettronica e programmazione.
* Progetti Arduino (presentazione progetti e oggetti terminati e aiuto in progetti in elaborazione o ancora da incominciare)
* Incontri, attivitá, fiere, una pizza con amici Arduino, ...
* Sesta opzione da definire

Quote
reti
attuatori
sensori

Quote
- Shield
- Programmazione
- Sensori
- Project
- Bar
- Mercato

Quote
Principianti (letteralmente "coloro che principiano"):

    gente che deve ancora comprare Arduino o che vuole sapere come si collega un led o che, in generale, ritiene di sapere molto poco. Ratto93 come moderatore di questa sezione lo vedrei a meraviglia.

Esperti:

    problematiche hardware e software di livello più elevato; chi apre un Topic in questa sezione deve ritenersi in possesso di basi decenti per poter trattare una problematica di spessore ed essere in grado di interloquire con chi interviene, senza fare domande del tipo "scusa cos'è il delay?

Elettronica:

    tutto ciò che riguarda componentistica di varia natura, per il cui uso è necessario conoscere questa materia, parliamo di interfacciamenti con sensori ed attuatori, dalla fotoresistenza al relé


Progetti:

    Sezione dedicata ai progetti in fase di sviluppo, con tolleranza verso le idee di progetto. Possono nascere delle collaborazione o competizioni tra utenti che stanno sviluppando la stessa cosa


Bar, quattro chiacchere o  svago:

    Questo non necessità di descrizione, ma si può anche descrivere come ci si deve comportare al bar, onde evitare risse da bar

Quote
1 - Principianti o Argomenti basilari o Arduino base
2 - Esperti o Argomenti avanzati o Arduino avanzato
3 - Elettronica

Quote
INTERFACCIAMENTO (problematiche e soluzioni eventuali legate all'utilizzo di Arduino, con componentistiche esterne)

- ROBOTICA (Driver, sensori, attuatori, encoder, feedback correzione errore assi)

- RETI (protocolli utilizzati e specifiche tecniche, wireless)

- PROGRAMMAZONE (condivisione librerie, corretta stesura del codice, errori comuni)

- ELETTRONICA GENERALE (Sezione che definirei molto importante, porte logiche. specifiche su componentistiche attive e passive, formule, corretto dimensionamento dei componenti, misurazioni, datasheet)

Quote
- Attuatori
- Sensori
- Boards & Shield
- Programmazione
- Programmazione lato internet (questa per risolvere la marea di post tipo: "ethernet shield & PIPPO", "ethernet shield & PLUTO", "ethernet shield & PAPERINO", etc etc)
- Bar (quindi pure mercatino) - Però non troppo cazzeggio!
Pages: 1 ... 462 463 [464] 465 466 ... 740