:: Fiat Stilo e Bravo Club > STC&BC198 ::
La Comunità italiana indipendente (forum-sito-club) dedicata alla Fiat Stilo '192' ed alla nuova Fiat Bravo '198'
Oggi è venerdì 29 marzo 2024, 1:24

Tutti gli orari sono UTC + 1 ora





Apri un nuovo argomento Rispondi all’argomento  [ 271 messaggi ]  Vai alla pagina Precedente  1 ... 8, 9, 10, 11, 12, 13, 14  Prossimo
Autore Messaggio
 Oggetto del messaggio: Re: Emulatore CD changer/AUX
Numero Post: 201 MessaggioInviato: giovedì 26 maggio 2011, 0:06 
Non connesso
Moderatore
Moderatore
Avatar utente

Iscritto il: venerdì 8 ottobre 2004, 23:00
Messaggi: 4313
Località: Cavenago di Brianza (MB)
Marca: Fiat
Modello: Stilo 3p (192) 2001-2006
Motore: 2400 20v 170
Anno: 2003
Allestimento: Abarth selespeed
Esatto ;)

_________________

Fiat Seicento SX MPI: Cerchi mini-pentarazze, contagiri Sporting, volante/cambio in pelle Sporting linea accessori, DRL Stealth, assetto -30mm, tubi freno in treccia
Stilo Abarth Selespeed 3p Type1 : interni in pelle nera, impianto GPL a iniezione liquida Vialle LPi, Cerchi 17" color grafite, Kit video su Connect Nav+, emulatore CDC, lettore dvd/divx, fari Dectane neri, pinze rosse, specchietti con calotte cromate, griglie anteriori color grafite, strisce laterali Abarth color grafite by Rafty e mascherina "Electricsheep"... tutto, o quasi, fai-da-te.
Mercedes Benz C218 CLS350 CDI AMG line: tutta originale che è aziendale (vabbè una rimappaturina...)

Peugeot Speedfight 50LC: marmitta rovesciata Giannelli omologata, gruppo termico Malossi Hyper Racing, variatore Polini Hi-Speed, pneumatici Michelin Bopper
Peugeot Satelis RS250: variatore Malossi Multivar, pneumatici Michelin City Grip 2 estivi/Heidenau invernali... e il tutto in perenne modifica, prossimi step: motore ibrido e strumentazione con Android Auto
Benelli Leoncino 500: cupolino fumè, bauletto, borse laterali, borsa officina tutto Givi


Top
 Profilo E-mail  
 
 Oggetto del messaggio: Re: Emulatore CD changer/AUX
Numero Post: 202 MessaggioInviato: martedì 7 giugno 2011, 18:53 
Non connesso
BRAVO-STILOso di Passaggio

Iscritto il: martedì 3 maggio 2011, 18:10
Messaggi: 15
Località: Chieri TO
Marca: Fiat
Modello: Stilo 3p (192) 2001-2006
Motore: 1800 16v 133
Anno: 2003
Allestimento: Gt
Ciao a tutti ragazzi!
Mi rivolgo in particolar modo ad andrea81!
Volevo chiederti: i cavi che trasmettono i dati dall'emulatore al connect e viceversa (blu e verdi per intenderci) devono essere per forza inseriti nei PIN 2 e 3? Non posso collegarli al 4 e 5 o 8 e 9? Perchè io ho fatto il circuitino e mi funzionava perfettamente; metto a posto cavi e roba varia e mi si sono rotti dentro i pin quei 2 cavetti :incazz: !
Anche se c'è da modificare il programma, va bene, meglio di doverne comprare una nuova!
Fatemi sapere!
Grazie mille!


Top
 Profilo E-mail  
 
 Oggetto del messaggio: Re: Emulatore CD changer/AUX
Numero Post: 203 MessaggioInviato: mercoledì 8 giugno 2011, 22:06 
Non connesso
BRAVO-STILOso di Passaggio

Iscritto il: martedì 3 maggio 2011, 18:10
Messaggi: 15
Località: Chieri TO
Marca: Fiat
Modello: Stilo 3p (192) 2001-2006
Motore: 1800 16v 133
Anno: 2003
Allestimento: Gt
Buonasera!
Allora confermo che i Pin analogici sono uguali e quindi, con variazione del codice, funziona anche con il 4 e il 5.
Andrea81: ho testato l'emulatore su connect nav+ 11.0 e funziona tutto alla grande! Secondo me, però, è assolutamente necessario il reset automatico!
Quel codice scritto da maniglia (pag. 10) funziona? qualcuno l'ha provato?
Altrimenti potrebbe funzionare mettere un interruttore sul cavo dell'alimentazione 12V (quello rosso del circuitino) in modo da togliere e mettere corrente?
Sarebbe come staccare il mini iso e staccando il mini iso funziona!
Fatemi sapere
ciao a tutti


Top
 Profilo E-mail  
 
 Oggetto del messaggio: Re: Emulatore CD changer/AUX
Numero Post: 204 MessaggioInviato: mercoledì 8 giugno 2011, 22:23 
Non connesso
Moderatore
Moderatore
Avatar utente

Iscritto il: venerdì 8 ottobre 2004, 23:00
Messaggi: 4313
Località: Cavenago di Brianza (MB)
Marca: Fiat
Modello: Stilo 3p (192) 2001-2006
Motore: 2400 20v 170
Anno: 2003
Allestimento: Abarth selespeed
senna89 ha scritto:
Altrimenti potrebbe funzionare mettere un interruttore sul cavo dell'alimentazione 12V (quello rosso del circuitino) in modo da togliere e mettere corrente?


Io ho fatto cosi :ok:

I pin di Arduino nel nostro caso sono tutti equivalenti (dato che emuliamo via software una porta seriale), basta "rimapparli" come hai fatto tu :ok:

Per il reset e tutto il resto... quando avrò tempo ci lavorerò, abbiate pazienza ma è una delle ultime cose (e ne ho tantissime in ballo) nella mia lista delle priorità :sick:

_________________

Fiat Seicento SX MPI: Cerchi mini-pentarazze, contagiri Sporting, volante/cambio in pelle Sporting linea accessori, DRL Stealth, assetto -30mm, tubi freno in treccia
Stilo Abarth Selespeed 3p Type1 : interni in pelle nera, impianto GPL a iniezione liquida Vialle LPi, Cerchi 17" color grafite, Kit video su Connect Nav+, emulatore CDC, lettore dvd/divx, fari Dectane neri, pinze rosse, specchietti con calotte cromate, griglie anteriori color grafite, strisce laterali Abarth color grafite by Rafty e mascherina "Electricsheep"... tutto, o quasi, fai-da-te.
Mercedes Benz C218 CLS350 CDI AMG line: tutta originale che è aziendale (vabbè una rimappaturina...)

Peugeot Speedfight 50LC: marmitta rovesciata Giannelli omologata, gruppo termico Malossi Hyper Racing, variatore Polini Hi-Speed, pneumatici Michelin Bopper
Peugeot Satelis RS250: variatore Malossi Multivar, pneumatici Michelin City Grip 2 estivi/Heidenau invernali... e il tutto in perenne modifica, prossimi step: motore ibrido e strumentazione con Android Auto
Benelli Leoncino 500: cupolino fumè, bauletto, borse laterali, borsa officina tutto Givi


Top
 Profilo E-mail  
 
 Oggetto del messaggio: Re: Emulatore CD changer/AUX
Numero Post: 205 MessaggioInviato: giovedì 9 giugno 2011, 0:01 
Non connesso
STILO-BRAVOso Sportivo

Iscritto il: giovedì 18 maggio 2006, 21:12
Messaggi: 2569
Località: Lecce
Marca: Alfa Romeo
Modello: moto-scarpa
Motore: 1600 mjet 16v 120
Anno: 2016
Allestimento: sexual
Ciao Andrea! Interessante il progetto... Devo comprarmi arduino al più presto. Do una occhiata al codice, mi pare di conoscere bene quella sintassi :D

Ci provo... Hai detto che hai un connect mezzo rotto... Nel mio si è rotto il modulo lettore CD... sul tuo funziona? Ti serve? Non mi andrebbe di spendere 3-400 euro per un connect "nuovo" solo per togliere il lettore... Se dovesse funzionare e non ti dovesse servire fammi sapere ;)

Grazie

EDIT:
Ho controllato i codici e non capisco quando serve fare il reset. L'ultimo codice inserito lo fa ad ogni ciclo... Mi pare di aver capito che serve questo reset quando si spegne l'autoradio. Quando si spegne l'autoradio dovrebbe inviare qualche segnale all'emulatore, giusto?

Secondo me il problema dell'ultimo codice è che stando ai numerosi delay che ci sono, può capitare che si spegne l'autoradio e si riaccende in un momento in cui arduino non ha ancora processato la riga di codice per il reset e quindi il reset stesso non funziona.
Si riesce a capire che stringa invia ad arduino il navigatore
Quando sta per spegnersi?

_________________
Stilostyle su FIAT Stilo 1.8 16v 133 cv Dynamic GRIGIO ORIONE
Cerchi Pentarazze con gomme Dunlop 215/45 ZR 17, mascherina anteriore My2006, bocchette areazione grigio Kyron, NAV+ con Kit Video, battitacco alluminio, poggiapiede StiloClub, Lampade Xenon 6.000K.

Per l'ennesima volta ho verniciato la pulsantiera, tra poco tocca al NAV! Maledette crepe!
IN ARRIVO: °° Vetri Oscurati °°


Top
 Profilo  
 
 Oggetto del messaggio: Re: Emulatore CD changer/AUX
Numero Post: 206 MessaggioInviato: giovedì 9 giugno 2011, 8:47 
Non connesso
BRAVO-STILOso di Passaggio

Iscritto il: martedì 3 maggio 2011, 18:10
Messaggi: 15
Località: Chieri TO
Marca: Fiat
Modello: Stilo 3p (192) 2001-2006
Motore: 1800 16v 133
Anno: 2003
Allestimento: Gt
Per Andrea 81: figurati ci mancherebbe! Era solo per dire che con quello sarebbe perfetto! Ora vado a provare quel codice col reset automatico e ti faccio sapere!
Per qualsiasi prova su connect nav+ firmware 11.0 resto a disposizione!


Top
 Profilo E-mail  
 
 Oggetto del messaggio: Re: Emulatore CD changer/AUX
Numero Post: 207 MessaggioInviato: giovedì 9 giugno 2011, 10:06 
Non connesso
BRAVO-STILOso di Passaggio

Iscritto il: martedì 3 maggio 2011, 18:10
Messaggi: 15
Località: Chieri TO
Marca: Fiat
Modello: Stilo 3p (192) 2001-2006
Motore: 1800 16v 133
Anno: 2003
Allestimento: Gt
Ragazzi!
Provato codice con reset automatico: il LED L della Arduino lampeggia con intermittenza molto veloce. La scritta CDC sul navi viene nera, ma premendo CDC e poi play il navi dice CD SCAN e si blocca!


Top
 Profilo E-mail  
 
 Oggetto del messaggio: Re: Emulatore CD changer/AUX
Numero Post: 208 MessaggioInviato: giovedì 9 giugno 2011, 19:01 
Non connesso
STILO-BRAVOso Sportivo

Iscritto il: giovedì 18 maggio 2006, 21:12
Messaggi: 2569
Località: Lecce
Marca: Alfa Romeo
Modello: moto-scarpa
Motore: 1600 mjet 16v 120
Anno: 2016
Allestimento: sexual
Comunque è veramente portentoso questo arduino. L'ho ordinato, dovrebbe arrivarmi la settimana prossima. Senza averlo sotto mano non posso provare nulla.

_________________
Stilostyle su FIAT Stilo 1.8 16v 133 cv Dynamic GRIGIO ORIONE
Cerchi Pentarazze con gomme Dunlop 215/45 ZR 17, mascherina anteriore My2006, bocchette areazione grigio Kyron, NAV+ con Kit Video, battitacco alluminio, poggiapiede StiloClub, Lampade Xenon 6.000K.

Per l'ennesima volta ho verniciato la pulsantiera, tra poco tocca al NAV! Maledette crepe!
IN ARRIVO: °° Vetri Oscurati °°


Top
 Profilo  
 
 Oggetto del messaggio: Re: Emulatore CD changer/AUX
Numero Post: 209 MessaggioInviato: giovedì 9 giugno 2011, 19:11 
Non connesso
Moderatore
Moderatore
Avatar utente

Iscritto il: venerdì 8 ottobre 2004, 23:00
Messaggi: 4313
Località: Cavenago di Brianza (MB)
Marca: Fiat
Modello: Stilo 3p (192) 2001-2006
Motore: 2400 20v 170
Anno: 2003
Allestimento: Abarth selespeed
stilostyle ha scritto:
Secondo me il problema dell'ultimo codice è che stando ai numerosi delay che ci sono, può capitare che si spegne l'autoradio e si riaccende in un momento in cui arduino non ha ancora processato la riga di codice per il reset e quindi il reset stesso non funziona.
Si riesce a capire che stringa invia ad arduino il navigatore
Quando sta per spegnersi?


La parte finale del codice con i delay è fatta con il metodo "non ho voglia di implementare per benino il codice, facciamo lo in modo grezzo giusto per vedere se va" :woot: :azz:
Alla fine va in loop e continua a inviare alla radio lo stesso codice per non far chiudere il collegamento, non mi pare che la radio mandi una stringa di spegnimento al cdc, probabilmente toglie una delle due alimentazioni disponibili sul connettore mini iso, quindi per capire se la radio è accesa o spenta sarà necessario un conduttore in più nel cablaggio, e una resistenza per collegare questo cavo a un pin qualsiasi dell'arduino.

_________________

Fiat Seicento SX MPI: Cerchi mini-pentarazze, contagiri Sporting, volante/cambio in pelle Sporting linea accessori, DRL Stealth, assetto -30mm, tubi freno in treccia
Stilo Abarth Selespeed 3p Type1 : interni in pelle nera, impianto GPL a iniezione liquida Vialle LPi, Cerchi 17" color grafite, Kit video su Connect Nav+, emulatore CDC, lettore dvd/divx, fari Dectane neri, pinze rosse, specchietti con calotte cromate, griglie anteriori color grafite, strisce laterali Abarth color grafite by Rafty e mascherina "Electricsheep"... tutto, o quasi, fai-da-te.
Mercedes Benz C218 CLS350 CDI AMG line: tutta originale che è aziendale (vabbè una rimappaturina...)

Peugeot Speedfight 50LC: marmitta rovesciata Giannelli omologata, gruppo termico Malossi Hyper Racing, variatore Polini Hi-Speed, pneumatici Michelin Bopper
Peugeot Satelis RS250: variatore Malossi Multivar, pneumatici Michelin City Grip 2 estivi/Heidenau invernali... e il tutto in perenne modifica, prossimi step: motore ibrido e strumentazione con Android Auto
Benelli Leoncino 500: cupolino fumè, bauletto, borse laterali, borsa officina tutto Givi


Top
 Profilo E-mail  
 
 Oggetto del messaggio: Re: Emulatore CD changer/AUX
Numero Post: 210 MessaggioInviato: giovedì 9 giugno 2011, 19:43 
Non connesso
STILO-BRAVOso Principiante

Iscritto il: lunedì 2 maggio 2011, 20:22
Messaggi: 25
Marca: Fiat
Modello: Stilo 3p (192) 2001-2006
Motore: 1800 16v 133
Anno: 2000
Allestimento: Emotion
In questo esempio ogni volta che accendo l'autoradio mi ritrovo dentro il terzo if... (Sempre per quanto riguarda la versione a cassetta!) Stabile al 100%

Codice:
ThreadLoop{
RX();
if(someChar == 0x1B){
   TX();
   RX();
   if(someChar == 0xFFFFFFFF){
      TX();
      RX();
      if(somChar == 0x51){
         //inizioa ad inviare dati per l'inizializzazione
      }
   }
}else{
   TX();
}
}//ThreadLoop


Di conseguenza non ho bisogno di resettare niente perché arduino si accorge quando l'autoradio viene accesa... ;)


Top
 Profilo E-mail  
 
 Oggetto del messaggio: Re: Emulatore CD changer/AUX
Numero Post: 211 MessaggioInviato: giovedì 9 giugno 2011, 19:57 
Non connesso
STILO-BRAVOso Sportivo

Iscritto il: giovedì 18 maggio 2006, 21:12
Messaggi: 2569
Località: Lecce
Marca: Alfa Romeo
Modello: moto-scarpa
Motore: 1600 mjet 16v 120
Anno: 2016
Allestimento: sexual
Andrea81 ha scritto:
La parte finale del codice con i delay è fatta con il metodo "non ho voglia di implementare per benino il codice, facciamo lo in modo grezzo giusto per vedere se va" :woot: :azz:
Alla fine va in loop e continua a inviare alla radio lo stesso codice per non far chiudere il collegamento, non mi pare che la radio mandi una stringa di spegnimento al cdc, probabilmente toglie una delle due alimentazioni disponibili sul connettore mini iso, quindi per capire se la radio è accesa o spenta sarà necessario un conduttore in più nel cablaggio, e una resistenza per collegare questo cavo a un pin qualsiasi dell'arduino.

Quello che vorrei sapere, dato che non ho la sonda logica e non posso fare test è il funzionamento logico della comunicazione, ad esempio i secondi come vengono trasmessi? Dal programma che hai fatto ci sono tre casi... che cosa sono in particolare?

_________________
Stilostyle su FIAT Stilo 1.8 16v 133 cv Dynamic GRIGIO ORIONE
Cerchi Pentarazze con gomme Dunlop 215/45 ZR 17, mascherina anteriore My2006, bocchette areazione grigio Kyron, NAV+ con Kit Video, battitacco alluminio, poggiapiede StiloClub, Lampade Xenon 6.000K.

Per l'ennesima volta ho verniciato la pulsantiera, tra poco tocca al NAV! Maledette crepe!
IN ARRIVO: °° Vetri Oscurati °°


Top
 Profilo  
 
 Oggetto del messaggio: Re: Emulatore CD changer/AUX
Numero Post: 212 MessaggioInviato: domenica 19 giugno 2011, 19:57 
Non connesso
STILO-BRAVOso Principiante

Iscritto il: lunedì 2 maggio 2011, 20:22
Messaggi: 25
Marca: Fiat
Modello: Stilo 3p (192) 2001-2006
Motore: 1800 16v 133
Anno: 2000
Allestimento: Emotion
Dopo infiniti tentativi per risolvere il problema del reset scopro che :

Codice:
ThreadLoop{
RX();
if(someChar == 0x1B){
   TX();
   RX();
   if(someChar == 0xFFFFFFFF){
      TX();
      RX();
      if(somChar == 0x51){
         //inizioa ad inviare dati per l'inizializzazione
      }
   }
}else{
   TX();
}
}//ThreadLoop

Non è vero!!
Una volta che si conclude la fase di inizializzazione al seguente riavvio l'autoradio comunica qualcosa di diverso... (non ho capito ne cosa ne il perché)
Per questo motivo ho deciso di non impazzire e di seguire il consiglio di andrea utilizzando un terzo pin collegandoci la seconda alimentazione...
...in pratica ora ad ogni accensione dell'autoradio arduino viene resettato il che lo rende abbastanza usabile.
Ecco il codice:
Codice:
#include <avr/io.h>
#include <avr/wdt.h>
#include <WString.h>
#include <SoftwareSerial.h>
#include <pt.h>

#define rxPin 2
#define txPin 3
#define onPin 7
unsigned long duration;
#define Reset_AVR() wdt_enable(WDTO_30MS); while(1) {}

char someChar;

int i=0;
int j=0;
int t=0;
int a=0;
int on=0;

int durations[] = {210, 840, 210, 210, 110, 110, 110, 110, 110, 110, 1035, 1035, 1035, 110};
int someChars[] = {0x78, 0x1B, 0xFF, 0x58, 0x7C, 0xFE, 0xA7, 0xC4, 0x58, 0x7C, 0x00, 0x00, 0x00, 0x58};
int delays[] = {6, 8, 6, 8, 30, 3, 5, 5, 3, 30, 5, 5, 7, 3, 3, 3, 3, 33, 3, 3, 3, 3, 3, 350, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4200, 3, 3, 3, 290, 4, 4, 4, 4, 4, 4, 4, 4, 4, 33, 3, 3, 3, 3, 3, 285, 3, 3, 3, 290, 4, 4, 4, 4, 4, 4, 4, 4, 4, 33, 3, 3, 3, 3, 3, 285, 3, 3, 3, 290, 4, 4, 4, 4, 4, 4, 4, 4, 4, 33, 3, 3, 3, 3, 3, 285, 3, 3, 3 ,290, 4, 4, 4, 4, 4, 4, 4, 4, 4, 33, 3, 3, 3, 3, 3, 285, 3, 3, 3 ,290, 4, 4, 4, 4, 4, 4, 4, 4, 4, 33, 3, 3, 3, 3, 3, 285, 3, 3, 3, 290, 3, 3, 3, 3, 3, 3, 3, 3, 3, 33, 3, 3, 3, 3, 3, 285, 3, 3, 3,  290, 3, 3, 3, 3, 3, 3, 3, 3, 3, 33, 3, 3, 3, 3, 3, 285, 3, 3, 3};
int times[] = {0xFF, 0x7F, 0xFE, 0x3F, 0xFD };
boolean flag1 = true;
boolean flag2 = true;
boolean flag3 = true;
boolean flag4 = false;
boolean flag5 = false;
boolean flag6 = false;

SoftwareSerial mySerial =  SoftwareSerial(rxPin, txPin);

static unsigned long timestamp=0;
static unsigned long time=0;
static unsigned long timestamp1=0;
static unsigned long time1=0;
static struct pt pt1, pt2, pt3, pt5, pt6;

void setup()  {
  // define pin modes for tx, rx, led pins:
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
  pinMode(onPin, INPUT);
  // set the data rate for the SoftwareSerial port
  mySerial.begin(4800);//(4800);
  Serial.begin(9600);  //serial HW
  digitalWrite(txPin, LOW); //metto la linea tx a 0 
 
  PT_INIT(&pt1);
  PT_INIT(&pt2);
  PT_INIT(&pt3);
  PT_INIT(&pt6);

}

static int powervisor(struct pt *pt6){ 
  PT_BEGIN(pt6);
  while(1){
    PT_WAIT_WHILE(pt6, flag6);
     on=digitalRead(onPin);
     if(on!=0){
       flag6=true;
       flag1=false;
     }
  }
  PT_END(pt6);
}

static int primotest(struct pt *pt1){
  PT_BEGIN(pt1);
  while(1){
    PT_WAIT_WHILE(pt1, flag1);
    mySerial.begin(4800);
    I();
  }
  PT_END(pt1);
}

static int inizializza(struct pt *pt2){
  PT_BEGIN(pt2);
  while(1){
    PT_WAIT_WHILE(pt2, flag2);
    B();
  }
  PT_END(pt2);
}

static int auxIn(struct pt *pt3){
  PT_BEGIN(pt3);
  while(1){
     for (t = 0; t < 4; t++) {
     PT_WAIT_WHILE(pt3, flag3);
       R(t);
       time=0; 
       timestamp = millis();
       while(time <= 970){         
         on=digitalRead(onPin);
         if(on==0){
           Reset_AVR();   //versione senza reset togli questa riga
                                 //aggiungi:
           //flag3=true;
           //flag1=false;
           //break;
         }
         time = millis() - timestamp;
       }
     }
  }
  PT_END(pt3);
}

void loop(){ 
    powervisor(&pt6);
    primotest(&pt1);
    inizializza(&pt2);
    auxIn(&pt3);
}

void I(){
   RX();            
    if(someChar == 0x1B){
      TX();
      RX();
      if(someChar == 0xFFFFFFFF){
        TX();
        RX();
        if(someChar == 0x58){

          flag2=false;
          flag1=true;

        }
      }
    }
    else{
      TX();
    }

}

void B(){ //inizializza

       delay (23);
       for (i = 0; i < 4; i++)
       {
          delay (delays[i]); 
          duration= (durations[i]);
          someChar= (someChars[i]);
          TX();
       }
       delay (5);
       for (i = 0; i < 5; i++)
       {
          RX();
          TX();
       }
       mySerial.begin(9600);
       RX();
       TX();
       RX();
       TX();
     
       delay (30);
       for (i = 4; i < 9; i++)
       {
           delay (delays[i]);
           duration= (durations[i]);
           someChar= (someChars[i]);
           TX();                   
       }
       delay(4);
       for (i = 0; i < 4; i++)
       {
           RX();
           TX();
       }
                   
       for (i = 9; i < 14; i++)
       {
           delay (delays[i]); 
           duration= (durations[i]);
           someChar= (someChars[i]);
           TX();
       }
                   
       //delay(1000);
       time1=0;
       timestamp=millis();
       while(time1<=1000){
            on=digitalRead(onPin);
            if(on==0){
                  Reset_AVR();   //versione senza reset togli questa riga
                                          //aggiungi:
                 //flag2=true;
                 //flag1=false;
                 //break;
            }
            time1 = millis() - timestamp1;
       }
       for (i = 0; i < 9; i++)
       {
           RX();
           if (someChar=!0x58)
           {
               TX();
           }
        }
       
    flag2 = true;
    flag3 = false;
}

void R(int t){ //tiene aperto l'aux

       duration= 210;
       someChar= 0x7B;
       TX();
       delay(3);
       duration= 2000; //2000
       someChar= 0x00;
       TX();
       delay(3);
       duration= 420;                     
       someChar= (times[t]);
       TX();
       delay(3);
       duration= 210;
       someChar= 0x58;
       TX();

}

void RX(){        //ricevo

  duration = pulseIn(rxPin, HIGH, 100000000);  //rileva lunghezza bit di start, timeout 100 secondi
  if (duration < 1500)
  {
     someChar = mySerial.read();            //leggo bit - NB: la libreria è modificata e non attende lo start bit       
  } else {
     someChar = NULL;
  }
}
     
void TX(){
  if (duration > 1900) {                      // se il bit di inizio è troppo lungo non scrivere dati
     delayMicroseconds(400);                     //simulo ritardo di risposta cdc
     digitalWrite(txPin, HIGH);                  //
     delayMicroseconds(duration);                //replico lo start bit di lunghezza corretta
     digitalWrite(txPin, LOW);
     //mySerial.print(someChar);                       //scrivo il byte
     } else if (duration > 1500) {                      // se il bit di inizio è troppo lungo non scrivere dati
        delayMicroseconds(810);                     //simulo ritardo di risposta cdc
        digitalWrite(txPin, HIGH);                  //
        delayMicroseconds(duration);                //replico lo start bit di lunghezza corretta
        digitalWrite(txPin, LOW);
        //mySerial.print(someChar);                       //scrivo il byte
        } else {   
           //delayMicroseconds(180);                     //simulo ritardo di risposta cdc
           digitalWrite(txPin, HIGH);                  //
           delayMicroseconds(duration);                //replico lo start bit di lunghezza corretta
           digitalWrite(txPin, LOW);
           if (someChar!=0x00){
              mySerial.print(someChar);
              }
           }                   //
}



Ultima modifica di maniglia il lunedì 20 giugno 2011, 19:15, modificato 1 volta in totale.

Top
 Profilo E-mail  
 
 Oggetto del messaggio: Re: Emulatore CD changer/AUX
Numero Post: 213 MessaggioInviato: lunedì 20 giugno 2011, 10:57 
Non connesso
STILO-BRAVOso Principiante

Iscritto il: lunedì 2 maggio 2011, 20:22
Messaggi: 25
Marca: Fiat
Modello: Stilo 3p (192) 2001-2006
Motore: 1800 16v 133
Anno: 2000
Allestimento: Emotion
Mi correggo ancora scusate....
Sempre per quanto riguarda il segmento di codice:

Codice:
ThreadLoop{
RX();
if(someChar == 0x1B){
   TX();
   RX();
   if(someChar == 0xFFFFFFFF){
      TX();
      RX();
      if(somChar == 0x51){
         //inizioa ad inviare dati per l'inizializzazione
      }
   }
}else{
   TX();
}
}//ThreadLoop


Non mi funzionava dopo il primo avvio perché dimenticavo di reimpostare il bit-rate.... :azz:
che come sapete durante la fase di inizializzazione cambia.
A questo punto penso che l'utilizzo della seconda alimentazione sia la cosa più sicura ma non indispensabile a patto di cambiare continuamente il bit-rate....
C'è qualcuno che sta sperimentando?


Top
 Profilo E-mail  
 
 Oggetto del messaggio: Re: Emulatore CD changer/AUX
Numero Post: 214 MessaggioInviato: lunedì 20 giugno 2011, 17:29 
Non connesso
STILO-BRAVOso Sportivo

Iscritto il: giovedì 18 maggio 2006, 21:12
Messaggi: 2569
Località: Lecce
Marca: Alfa Romeo
Modello: moto-scarpa
Motore: 1600 mjet 16v 120
Anno: 2016
Allestimento: sexual
Io sono fermo perché sto aspettando alcuni componenti... Comunque... Sul pin di controllo quanti volt ci sono? È stabile? Non si potrebbe alimentare direttamente da quello?

_________________
Stilostyle su FIAT Stilo 1.8 16v 133 cv Dynamic GRIGIO ORIONE
Cerchi Pentarazze con gomme Dunlop 215/45 ZR 17, mascherina anteriore My2006, bocchette areazione grigio Kyron, NAV+ con Kit Video, battitacco alluminio, poggiapiede StiloClub, Lampade Xenon 6.000K.

Per l'ennesima volta ho verniciato la pulsantiera, tra poco tocca al NAV! Maledette crepe!
IN ARRIVO: °° Vetri Oscurati °°


Top
 Profilo  
 
 Oggetto del messaggio: Re: Emulatore CD changer/AUX
Numero Post: 215 MessaggioInviato: lunedì 20 giugno 2011, 17:50 
Non connesso
STILO-BRAVOso Principiante

Iscritto il: lunedì 2 maggio 2011, 20:22
Messaggi: 25
Marca: Fiat
Modello: Stilo 3p (192) 2001-2006
Motore: 1800 16v 133
Anno: 2000
Allestimento: Emotion
Per quanto riguarda la stabilità lo sto testando propio in questi giorni.
La seconda "alimentazione" penso sia solamente un segnale di 12V che abilita un relè ... forse.
E quindi di basso amperaggio... con un paio di resistenze porto i 12V a 4V circa.
Si potrebbe alimentare direttamente arduino con la seconda "alimentazione" ma poi si deve tener conto del tempo di boot di arduino che anche se insignificante mi creava problemi con l'inizializzazione...


N.B. Una volta che si spegne l'autoradio il voltaggio sulla seconda "alimentazione" non cade all'istante di conseguenza arduino non si accorge del cambiamento e non resetta..
Quindi il più grande difetto è quello di dover aspettare un tempo variabile non superiore ai 10 secondi (dalle prove che ho fatto) per poter riaccendere l'autoradio con l'emulatore inizializzato correttamente.
Per limitare un po' questo fenomeno mi viene in mente di utilizzare una resistenza di valore più elevato abbassando ancora il voltaggio sul pin (io per ora ho inserito 2 resistenze da 1 M ohm)

Nel momento in qui si accende l'autoradio tenendo conto dei tempi di ripristino mi succedono due cose al 80% dei casi va tutto a buon fine e mi ritrovo la scritta "NO DISCS"
altrimenti mi appare per un breve istante la scritta "NO CD" dopo di che posso ascoltare solo la radio, anche se premo il tasto "src" non succede niente.
Il secondo caso capita veramente di rado e si risolve riaccendendo la radio.


Ho modificato il codice postato qualche messaggio fa...
in alcune righe noterete del codice commentato perché in realtà volevo mostrarvi 2 versioni che si comportano alla stessa magnera...
la prima utilizza la tecnica del Reset...
mentre la versione "commentata" non usa il reset ma il break passando il controllo alla "funzione" "primotest"...
La seconda versione è in pratica un circuito chiuso che ricorda molto un diagramma a stati UML...


Top
 Profilo E-mail  
 
 Oggetto del messaggio: Re: Emulatore CD changer/AUX
Numero Post: 216 MessaggioInviato: martedì 21 giugno 2011, 12:39 
Non connesso
STILO-BRAVOso Principiante

Iscritto il: lunedì 2 maggio 2011, 20:22
Messaggi: 25
Marca: Fiat
Modello: Stilo 3p (192) 2001-2006
Motore: 1800 16v 133
Anno: 2000
Allestimento: Emotion
Oggi vi propongo ancora una versione.
In questo esempio la seconda alimentazione non viene utilizzata e si può utilizzare il schema di collegamento originale... (niente terzo pin)

Codice:
#include <WString.h>
#include <SoftwareSerial.h>
#include <pt.h>

#define rxPin 2
#define txPin 3
unsigned long duration;

char someChar;
int i=0;
int j=0;
int t=0;
int a=0;
int on=0;
int durations[] = {210, 840, 210, 210, 110, 110, 110, 110, 110, 110, 1035, 1035, 1035, 110};
int someChars[] = {0x78, 0x1B, 0xFF, 0x58, 0x7C, 0xFE, 0xA7, 0xC4, 0x58, 0x7C, 0x00, 0x00, 0x00, 0x58};
int delays[] = {6, 8, 6, 8, 30, 3, 5, 5, 3, 30, 5, 5, 7, 3, 3, 3, 3, 33, 3, 3, 3, 3, 3, 350, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4200, 3, 3, 3, 290, 4, 4, 4, 4, 4, 4, 4, 4, 4, 33, 3, 3, 3, 3, 3, 285, 3, 3, 3, 290, 4, 4, 4, 4, 4, 4, 4, 4, 4, 33, 3, 3, 3, 3, 3, 285, 3, 3, 3, 290, 4, 4, 4, 4, 4, 4, 4, 4, 4, 33, 3, 3, 3, 3, 3, 285, 3, 3, 3 ,290, 4, 4, 4, 4, 4, 4, 4, 4, 4, 33, 3, 3, 3, 3, 3, 285, 3, 3, 3 ,290, 4, 4, 4, 4, 4, 4, 4, 4, 4, 33, 3, 3, 3, 3, 3, 285, 3, 3, 3, 290, 3, 3, 3, 3, 3, 3, 3, 3, 3, 33, 3, 3, 3, 3, 3, 285, 3, 3, 3,  290, 3, 3, 3, 3, 3, 3, 3, 3, 3, 33, 3, 3, 3, 3, 3, 285, 3, 3, 3};
int times[] = {0xFF, 0x7F, 0xFE, 0x3F, 0xFD };
boolean flag1 = false;
boolean flag2 = true;
boolean flag3 = true;

// set up a new serial port
SoftwareSerial mySerial =  SoftwareSerial(rxPin, txPin);
//byte pinState = 0;
static unsigned long timestamp=0;
static unsigned long time=0;
static struct pt pt1, pt2, pt3;

void setup()  {
  // define pin modes for tx, rx, led pins:
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
  // set the data rate for the SoftwareSerial port
  mySerial.begin(4800);//(4800);
  Serial.begin(9600);  //serial HW
  digitalWrite(txPin, LOW); //metto la linea tx a 0 
 
  PT_INIT(&pt1);
  PT_INIT(&pt2);
  PT_INIT(&pt3);
}

static int primotest(struct pt *pt1){
  PT_BEGIN(pt1);
  while(1){
    PT_WAIT_WHILE(pt1, flag1);
    mySerial.begin(4800);
    if(I()){
      flag2=false;
      flag1=true;
    }
  }
  PT_END(pt1);
}

static int inizializza(struct pt *pt2){
  PT_BEGIN(pt2);
  while(1){
    PT_WAIT_WHILE(pt2, flag2);
      B();
  }
  PT_END(pt2);
}

static int auxIn(struct pt *pt3){
  PT_BEGIN(pt3);
  while(1){
     for (t = 0; t < 4; t++) {
     PT_WAIT_WHILE(pt3, flag3);
       R(t);
       time=0;
       timestamp = millis();
       mySerial.begin(4800);
       while(time <= 970){
         if(I()){
           flag2=false;
           flag3=true;
           break;
         }
         time = millis() - timestamp;
       }
       mySerial.begin(9600);
     }
  }
  PT_END(pt3);
}

void loop(){ 
    primotest(&pt1);
    inizializza(&pt2);
    auxIn(&pt3);
}

boolean I(){
   RX();            
    if(someChar == 0x1B){
      TX();
      RX();
      if(someChar == 0xFFFFFFFF){
        TX();
        RX();
        if(someChar == 0x58){
          return true;
        }
      }
    }
    else{
      TX();
    }
}

void B(){ //inizializza
       delay (23);
       for (i = 0; i < 4; i++) {
          delay (delays[i]); 
          duration= (durations[i]);
          someChar= (someChars[i]);
          TX();
       }
       delay (5);
       for (i = 0; i < 5; i++){
          RX();
          TX();
       }
       mySerial.begin(9600);
       RX();
       TX();
       RX();
       TX();   
       delay (30);
       for (i = 4; i < 9; i++) {
           delay (delays[i]);
           duration= (durations[i]);
           someChar= (someChars[i]);
           TX();                   
       }
       delay(4);
       for (i = 0; i < 4; i++) {
           RX();
           TX();
       }                   
       for (i = 9; i < 14; i++) {
           delay (delays[i]); 
           duration= (durations[i]);
           someChar= (someChars[i]);
           TX();
       }                         
       time=0;
       timestamp = millis();
       mySerial.begin(4800);     
       while(time <= 1000){
         if(I()){
           break;
         }
         time = millis() - timestamp;         
       }   
       mySerial.begin(9600);   
       for (i = 0; i < 9; i++) {
           RX();
           if (someChar=!0x58) {
               TX();
           }
        }         
    flag2 = true;
    flag3 = false;
}

void R(int t){ //tiene aperto l'aux
       duration= 210;
       someChar= 0x7B;
       TX();
       delay(3);
       duration= 2000; //2000
       someChar= 0x00;
       TX();
       delay(3);
       duration= 420;                     
       someChar= (times[t]);
       TX();
       delay(3);
       duration= 210;
       someChar= 0x58;
       TX();
}

void RX(){        //ricevo

  duration = pulseIn(rxPin, HIGH, 100000000);  //rileva lunghezza bit di start, timeout 100 secondi
  if (duration < 1500)
  {
     someChar = mySerial.read();            //leggo bit - NB: la libreria è modificata e non attende lo start bit       
  } else {
     someChar = NULL;
  }
}
     
void TX(){
  if (duration > 1900) {                      // se il bit di inizio è troppo lungo non scrivere dati
     delayMicroseconds(400);                     //simulo ritardo di risposta cdc
     digitalWrite(txPin, HIGH);                  //
     delayMicroseconds(duration);                //replico lo start bit di lunghezza corretta
     digitalWrite(txPin, LOW);
     //mySerial.print(someChar);                       //scrivo il byte
     } else if (duration > 1500) {                      // se il bit di inizio è troppo lungo non scrivere dati
        delayMicroseconds(810);                     //simulo ritardo di risposta cdc
        digitalWrite(txPin, HIGH);                  //
        delayMicroseconds(duration);                //replico lo start bit di lunghezza corretta
        digitalWrite(txPin, LOW);
        //mySerial.print(someChar);                       //scrivo il byte
        } else {   
           //delayMicroseconds(180);                     //simulo ritardo di risposta cdc
           digitalWrite(txPin, HIGH);                  //
           delayMicroseconds(duration);                //replico lo start bit di lunghezza corretta
           digitalWrite(txPin, LOW);
           if (someChar!=0x00){
              mySerial.print(someChar);
              }
           }                   //
}


Ma anche in questo caso siamo ancora lontani da un funzionamento garantito ad ogni accensione della radio... :nervoso: :ink:


Top
 Profilo E-mail  
 
 Oggetto del messaggio: Re: Emulatore CD changer/AUX
Numero Post: 217 MessaggioInviato: mercoledì 22 giugno 2011, 11:59 
Non connesso
STILO-BRAVOso Principiante

Iscritto il: lunedì 2 maggio 2011, 20:22
Messaggi: 25
Marca: Fiat
Modello: Stilo 3p (192) 2001-2006
Motore: 1800 16v 133
Anno: 2000
Allestimento: Emotion
Oggi vi posto il codice per il NAVIGATORE Connect NAV+
che ovviamente non ho testato perché non lo posseggo...

E quindi spero abiate un po' di pazienza e trovate il tempo per provarlo anche perché mi pare siete più numerosi...
Codice:
#include <WString.h>
#include <SoftwareSerial.h>
#include <pt.h>
#define rxPin 2
#define txPin 3

unsigned long duration;

char someChar;

int i=0;
int t=0;

int durations1[] = {840, 220, 220};
int someChars1[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A,};
int durations[] = {420, 210, 210, 210, 210, 1240, 420, 1000, 2000, 210, 600, 210, 210, 210, 210, 210, 210, 210, 1200, 210, 1000, 2000, 210, 210, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 210, 210, 420, 210, 210, 210, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 210, 210, 210, 1000, 210, 210, 210, 210, 210, 210, 210, 210, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 210, 210, 210, 1000, 210, 210, 210, 210, 210, 210, 210, 210, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 210, 210, 210, 1000, 210, 210, 210, 210, 210, 210, 210, 210, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 210, 210, 210, 1000, 210, 210, 210, 210, 210, 210, 210};
int someChars[] = {0x3C, 0xFB, 0xFC, 0x58, 0x7E, 0x07, 0x7D, 0x0F, 0x00, 0x58, 0x1E, 0xFF, 0x58, 0x7F, 0xFF, 0xFF, 0x58, 0x7E, 0x07, 0xFB, 0x0F, 0x00, 0x58, 0x7A, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x58, 0x7F, 0x7F, 0xFF, 0x58, 0x7A, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x58, 0x79, 0xFF, 0x0F, 0xDC, 0xF7, 0x58, 0x7F, 0xFE, 0xFF, 0x58, 0x7A, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x58, 0x79, 0xFF, 0x0F, 0xDC, 0xF7, 0x58, 0x7F, 0xFD, 0xFF, 0x58, 0x7A, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x58, 0x79, 0xFF, 0x0F, 0xDC, 0xF7, 0x58, 0x7F, 0xFF, 0xFF, 0x58, 0x7A, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x58, 0x79, 0xFF, 0x7A, 0x1A, 0x7B, 0x58, 0x7F, 0xFF, 0xFF, 0x58, 0x7A, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x58, 0x79, 0xFF, 0x7A, 0x1A, 0x7B, 0x58, 0x7B, 0x00, 0x0E, 0x58};
int delays[] = {33, 3, 3, 3, 30, 3, 3, 3, 3, 3, 30, 3, 3, 30, 3, 3, 3, 33, 3, 3, 3, 3, 3, 350, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4200, 3, 3, 3, 290, 4, 4, 4, 4, 4, 4, 4, 4, 4, 33, 3, 3, 3, 3, 3, 285, 3, 3, 3, 290, 4, 4, 4, 4, 4, 4, 4, 4, 4, 33, 3, 3, 3, 3, 3, 285, 3, 3, 3, 290, 4, 4, 4, 4, 4, 4, 4, 4, 4, 33, 3, 3, 3, 3, 3, 285, 3, 3, 3 ,290, 4, 4, 4, 4, 4, 4, 4, 4, 4, 33, 3, 3, 3, 3, 3, 285, 3, 3, 3 ,290, 4, 4, 4, 4, 4, 4, 4, 4, 4, 33, 3, 3, 3, 3, 3, 285, 3, 3, 3, 290, 3, 3, 3, 3, 3, 3, 3, 3, 3, 33, 3, 3, 3, 3, 3, 285, 3, 3, 3,  290, 3, 3, 3, 3, 3, 3, 3, 3, 3, 33, 3, 3, 3, 3, 3, 285, 3, 3, 3};
int prova;
int times[] = {0xFF, 0x7F, 0xFE, 0x3F, 0xFD };
boolean flag1 = false;
boolean flag2 = true;
boolean flag3 = true;
// set up a new serial port
SoftwareSerial mySerial =  SoftwareSerial(rxPin, txPin);
//byte pinState = 0;
static unsigned long timestamp=0;
static unsigned long time=0;
static struct pt pt1, pt2, pt3;

void setup()  {
  // define pin modes for tx, rx, led pins:
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
    // set the data rate for the SoftwareSerial port
  //mySerial.begin(4800);
  //Serial.begin(9600);  //serial HW
  mySerial.begin(4800);
  Serial.begin(9600);
  digitalWrite(txPin, LOW); //metto la linea tx a 0
  PT_INIT(&pt1);
  PT_INIT(&pt2);
  PT_INIT(&pt3);
}
static int primotest(struct pt *pt1){
  PT_BEGIN(pt1);
  while(1){
    PT_WAIT_WHILE(pt1, flag1);
    if(I()){
      flag2=false;
      flag1=true;
    }
  }
  PT_END(pt1);
}

static int inizializza(struct pt *pt2){
  PT_BEGIN(pt2);
  while(1){
    PT_WAIT_WHILE(pt2, flag2);
    B();
  }
  PT_END(pt2);
}
static int auxIn(struct pt *pt3){
  PT_BEGIN(pt3);
  while(1){
     for (t = 0; t < 4; t++) {
     PT_WAIT_WHILE(pt3, flag3);
       R(t);
       time=0;
       timestamp = millis();
       //mySerial.begin(4800);
       while(time < 965){ //970
         if(I()){
           flag2=false;
           flag3=true;
           break;
         }
         time = millis() - timestamp;
       }
     }
  }
  PT_END(pt3);
}

void loop(){ 
    primotest(&pt1);
    inizializza(&pt2);
    auxIn(&pt3);
}

boolean I(){
   RX();            
    if(someChar == 0xEF){
          return true;
    }
    else{
      TX();
    }
}

void B(){ //inizializza
       TX();
       digitalWrite(13,HIGH);
       for (i = 0; i < 13; i = i + 1) {
          delay (delays[i]);
          duration= (durations[i]);
          someChar= (someChars[i]);
          TX();
        }
        delay (5);
        RX();
        TX();
        RX();
        TX();
                   
        for (i = 13; i < 153; i = i + 1) {
             delay (delays[i]);
             duration= (durations[i]);
              someChar= (someChars[i]);
               TX();
         }
                   
         delay (1000);
    flag2 = true;
    flag3 = false;
}
void R(int t){ //tiene aperto l'aux
       duration= 210;
       someChar= 0x7B;
       TX();
       delay(3);
       duration= 2000; //2000
       someChar= 0x00;
       TX();
       delay(3);
       duration= 420;                     
       someChar= (times[t]);
       TX();
       delay(3);
       duration= 210;
       someChar= 0x58;
       TX();
}
void RX(){        //ricevo
  duration = pulseIn(rxPin, HIGH, 10000);  //rileva lunghezza bit di start, timeout 100 secondi 100000000
  if (duration < 1500)
  {
     someChar = mySerial.read();            //leggo bit - NB: la libreria è modificata e non attende lo start bit       
  } else {
     someChar = NULL;
  }
}
     
void TX(){
  if (duration > 1900) {                      // se il bit di inizio è troppo lungo non scrivere dati
     delayMicroseconds(400);                     //simulo ritardo di risposta cdc
     digitalWrite(txPin, HIGH);                  //
     delayMicroseconds(duration);                //replico lo start bit di lunghezza corretta
     digitalWrite(txPin, LOW);
     //mySerial.print(someChar);                       //scrivo il byte
     } else if (duration > 1500) {                      // se il bit di inizio è troppo lungo non scrivere dati
        delayMicroseconds(810);                     //simulo ritardo di risposta cdc
        digitalWrite(txPin, HIGH);                  //
        delayMicroseconds(duration);                //replico lo start bit di lunghezza corretta
        digitalWrite(txPin, LOW);
        //mySerial.print(someChar);                       //scrivo il byte
        } else {   
           //delayMicroseconds(180);                     //simulo ritardo di risposta cdc
           digitalWrite(txPin, HIGH);                  //
           delayMicroseconds(duration);                //replico lo start bit di lunghezza corretta
           digitalWrite(txPin, LOW);
           if (someChar!=0x00){
              mySerial.print(someChar);
              }
              //digitalWrite(txPin, LOW); 
           }                   //
}



Vi ricordo che dovete scaricare ed inserire la libreria pt.h!
La libreria la trovate qui http://www.sics.se/~adam/pt/download.html !!!
Una volta scaricata la dovete decomprimere e copiare il contenuto nella cartella "libraries" .
es.: Programmi\arduino-0022\libraries\


Top
 Profilo E-mail  
 
 Oggetto del messaggio: Re: Emulatore CD changer/AUX
Numero Post: 218 MessaggioInviato: giovedì 23 giugno 2011, 9:27 
Non connesso
STILO-BRAVOso Principiante

Iscritto il: lunedì 2 maggio 2011, 20:22
Messaggi: 25
Marca: Fiat
Modello: Stilo 3p (192) 2001-2006
Motore: 1800 16v 133
Anno: 2000
Allestimento: Emotion
Dopo qualche prova e continue modifiche vi presento una versione del firmware (per la versione a cassette )che sembra prometta bene in quanto a stabilità...
Le modifiche più importanti riguardano i tempi di pausa che purtroppo sono molto importanti e devono essere molto accurati per il buon funzionamento.
Con le diverse versioni del firmware da me postati in questi giorni avete la possibilità di vedere l'evolversi delle idee implementate a partire dal reset passando per il terzo pin per dedurre lo stato della radio (accesa/spenta) fino alle versioni più "eleganti" dal punto di vista software che si autogestiscono, per non parlare dell "multitask" implementato come Andrea suggeriva. (multitaks é una parola grossa!!!)
Dopo questa pubblicazione se non riscontro nuovi malfunzionamenti mi fermo... perché nel mio caso l'autoradio mi dice NO DISCS e quindi anche se schiaccio ">>" (next track)
non viene inviato assolutamente niente ad arduino.
Per quanto riguarda la versione navigatore con qualche prova e modifica dovreste essere in grado di raggiungere lo stesso risultato.
Codice:
#include <WString.h>
#include <SoftwareSerial.h>
#include <pt.h>

#define rxPin 2
#define txPin 3
unsigned long duration;

char someChar;
int i=0;
int t=0;
int durations[] = {210, 840, 210, 210, 110, 110, 110, 110, 110, 110, 1035, 1035, 1035, 110};
int someChars[] = {0x78, 0x1B, 0xFF, 0x58, 0x7C, 0xFE, 0xA7, 0xC4, 0x58, 0x7C, 0x00, 0x00, 0x00, 0x58};
int delays[] = {6, 8, 6, 8, 30, 3, 5, 5, 3, 30, 5, 5, 7, 3, 3, 3, 3, 33, 3, 3, 3, 3, 3, 350, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4200, 3, 3, 3, 290, 4, 4, 4, 4, 4, 4, 4, 4, 4, 33, 3, 3, 3, 3, 3, 285, 3, 3, 3, 290, 4, 4, 4, 4, 4, 4, 4, 4, 4, 33, 3, 3, 3, 3, 3, 285, 3, 3, 3, 290, 4, 4, 4, 4, 4, 4, 4, 4, 4, 33, 3, 3, 3, 3, 3, 285, 3, 3, 3 ,290, 4, 4, 4, 4, 4, 4, 4, 4, 4, 33, 3, 3, 3, 3, 3, 285, 3, 3, 3 ,290, 4, 4, 4, 4, 4, 4, 4, 4, 4, 33, 3, 3, 3, 3, 3, 285, 3, 3, 3, 290, 3, 3, 3, 3, 3, 3, 3, 3, 3, 33, 3, 3, 3, 3, 3, 285, 3, 3, 3,  290, 3, 3, 3, 3, 3, 3, 3, 3, 3, 33, 3, 3, 3, 3, 3, 285, 3, 3, 3};
int times[] = {0xFF, 0x7F, 0xFE, 0x3F, 0xFD };
boolean flag2 = true;   //variabili usate per gestire e sincronizzare i thread
boolean flag3 = false;

SoftwareSerial mySerial =  SoftwareSerial(rxPin, txPin);
static unsigned long timestamp=0;  //variabili per contare il tempo e calcolare le pause
static unsigned long time=0;
static struct pt pt2, pt3;  //mi servono per i thread

void setup()  {
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
  mySerial.begin(4800);
  Serial.begin(9600);
  digitalWrite(txPin, LOW); 
  PT_INIT(&pt2); //inizializzo protothread
  PT_INIT(&pt3);
}

static int inizializza(struct pt *pt2){ //Thread che si occupa di inviare l'inizializzazione
  PT_BEGIN(pt2);
  while(1){
    PT_WAIT_WHILE(pt2, flag2);   //Thread rimane in attesa fino a quando il flag non diventa FALSE
    B();   //chiamata alla funzione di inizializzazione
  }
  PT_END(pt2);
}

static int auxIn(struct pt *pt3){         //thread che si occupa di tenere aperto l'aux e durante le pause di controllare l'accensione della radio
  PT_BEGIN(pt3);
  while(1){
     for (t = 0; t < 4; t++) {
     PT_WAIT_WHILE(pt3, flag3);
       R(t);
       time=0;
       timestamp = millis();
       while(time < 931){ //970   //inizio a contare la pausa
         mySerial.begin(4800);
         if(I()){                            //durante la pausa controllo se ho riacceso l'autoradio
           flag2=false;
           flag3=true;
           t=3;
           break;                              // se ciò si verifica interrompo il ciclo e con i flag reimpostati passo il controllo all thread di inizializzazione
         }
         mySerial.begin(9600);
         time = millis() - timestamp;  //aggiorno il conttatore
       }
     }
  }
  PT_END(pt3);
}

void loop(){
    auxIn(&pt3);        //la schedulazione dei thread avviene chiamando i due thread all'infinito poi ci pensano i flag
    inizializza(&pt2);
}

boolean I(){      //funzione che si occupa di verificare quando l'autoradio viene accesa
   RX();            
    if(someChar == 0x1B){
      TX();
      RX();
      if(someChar == 0xFFFFFFFF){
        TX();
        RX();
        if(someChar == 0x58){
          return true;
        }
      }
    }
    else{
      TX();
    }
}

void B(){ //inizializza
       delay (23);
       for (i = 0; i < 4; i++) {
          delay (delays[i]); 
          duration= (durations[i]);
          someChar= (someChars[i]);
          TX();
       }
       delay (5);
       for (i = 0; i < 5; i++){
          RX();
          TX();
       }
       mySerial.begin(9600);
       RX();
       TX();
       RX();
       TX();   
       delay (30);
       for (i = 4; i < 9; i++) {
           delay (delays[i]);
           duration= (durations[i]);
           someChar= (someChars[i]);
           TX();                   
       }
       delay(4);
       for (i = 0; i < 4; i++) {
           RX();
           TX();
       }                   
       for (i = 9; i < 14; i++) {
           delay (delays[i]); 
           duration= (durations[i]);
           someChar= (someChars[i]);
           TX();
       } 
             
       time=0;
       timestamp = millis();       
       while(time <= 985){
         mySerial.begin(4800);
         if(I()){
           break;
         }
         mySerial.begin(9600);
         time = millis() - timestamp;         
       }   
       //Serial.println(time); 
       for (i = 0; i < 9; i++) {
           RX();
           if (someChar=!0x58) {
               TX();
           }
        }         
    flag2 = true;
    flag3 = false;
}

void R(int t){ //tiene aperto l'aux
       duration= 210;
       someChar= 0x7B;
       TX();
       delay(3);
       duration= 2000; //2000
       someChar= 0x00;
       TX();
       delay(3);
       duration= 420;                     
       someChar= (times[t]);
       TX();
       delay(3);
       duration= 210;
       someChar= 0x58;
       TX();
}

void RX(){        //ricevo
  duration = pulseIn(rxPin, HIGH, 100000000);  //rileva lunghezza bit di start, timeout 100 secondi 100000000
  if (duration < 1500)
  {
     someChar = mySerial.read();            //leggo bit - NB: la libreria è modificata e non attende lo start bit       
  } else {
     someChar = NULL;
  }
}
     
void TX(){
  if (duration > 1900) {                      // se il bit di inizio è troppo lungo non scrivere dati
     delayMicroseconds(400);                     //simulo ritardo di risposta cdc
     digitalWrite(txPin, HIGH);                  //
     delayMicroseconds(duration);                //replico lo start bit di lunghezza corretta
     digitalWrite(txPin, LOW);
     //mySerial.print(someChar);                       //scrivo il byte
     } else if (duration > 1500) {                      // se il bit di inizio è troppo lungo non scrivere dati
        delayMicroseconds(810);                     //simulo ritardo di risposta cdc
        digitalWrite(txPin, HIGH);                  //
        delayMicroseconds(duration);                //replico lo start bit di lunghezza corretta
        digitalWrite(txPin, LOW);
        //mySerial.print(someChar);                       //scrivo il byte
        } else {   
           //delayMicroseconds(180);                     //simulo ritardo di risposta cdc
           digitalWrite(txPin, HIGH);                  //
           delayMicroseconds(duration);                //replico lo start bit di lunghezza corretta
           digitalWrite(txPin, LOW);
           if (someChar!=0x00){
              mySerial.print(someChar);
              } 
           }                   //
}


Top
 Profilo E-mail  
 
 Oggetto del messaggio: Re: Emulatore CD changer/AUX
Numero Post: 219 MessaggioInviato: lunedì 8 agosto 2011, 10:21 
Non connesso
BRAVO-STILOso di Passaggio

Iscritto il: venerdì 27 agosto 2010, 9:57
Messaggi: 14
Marca: Abarth
Modello: Stilo 3p (192) 2001-2006
Anno: 2006
Allestimento: Actual
@maniglia

I tried your program for the connect nav+ but it didnt work. The CDC icon in the bar stays gray.

any ideas?

_________________
-- Fiat Stilo Abarth Selespeed! Saluti dall'Olanda --


Top
 Profilo E-mail  
 
 Oggetto del messaggio: Re: Emulatore CD changer/AUX
Numero Post: 220 MessaggioInviato: domenica 14 agosto 2011, 16:20 
Non connesso
STILO-BRAVOso Principiante

Iscritto il: lunedì 2 maggio 2011, 20:22
Messaggi: 25
Marca: Fiat
Modello: Stilo 3p (192) 2001-2006
Motore: 1800 16v 133
Anno: 2000
Allestimento: Emotion
More info, please.
Do some tests.


Top
 Profilo E-mail  
 
Visualizza ultimi messaggi:  Ordina per  
Apri un nuovo argomento Rispondi all’argomento  [ 271 messaggi ]  Vai alla pagina Precedente  1 ... 8, 9, 10, 11, 12, 13, 14  Prossimo

Tutti gli orari sono UTC + 1 ora



Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite


Non puoi aprire nuovi argomenti
Non puoi rispondere negli argomenti
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi inviare allegati

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traduzione Italiana phpBB.it