Go Down

Topic: Projet Control module (Read 14759 times) previous topic - next topic

trimarco232

Quote
Le gros "IK" c'est que je souhaite faire 3 envois de donnés via le port série pour avoir 3 différents affichage sur l'écran
il faut "simplement" que l'arduino puisse savoir quel affichage est concerné par la donnée qu'il vient de recevoir. Donc avant d'envoyer la donnée, il faut que ton programme VS C++ envoie "quelque chose" qui permet d'identifier l'affichage concerné : en français, cela reviendrait à dire : "attention, ce qui suit concerne tel ou tel affichage"
pour cela il faut définir un petit protocole : sous quel format tu envoies et reçois les données ?


par ailleurs - il faudra prendre ceci en compte plus tard - si tu utilises la propriété "change" des sliders pour envoyer les données sous VS C++, ils faut savoir que ton PC est capable de le faire à une grande vitesse, et que par conséquent l'arduino ne pourra pas forcément suivre. Il en résulterait une réception des données tronquées, donc fausses
en attendant, je pense qu'une vitesse de transmision basse, cad. 9600 bits/s, nous met à l'abri de ce désagrément. Il faut ce pendant que ton buffer d'émission, au niveau du contrôle serial de ton application VS C++, soit dimensionné de façon confortable, de manière à ce que les dernières valeurs émises par le(s) slider(s) ne soient pas perdues dans le PC (les dernières valeurs étant sans doute les plus importantes)

200sx200

#136
Aug 28, 2017, 10:45 pm Last Edit: Aug 29, 2017, 08:20 am by 200sx200
J'ai copié coller exactement ce que tu m'as donné ?
Ensuite j'ai changé juste "pinMode" par digitalWrite" pour être sur de la Pin et j'ai bien les 5v

Code: [Select]

void setup()   /*----( SETUP: RUNS ONCE )----*/
{
  pinMode (10, HIGH); // sur un mega OC2A est sur la pin 10
  TCCR2A = 0x23 ;
  TCCR2B = 0x09 ; // mode 7, clock prescale by 1
  OCR2A = 104-1 ;  // 16000khz / 104 = 153.8khz
  Serial.begin(9600);
}


-----------------------------------------------------------------------------------------------------------

il faut "simplement" que l'arduino puisse savoir quel affichage est concerné par la donnée qu'il vient de recevoir. .....
edit:
Programme complet en bas.
Je n'ai pas donné de type ou autre pour le moment juste une lettre précédant le nombre.

je pense qu'une vitesse de transmision basse, cad. 9600 bits/s
En principe cela le devrait :

Code: [Select]

' Arduino and Visual Basic: Receiving Data From the Arduino
' A simple example of recing data from an Arduino
'

Imports System
Imports System.IO.Ports



Public Class Form1

    Dim comPORT As String
    Dim receivedData As String = ""



    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Timer1.Enabled = False
        comPORT = ""
        For Each sp As String In My.Computer.Ports.SerialPortNames
            comPort_ComboBox.Items.Add(sp)
        Next
    End Sub


    Private Sub comPort_ComboBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles comPort_ComboBox.SelectedIndexChanged
        If (comPort_ComboBox.SelectedItem <> "") Then
            comPORT = comPort_ComboBox.SelectedItem
        End If
    End Sub


    Private Sub connect_BTN_Click(sender As Object, e As EventArgs) Handles connect_BTN.Click
        If (connect_BTN.Text = "Connection") Then
            If (comPORT <> "") Then
                SerialPort1.Close()
                SerialPort1.PortName = comPORT
                SerialPort1.BaudRate = 9600
                SerialPort1.DataBits = 8
                SerialPort1.Parity = Parity.None
                SerialPort1.StopBits = StopBits.One
                SerialPort1.Handshake = Handshake.None
                SerialPort1.Encoding = System.Text.Encoding.Default 'very important!
                SerialPort1.ReadTimeout = 10000

                SerialPort1.Open()
                connect_BTN.Text = "Déconnecter"
                Timer1.Enabled = True
                Timer_LBL.Text = "Connecter"
            Else
                MsgBox("Select a COM port first")
            End If
        Else
            SerialPort1.Close()
            connect_BTN.Text = "Connection"
            Timer1.Enabled = False
            Timer_LBL.Text = "Déconnecter"
        End If


    End Sub


    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        receivedData = ReceiveSerialData()
        RichTextBox1.Text &= receivedData
    End Sub


    Function ReceiveSerialData() As String
        Dim Incoming As String
        Try
            Incoming = SerialPort1.ReadExisting()
            If Incoming Is Nothing Then
                Return "nothing" & vbCrLf
            Else
                Return Incoming
            End If
        Catch ex As TimeoutException
            Return "Error: Serial Port read timed out."
        End Try

    End Function



    Private Sub clear_BTN_Click(sender As Object, e As EventArgs) Handles clear_BTN.Click
        RichTextBox1.Text = ""
    End Sub

    Private Sub TrackBar1_Scroll(sender As Object, e As EventArgs) Handles TrackBar1.Scroll
        Label3.Text = TrackBar1.Value.ToString()
        SerialPort1.Write("R" + Label3.Text)
    End Sub

    Private Sub TrackBar2_Scroll(sender As Object, e As EventArgs) Handles TrackBar2.Scroll
        Label4.Text = TrackBar2.Value.ToString()
        SerialPort1.Write("S" + Label4.Text)
    End Sub

    Private Sub TrackBar3_Scroll(sender As Object, e As EventArgs) Handles TrackBar3.Scroll
        Label6.Text = TrackBar3.Value.ToString()
        SerialPort1.Write("%" + Label6.Text)
    End Sub
End Class


200sx200

#137
Aug 29, 2017, 10:01 am Last Edit: Aug 29, 2017, 03:16 pm by 200sx200
Voila mon programme Arduino, je cherche comment séparer les données reçues par exemple si il y à un R,S,% avant le nombre, si cela est faisable comma ça.

La partie entre les pointilles est complètement fausse mais je l'ai créer pour l'idée.

édit: J'ai fini par touver, voilà le programme complet si ça peut aider.

Code: [Select]

#include <UTFT.h>

#define CAL_X 0x004F4E75UL
#define CAL_Y 0x00948DC0UL
#define CAL_S 0x8031F1DFUL

// Declare which fonts we will be using
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[6];

UTFT        myGLCD(CTE70, 38, 39, 40, 41);        //Screen initialization

int inByte;
int RPM;
int Speed;
int Accel;

void setup() {
  Serial.begin (9600);
  myGLCD.InitLCD(LANDSCAPE);
  myGLCD.clrScr();
  myGLCD.setFont(BigFont);
  myGLCD.fillScr(0, 0, 0);
  myGLCD.clrScr();
  Menu1();
}

void loop () {

  while (Serial.available() > 0) {
    int inByte = Serial.read(); // lire un premier caractère

    // controle éventuel : décommenter pour voir ce qui arrive
    //Serial.print("index : "); Serial.println(inByte);


    // filtrer : il doit etre une lettre majuscule
    if (inByte >= 'A') {
      int valeur = Serial.parseInt();

      // controle eventuel de la valeur
      //Serial.print("valeur : "); Serial.println(valeur);


      // traitement
      switch (inByte) {
        case 'R':
          if (valeur > 0) {
            myGLCD.setFont(SevenSegNumFont);
            myGLCD.setColor(87, 255, 45);
            myGLCD.setBackColor(0, 0, 0);
            myGLCD.printNumI(valeur , 130, 85);
          }
          break;
      }

      switch (inByte) {
        case 'S': //
          if (valeur > 0) {
            myGLCD.setFont(SevenSegNumFont);
            myGLCD.setColor(87, 255, 45);
            myGLCD.setBackColor(0, 0, 0);
            myGLCD.printNumI(valeur , 130, 185);
          }
          break;
      }

      switch (inByte) {
        case 'A':
          if (valeur > 0) {
            myGLCD.setFont(SevenSegNumFont);
            myGLCD.setColor(87, 255, 45);
            myGLCD.setBackColor(0, 0, 0);
            myGLCD.printNumI(valeur , 130, 285);
          }
          break;
      }
      delay(10); //pas la peine de tourner à plein régime
    }
  }
}



void Menu1()    // DATA DISPLAY MENU
{
  myGLCD.clrScr();
  myGLCD.setFont(BigFont);
  myGLCD.setColor(0, 0, 255);
  myGLCD.setBackColor(0, 0, 255);
  myGLCD.setColor(195, 195, 195);
  myGLCD.setBackColor(0, 0, 0);
  myGLCD.setColor(254, 242, 0);
  myGLCD.print("RPM :", 15, 100);
  myGLCD.print("Speed :", 15, 200);
  myGLCD.print("Accel :", 15, 300);
}



Mais j'ai toujours mon soucis d'erreurs vidéo

Les erreurs:
-Si l'écran affiche 1002 et pour ensuite affiché 134 le "2" de 1002 reste affiché => 1342. (une fois affiché pas d'effacement)
-Les valeurs dépassent les 9 chiffres, idem pour les autres.
-avoir une position fixe de 0 à 9999.

trimarco232

Bonjour,
essaye avec pinMode (10, OUTPUT); au lieu de pinMode (10, HIGH);
je ne sais pas si cela résout le problème, mais en tous cas c'est d'avantage correct

trimarco232

Quote
Mais j'ai toujours mon soucis d'erreurs vidéo

Les erreurs:
-Si l'écran affiche 1002 et pour ensuite affiché 134 le "2" de 1002 reste affiché => 1342. (une fois affiché pas d'effacement)
il faudrait justifier ton affichage à droite, donc mettre des espaces selon le nombre de chiffres
cela doit certainement se trouver dans la biblipthèque


Quote
-Les valeurs dépassent les 9 chiffres, idem pour les autres.
-avoir une position fixe de 0 à 9999.
il semble que le problème survint quand tu as déplacé le curseur rapidement vers la gauche : peux-tu confirmer que cela fonctionne bien quand le déplacement ne se fait pas trop vite ?


200sx200

Bonjour,
essaye avec pinMode (10, OUTPUT); au lieu de pinMode (10, HIGH);
je ne sais pas si cela résout le problème, mais en tous cas c'est d'avantage correct
Hi,
Je vais tester ça, merci.

edit:
J'ai essayé même résultat 0V en sortie de pin(10)

Test:
Code: [Select]

void setup() {
  pinMode (10, HIGH); // sur un mega OC2A est sur la pin 10
  TCCR2A = 0x23 ;
  TCCR2B = 0x09 ; // mode 7, clock prescale by 1
  OCR2A = 104-1 ;  // 16000khz / 104 = 153.8khz
  Serial.begin(9600);
  Serial2.begin(9600);
}

--------------------------------------

void setup() {
  digitalWrite (10, HIGH); // sur un mega OC2A est sur la pin 10
  TCCR2A = 0x23 ;
  TCCR2B = 0x09 ; // mode 7, clock prescale by 1
  OCR2A = 104-1 ;  // 16000khz / 104 = 153.8khz
  Serial.begin(9600);
  Serial2.begin(9600);
}
--------------------------------------

void setup() {
  pinMode (10, OUTPUT); // sur un mega OC2A est sur la pin 10
  TCCR2A = 0x23 ;
  TCCR2B = 0x09 ; // mode 7, clock prescale by 1
  OCR2A = 104-1 ;  // 16000khz / 104 = 153.8khz
  Serial.begin(9600);
  Serial2.begin(9600);
}

--------------------------------------

void setup() {
  digitalWrite (10, OUTPUT); // sur un mega OC2A est sur la pin 10
  TCCR2A = 0x23 ;
  TCCR2B = 0x09 ; // mode 7, clock prescale by 1
  OCR2A = 104-1 ;  // 16000khz / 104 = 153.8khz
  Serial.begin(9600);
  Serial2.begin(9600);
}

--------------------------------------




il faudrait justifier ton affichage à droite, donc mettre des espaces selon le nombre de chiffres
cela doit certainement se trouver dans la biblipthèque
J'ai trouvé ça "myGLCD.printNumI(valeur , 130, 185, 3, '0');" ça à résolue le décalage et ça retourne à zéro si pas de valeur.
J'ai éssayé les espaces, car je souhaite que ça reste sur fond noir si pas de valeur mais ça me dessine un truc bizarre surement à cause du printNimI.

édit:
J'ai rajouté un "if (valeur > 9999) {}" qui améliore pas mal le truc mais ne l'évite pas complètement.

Une partie du programme :
Code: [Select]


void setup() {
  Serial.begin (9600);
  .....
   Zero4();
  }

void loop () {

  while (Serial.available() > 0) {
    int inByte = Serial.read(); // lire un premier caractère

// filtrer : il doit etre une lettre majuscule
    if (inByte >= 'A') {
      int valeur = Serial.parseInt();

      // traitement
      switch (inByte) {
        case 'R':
          if (valeur > 0) {
            myGLCD.setFont(SevenSegNumFont);
            myGLCD.setColor(87, 255, 45);
            myGLCD.setBackColor(0, 0, 0);
            myGLCD.printNumI(valeur, 100, 85, 4, '0');
            // controle eventuel de la valeur
            Serial.print("RPM : "); Serial.println(valeur);
            if (valeur > 9999) {}
          }
          break;
      }
} //end loop

void Zero4()
{
  int valeur = 0;
  myGLCD.setFont(SevenSegNumFont);
  myGLCD.setColor(87, 255, 45);
  myGLCD.setBackColor(0, 0, 0);
  myGLCD.printNumI(valeur, 100, 85, 4, '0');
}


il semble que le problème survint quand tu as déplacé le curseur rapidement vers la gauche : peux-tu confirmer que cela fonctionne bien quand le déplacement ne se fait pas trop vite ?
donc oui cela survient seulement avec beaucoup de données, 5/10 données par secondes passe bien sans erreurs, mais je n'ai pas trouvé le moyen de limiter avec la réception de données pour éviter la surcharge.

J'ai même rajouté un flux sur le logiciel VS qui envoie les 3 données simultanément, ça marche bien selon la limite qu'elle peut gérer.

J'ai pas trouvé de limitation que ce soit du coté logiciel que coté arduino.

trimarco232

Bonjour 200sx200,

on  a 2 soucis depuis un moment :
1) génération d'un signal carré par un arduino méga
2) réception de chiffres depuis un PC et affichage sur écran LCD

je te propose de créer 2 topics distincts pour pouvoir faire participer les autres forumistes

200sx200

Bonjour trimarco,

D'accord sa marche, je crée 2 nouveau poste.

Merci de ton aide. :)

200sx200

#143
Sep 04, 2017, 08:53 am Last Edit: Sep 04, 2017, 09:55 am by 200sx200
Donc le Signal résolue (merci pepe) + mon programme cela donne :

Code: [Select]

#include <Wire.h>  // Comes with Arduino IDE
#include <UTFT.h>
#include <SoftwareSerial.h>


//***************************************************************//
// Fréquence du signal
#define F_ECU 153600ul
// Valeur de OCRxA du timer configuré en mode 7
#define OCRxA_ECU_mode7 ((F_CPU+F_ECU)/F_ECU/2-1)

/********************************************************
   WGM2[2:0] = 111 : mode 7 (comptage normal)
   COM2A[1:0] = 01 : sortie A en mode toggle
   COM2B[1:0] = 00 : sortie B déconnectée
   CS2[2:0] = 001  : prédiviseur clk/1
 ********************************************************/
void Timer2setup() {
  pinMode (10, HIGH); // OC2A = pin 10
  TCCR2A = 0x43;
  TCCR2B = 0x09;
  OCR2A = OCRxA_ECU_mode7;
}

/********************************************************
   WGMx[3:0] = 0000 : mode 0 (comptage normal)
   COMxA[1:0] = 00  : sortie A déconnectée
   COMxB[1:0] = 00  : sortie B déconnectée
   COMxC[1:0] = 00  : sortie C déconnectée
   CSx[2:0] = 111   : source Tx sur fronts montants
   TOIEx = 1        : interruption Timer Overflow activée
 ********************************************************/
void Timer5setup() {
  TCCR5A = 0;
  TCCR5B = 7;
  TIMSK5 = 1;
}

uint32_t volatile TOVtime = 0ul;
uint8_t volatile OV = 0;

ISR (TIMER5_OVF_vect) {
  TOVtime = micros();
  OV++;
}
uint32_t oldTOVtime;
//***************************************************************//

//calibration
#define CAL_X 0x004F4E75UL
#define CAL_Y 0x00948DC0UL
#define CAL_S 0x8031F1DFUL

//Screen initialization
UTFT        myGLCD(CTE70, 38, 39, 40, 41);

// RX, TX
SoftwareSerial mySerial(17, 16);

// Declare which fonts we will be using
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];

byte valeur ;
byte consult[28]; // consult[38]
byte consultt[32];
byte iinit = 0x00; // iinit must be 0x10
boolean cf = false; // if 0xCF
boolean initt = false;
boolean ct = false;
boolean ii = false;
boolean ss = false;
boolean pp = true;
byte sped;
byte a = 0;
byte b;
byte c;
long rpm;
float rpm_msb;
float rpm_lsb;
byte water;
float batt;
float maf;
float maf_msb;
float maf_lsb;
float tps;
float inj_msb;
float inj_lsb;
float inj;
byte ign;
byte lambda;

boolean error = false; //error code definiton
byte eror[64];
byte r;
byte rr = 0;
byte ppp = 0;
byte iii = 0;
byte j;
byte but = 0;
boolean butt = true;
byte rrr;

String cas = "CAS/CamPS sensor"; // 0x11
String maff = "MAF sensor"; // 0x12
String coolant = "Coolant t sensor"; // 0x13
String spedd = "Speed sensor"; // 0x14
String ignition = "Noignitionsignal"; // 0x21
String ecu = "ECU malfunction"; // 0x31
String egr = "EGR malfunction"; // 0x32
String oxygen = "Oxygen sensor"; // 0x33
String knock = "Knock sensor"; // 0x34
String gas = "Gas t sensor"; // 0x35
String iat = "IAT sensor"; // 0x41
String fuelt = "Fuel t sensor"; // 0x42
String tpss = "TPS sensor"; // 0x43
String injector = "Injector leak"; // 0x45
String at = "A/T control"; // 0x54
String no = "No malfunction"; //0x55

int menu;
int rc;
int clc;
int test;

void setup() {
  Timer2setup();// Sortie signal 153,8 kHz sur pin 10 (OCR2A)
  // Entrée fréquencemètre sur pin 47 (T5)
  oldTOVtime = micros();
  Timer5setup();
  Serial.begin(115200);
  Serial.begin(9600);
  Serial2.begin(9600);
  myGLCD.InitLCD(LANDSCAPE);                   // Initialize the display
  myGLCD.setFont(BigFont);
  myGLCD.setColor(87, 255, 45);
  myGLCD.fillScr(0, 0, 0);
  myGLCD.clrScr();                            // Clear the screen (black)
}

//loop
void loop() {

skorost:      if (ii == false) {
    unit32();
    Serial.println();
    Serial.print("connection...");
    Serial2.write(0xFF);
    Serial.print(0xFF);
    Serial2.write(0xFF);
    Serial.print(0xFF);
    Serial2.write(0xEF);
    Serial.println(0xEF);
    myGLCD.print("connection...", 5, 5);
    delay(2000);
    myGLCD.clrScr();


    if (Serial2.available() > 0) {
      int read_byte;
      read_byte = Serial2.read();

      myGLCD.printNumI(read_byte, 10, 5);
      Serial.println("reception");
      Serial.println(read_byte);
      myGLCD.print("reception", 5, 5);

      delay(500);
    }

    iinit = Serial2.read();

    if (iinit == 0x10) {
      myGLCD.print(iinit, 5, 5);
      Serial.println();
      Serial.println("connecter");
      myGLCD.print("connecter", 5, 5);
      delay(1000);
      ii = true;
      myGLCD.clrScr();
    }

  }



  if (iinit != 0x10) {
    goto skorost;
  }


Malheureusement je n'obtiens toujours aucune réponse :(
J'ai bien les 2.5V sur la pin 10.

Photo:


Taille réelle


Taille réelle

Basic_Consult_Interface_Schematic.pdf
https://github.com/Crim/Arduino-Nissan-Consult-Library

200sx200

Les masses GND des circuits doivent être reliées ensemble.
Merci pepe, j'ai corrigé de suite :)

• La partie du code qui concerne le fréquencemètre dans le code d'exemple peut être supprimé. La partie utile pour générer le signal sur la pin 10 est ...
Modifié :)

• SoftwareSerial n'a rien à faire sur une carte Mega, qui présente justement l'avantage de posséder 4 interfaces série matérielles.
D'accord je l'ai supprimé, je pensais qu'il était quand même nécessaire, merci

Le code:

Code: [Select]

#include <Wire.h>  // Comes with Arduino IDE
#include <UTFT.h>

//***************************************************************//
// Fréquence du signal
#define F_ECU 153600ul
// Valeur de OCRxA du timer configuré en mode 7
#define OCRxA_ECU_mode7 ((F_CPU+F_ECU)/F_ECU/2-1)

/********************************************************
   WGM2[2:0] = 111 : mode 7 (comptage normal)
   COM2A[1:0] = 01 : sortie A en mode toggle
   COM2B[1:0] = 00 : sortie B déconnectée
   CS2[2:0] = 001  : prédiviseur clk/1
 ********************************************************/
void Timer2setup() {
  pinMode (10, HIGH); // OC2A = pin 10
  TCCR2A = 0x43;
  TCCR2B = 0x09;
  OCR2A = OCRxA_ECU_mode7;
}
//***************************************************************//

//Screen initialization
UTFT        myGLCD(CTE70, 38, 39, 40, 41);

// Declare which fonts we will be using
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];

byte valeur ;
byte consult[28]; // consult[38]
byte consultt[32];
byte iinit = 0x00; // iinit must be 0x10
boolean cf = false; // if 0xCF
boolean initt = false;
boolean ct = false;
boolean ii = false;
boolean ss = false;
boolean pp = true;
byte sped;
byte a = 0;
byte b;
byte c;
long rpm;
float rpm_msb;
float rpm_lsb;
byte water;
float batt;
float maf;
float maf_msb;
float maf_lsb;
float tps;
float inj_msb;
float inj_lsb;
float inj;
byte ign;
byte lambda;

boolean error = false; //error code definiton
byte eror[64];
byte r;
byte rr = 0;
byte ppp = 0;
byte iii = 0;
byte j;
byte but = 0;
boolean butt = true;
byte rrr;

String cas = "CAS/CamPS sensor"; // 0x11
String maff = "MAF sensor"; // 0x12
String coolant = "Coolant t sensor"; // 0x13
String spedd = "Speed sensor"; // 0x14
String ignition = "Noignitionsignal"; // 0x21
String ecu = "ECU malfunction"; // 0x31
String egr = "EGR malfunction"; // 0x32
String oxygen = "Oxygen sensor"; // 0x33
String knock = "Knock sensor"; // 0x34
String gas = "Gas t sensor"; // 0x35
String iat = "IAT sensor"; // 0x41
String fuelt = "Fuel t sensor"; // 0x42
String tpss = "TPS sensor"; // 0x43
String injector = "Injector leak"; // 0x45
String at = "A/T control"; // 0x54
String no = "No malfunction"; //0x55

int menu;
int rc;
int clc;
int test;

void setup() {
  Timer2setup();// Sortie signal 153,8 kHz sur pin 10 (OCR2A)
  Serial.begin(115200);
  Serial.begin(9600);
  Serial2.begin(9600);
  myGLCD.InitLCD(LANDSCAPE);                   // Initialize the display
  myGLCD.setFont(BigFont);
  myGLCD.setColor(87, 255, 45);
  myGLCD.fillScr(0, 0, 0);
  myGLCD.clrScr();                            // Clear the screen (black)
}

//loop
void loop() {

skorost:      if (ii == false) {
    Serial.println();
    Serial.print("connection...");
    Serial2.write(0xFF);
    Serial2.write(0xFF);
    Serial2.write(0xEF);
    delay(1);
    iinit = Serial2.read();
    if (iinit == 0x10) {
      Serial.println();
      Serial.println("connecter");
      delay(2000);
      ii = true;
    }
  }

  if (iinit != 0x10) {
    goto skorost;
  }
}//end loop


200sx200

Il y a encore un « Serial.begin(115200); » de trop dans setup().

Sinon, ça fonctionne depuis que les masses sont reliées ?
OK, je pensais qu'il devait être là pour le signal, je l'ai retiré mais malheureusement pas de réponse :(

trimarco232

Bonjour,
le programme est trop touffu à ce stade : il faudrait commencer par une requête simple, qui attend une réponse simple

200sx200

Bonjour,
le programme est trop touffu à ce stade : il faudrait commencer par une requête simple, qui attend une réponse simple
Chose faite :)  la version light ^^

Code: [Select]

//*********************************Signal*********************************//
// Fréquence du signal
#define F_ECU 153600ul
// Valeur de OCRxA du timer configuré en mode 7
#define OCRxA_ECU_mode7 ((F_CPU+F_ECU)/F_ECU/2-1)

void Timer2setup() {
  pinMode (10, HIGH); // OC2A = pin 10
  TCCR2A = 0x43;
  TCCR2B = 0x09;
  OCR2A = OCRxA_ECU_mode7;
}
//*********************************Signal*********************************//

byte iinit = 0x00; // iinit must be 0x10
boolean ii = false;

void setup() {
  Timer2setup();// Sortie signal 153,8 kHz sur pin 10 (OCR2A)
  Serial.begin(9600);
  Serial2.begin(9600);
}

void loop() {

skorost:      if (ii == false) {
    Serial.println();
    Serial.print("connection...");
    Serial2.write(0xFF);
    Serial2.write(0xFF);
    Serial2.write(0xEF);
    delay(1);
    iinit = Serial2.read();
    if (iinit == 0x10) {
      Serial.println();
      Serial.println("connecter");
      delay(2000);
      ii = true;
    }
  }

  if (iinit != 0x10) {
    goto skorost;
  }

}//end loop

trimarco232

#148
Sep 05, 2017, 11:00 pm Last Edit: Sep 06, 2017, 07:24 pm by trimarco232
Bonjour,
monitore sans distinction tout ce qui pourrait en provenir : les données reçues sont peut-être corrompues, mais pour l'instant ce qui urge c'est de recevoir quelque chose, quoi que ce soit

200sx200

Bonjour,
- remets stp la bonne vitesse de transmission série vers ton ECU
- monitore sans distinction tout ce qui pourrait en provenir : les données reçues sont peut-être corrompues, mais pour l'instant ce qui urge c'est de recevoir quelque chose, quoi que ce soit
Bonjour trimarco,
C'est 9600 la vitesse de l'écu donc je suis bon.

Ok je rajoute:

if (Serial2.available() > 0) {
     int read_byte;
     read_byte = Serial2.read();
     Serial.println(read_byte);
   }

Code: [Select]

void loop() {

skorost:      if (ii == false) {
    Serial.println();
    Serial.print("connection...");
    Serial2.write(0xFF);
    Serial2.write(0xFF);
    Serial2.write(0xEF);
    delay(1);

if (Serial2.available() > 0) {
      int read_byte;
      read_byte = Serial2.read();
      Serial.println(read_byte);
    }
   
    iinit = Serial2.read();
    if (iinit == 0x10) {
      Serial.println();
      Serial.println("connecter");
      delay(2000);
      ii = true;
    }
  }

  if (iinit != 0x10) {
    goto skorost;
  }

}//end loop

Go Up