Show Posts
Pages: 1 2 [3] 4 5 ... 61
31  Using Arduino / Programming Questions / Re: EEPROM LifeSpan on: October 23, 2013, 02:12:53 pm
The lifespan of one cell is at least 100000 write/erase. I don't think you risk something, and also you could write to another cell every 1000 cycles or so to ensure you will almost never have a dead cell.
32  Using Arduino / Programming Questions / Re: Communication between arduino and processing not working!? on: October 23, 2013, 04:26:41 am
You do this:
Code:
if(num>=1&&num<=2 ...
...
else if(num>=2&&num<=3 ...

which is the same thing as doing:
Code:
if (num == 1 || num == 2)
...
else if (num == 2 || num == 3)

Maybe that's the problem?
33  Using Arduino / Programming Questions / Re: Updating Display while waiting on: October 23, 2013, 04:17:28 am
Hello,

Look the Blink without delay example
34  Using Arduino / Programming Questions / Re: Stack Array.....(FILO) on: October 23, 2013, 04:16:03 am
Hello and welcome,

Explain what you want to do exactly.
35  Using Arduino / Programming Questions / Re: Temperature sensor simple code not working together with LED light on: October 22, 2013, 06:12:05 am
Yes but you must declare 'temp' as I did (and also add the things related to the LED)

Code:
#include <OneWire.h>
#include <DallasTemperature.h>
 
// Data wire is plugged into pin 2 on the Arduino
#define ONE_WIRE_BUS 2
 
// Setup a oneWire instance to communicate with any OneWire devices
// (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
 
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

const uint8_t ledPin = 13;                 // LED connected to digital pin 13

void setup(void)
{
  pinMode(ledPin, OUTPUT);      // sets the digital pin as output

  // start serial port
  Serial.begin(9600);
  Serial.println("Dallas Temperature IC Control Library Demo");

  // Start up the library
  sensors.begin();
}
 
 
void loop(void)
{
  // call sensors.requestTemperatures() to issue a global temperature
  // request to all devices on the bus
  Serial.print(" Requesting temperatures...");
  sensors.requestTemperatures(); // Send the command to get temperatures
  Serial.println("DONE");

  float temp = sensors.getTempCByIndex(0);

  Serial.print("Temperature for Device 1 is: ");
  Serial.print(temp);
    // You can have more than one IC on the same bus.
    // 0 refers to the first IC on the wire

  if (temp < 35 || temp > 37.8)
    digitalWrite(ledPin, HIGH);
  else
    digitalWrite(ledPin, LOW);
}

And please use the code tags (the # button in the edit box)
36  Using Arduino / Programming Questions / Re: DS18B20 temperature sensor simple code not working together with LED light on: October 22, 2013, 06:02:05 am
Something like that:
Code:
float temp = sensors.getTempCByIndex(0);

if (temp < 35 || temp > 37.8)
    digitalWrite(ledPin, HIGH);
else
    digitalWrite(ledPin, LOW);

Or simplified:
Code:
float temp = sensors.getTempCByIndex(0);

digitalWrite( ledPin, (temp < 35 || temp > 37.8) );
37  Using Arduino / Storage / Re: the memry card is write-protected on: October 19, 2013, 08:47:12 am
Make sure the lock "button" on the SD card isn't set.
38  International / Français / Re: OdB pour Subaru on: October 18, 2013, 05:28:36 pm
De rien, tu me dois un tour dans ta sub' smiley

Ton code ne peut pas fonctionner, ce serait assez long d'expliquer pourquoi, il y a trop de problèmes smiley-razz. Si tu veux attendre une réponse complète avant d'envoyer une autre commande, tu peux utiliser un "while":
Code:
//pause tant qu'il n'y a pas 3 bytes dans le buffer du Serial
while ( Serial.available() < 3 );

Mais je déconseille fortement cette méthode. C'est bien si tu veux tester, mais oublie cette méthode si tu compte l'intégrer dans ton code final, qui doit probablement pouvoir s'exécuter librement sans devoir attendre l'ECU.


Code bloquant:
Code:
void loop()
{
    //envoyer la commande pour lire RPM
    Serial.write( 0x78 );
    Serial.write( 0x13 );
    Serial.write( 0x38 );
    Serial.write( 0x00 );
  
    //pause tant qu'il n'y a pas 3 bytes dans le buffer du Serial
    while ( Serial.available() < 3 );

    //stocker la réponse
    static uint8_t reponseRPM[3];
    reponseRPM[0] = (uint8_t)Serial.read();
    reponseRPM[1] = (uint8_t)Serial.read();
    reponseRPM[2] = (uint8_t)Serial.read();

    //envoyer la commande stop
    Serial.write( 0x12 );
    Serial.write( 0x00 );
    Serial.write( 0x00 );
    Serial.write( 0x00 );

    //envoyer la commande pour lire Vitesse
    Serial.write( 0x78 );
    Serial.write( 0x13 );
    Serial.write( 0x36 );
    Serial.write( 0x00 );

    //pause tant qu'il n'y a pas 3 bytes dans le buffer du Serial
    while ( Serial.available() < 3 );

    //stocker la réponse
    static uint8_t reponseVITESSE[3];
    reponseVITESSE[0] = (uint8_t)Serial.read();
    reponseVITESSE[1] = (uint8_t)Serial.read();
    reponseVITESSE[2] = (uint8_t)Serial.read();

    //envoyer la commande stop
    Serial.write( 0x12 );
    Serial.write( 0x00 );
    Serial.write( 0x00 );
    Serial.write( 0x00 );

    //afficher sur le LCD
    if ( reponseRPM[0] == 0x13 && reponseRPM[1] == 0x38 )
    {
        lcd.setCursor(0,1);
        lcd.print( reponseRPM[2] * 25 );
    }
    if ( reponseVITESSE[0] == 0x13 && reponseVITESSE[1] == 0x36 )
    {
        lcd.setCursor(6,1);
        lcd.print( reponseVITESSE[2] * 2 );
    }
}



Code non bloquant:
Code:
void setup()
{
    ....

    //envoyer la commande pour lire RPM
    Serial.write( 0x78 );
    Serial.write( 0x13 );
    Serial.write( 0x38 );
    Serial.write( 0x00 );
}

void loop()
{
    if ( Serial.available() > 0)
    {
        static uint8_t index;
        static uint8_t reponse[3];

        reponse[index++] = (uint8_t)Serial.read();

        if ( index == 3 )
        {
            index = 0;

            if ( reponse[0] == 0x13 && reponse[1] == 0x38 )
            {
                lcd.setCursor(0,1);
                lcd.print( reponse[2] * 25 );

                Serial.write( 0x12 );
                Serial.write( 0x00 );
                Serial.write( 0x00 );
                Serial.write( 0x00 );

                Serial.write( 0x78 );
                Serial.write( 0x13 );
                Serial.write( 0x36 );
                Serial.write( 0x00 );
            }

            else if ( reponse[0] == 0x13 && reponse[1] == 0x36 )
            {
                lcd.setCursor(6,1);
                lcd.print( reponse[2] * 2 );

                Serial.write( 0x12 );
                Serial.write( 0x00 );
                Serial.write( 0x00 );
                Serial.write( 0x00 );

                Serial.write( 0x78 );
                Serial.write( 0x13 );
                Serial.write( 0x38 );
                Serial.write( 0x00 );
            }
        }
    }
}

Bien sûr c'est moche et on peut grandement "simplifier" le code à l'aide de tableaux et de "for loop", mais ça je te laisse découvrir sinon tu n'apprendras rien... J'ai probablement fait quelques erreurs, pas facile d'écrire un code et de ne pas pouvoir le tester.  A toi de le faire fonctionner smiley-wink

A partir de maintenant, tout code sera facturé smiley-wink
39  Using Arduino / Programming Questions / Re: Save year month day time to SD card on: October 18, 2013, 10:38:54 am
Hello and welcome,

You know how to write text in a file on the SD card? You know how to wire and use a button? If not, there are tons of examples.

To get the current time there are some solutions... the easiest (in my opinion) is to use a breakout board like the JY MCU DS3231 (search google).

Then writing the time to the SD card would be trivial...

You will almost never find code that does exactly what you want, it's to you to combine/modify examples to make it work like you want.
40  International / Français / Re: Modules RF XBee on: October 18, 2013, 08:47:18 am
Bonjour et bienvenue,

modules rf xbee pour transmettre les données.

Transmettre les données à un PC? un smartphone? un autre Arduino?

Il faut être un peu plus clair, explique bien on projet et alors on pourra te suggérer des solutions.
41  Using Arduino / Project Guidance / Re: Want to make an RGB LED change colors with a temperature sensor. on: October 17, 2013, 08:37:36 pm
You can use linear interpolation, example function:
Code:
uint8_t lerp( uint8_t start, uint8_t end, uint8_t step, uint8_t steps)
{
    return (end - start) * step / steps + start;
}

At 24°C, the LED is red: R = 255, G = 0, B = 0
At 34°C, the LED is orange: R = 255, G = 165, B = 0

There is 10°C difference, let's say there are 10 steps, one for each degree.

Say you want to calculate the color of the LED at 28°C (the 4th step):
Code:
uint8_t r = lerp( 255, 255, 4, 10 );
uint8_t g = lerp( 0, 165, 4, 10 );
uint8_t b = lerp( 0, 0, 4, 10 );
The result is:
r = 255
g = 66
b = 0
42  International / Français / Re: OdB pour Subaru on: October 16, 2013, 01:08:59 pm
Désolé une petite erreur dans mon code, j'ai édité.
43  International / Français / Re: OdB pour Subaru on: October 16, 2013, 01:00:41 pm
A chaque loop (car ce bout de code va dans loop() au cas où ce ne serait pas évident) on vérifie s'il y a quelque chose à lire dans le buffer du Serial. S'il y a au moins un byte à lire, alors on en lit un et le stocke dans un buffer circulaire. Ensuite quand on a reçu 3 bytes on compare les 2 premiers bytes avec l'adresses du régime moteur et si c'est le cas on affiche sur le lcd le 3eme byte multiplié par 25.

Ce code est loin d'être parfait et probablement buggé, ce n'est qu'un exemple. Il fonctionne au moins?

Par exemple si pour quelque raison que ce soit, ton arduino se reset alors que l'ECU envoie des données, il se peut que reponse[0] contienne le 3eme byte de la réponse attendue, et reponse[1] et [2] contiendraient l'adresse.. et donc la condition qui compare reponse[0] et reponse[1] avec l'adresse, ne serait jamais vraie.


Il va falloir apprendre à coder smiley-wink

Edit: Je viens de tester. Ca ne ressort qu'une suite de 0.

Argh..
44  International / Français / Re: OdB pour Subaru on: October 16, 2013, 12:25:56 pm
Je crois savoir pourquoi, sans en être sûr (je ne peux pas tester pour l'instant). Ma théorie c'est que le compilateur "optimise" cette ligne
Code:
if ( Serial.read() == 0x13 && Serial.read() == 0x38 )

Ce n'est pas fréquent une fonction sans paramètres qui retourne 2 valeurs différentes, le compilateur pense peut-être que la condition ne sera jamais vraie et la fait simplement disparaître du code compilé...

Essaie un truc du genre:
Code:
if ( Serial.available() > 0)
{
  static uint8_t index;
  static uint8_t reponse[3];

  reponse[index++] = (uint8_t)Serial.read();

  if ( index == 3 )
  {
    if ( reponse[0] == 0x13 && reponse[1] == 0x38 )
      lcd.print( reponse[2] * 25 );

    index = 0;
  }
}
45  International / Français / Re: OdB pour Subaru on: October 16, 2013, 11:15:32 am
Bonne nouvelle smiley

Donc RPM = (int)Serial.read() * 34 ? Ou alors le compte tour n'est peut-être pas très précis...

Oups j'ai confondu du hex et du décimal

Ca me parait correct, 0x23 = 34, 34*25 = 850 trs/min
Pages: 1 2 [3] 4 5 ... 61