conseil matériel

antho59:
je viens de tester avec une de 470 ohm, essayer la librairie ntsc et pal, aucun changement toujours pas d'affichage

Tu peut faire un photo de ton câblage ?

Tu est sûr d'avoir la derniére version de tv-out ?
Ta carte est fonctionnelle ? (le sketch blink marche par exemple ?)

Ya un truc pas nette dans ton histoire :wink:

la derniere version ne fonctionne pas, erreur lors de la compilation, j'ai essayer la v1, v1 beta et v3.

le blink fonctionne, test led avec timer fonctionne aussi.

pas de photo désolé, j'ai fait un montage sur plaque d'essai a souder bornes sorties résistances souder ensemble sur le signal rca. sur la 470 ohm je suis brancher sur la mega sur le pwm 11, celle de 1k sur pin 29. et ground rca sur le ground au niveau des pins digital (j'en ai essayer d'autres).

au niveau de l'ide j'ai essayer la version 1.01, v022 et v023.

antho59:
la derniere version ne fonctionne pas, erreur lors de la compilation, j'ai essayer la v1, v1 beta et v3.

Tu peut copier / coller l'erreur ?

voici les erreurs avec la v5.91:

TVout.cpp: In member function 'void TVout::render_setup(uint8_t)':
TVout.cpp:729: error: '_VID_DDR' was not declared in this scope
TVout.cpp:729: error: '_VID_PIN' was not declared in this scope
TVout.cpp:730: error: '_SYNC_DDR' was not declared in this scope
TVout.cpp:730: error: '_SYNC_PIN' was not declared in this scope
TVout.cpp:731: error: '_VID_PORT' was not declared in this scope
TVout.cpp:732: error: '_SYNC_PORT' was not declared in this scope

c'est bon j'ai réussi!!

j'ai pris la dernière version est corrigé tout les défauts, beaucoup de défauts dans les onglets ***.h fichier mal spécifié pour la plus part.

merci skywodd pour ton aide.

je vais enfin avancer...

Tient on doit pas avoir la même version R5.91 alors.
Moi avec ma version (téléchargé directement depuis le gestion de version mercurial du google-code) j'ai tout qui compile correctement ...

je l'ai pris sur code.google.... le problème c'est que la compilation appelle des fichiers via #include .... mais la syntaxe est pas bonne

ex: #include <TVout.h> ne fonctionne pas il faut la remplacer par #include"TVout.h"

bon sinon j'ai un peu avancer depuis hier j'ai réussi a integrer mon propre bitmap d'intro et changer les differentes lignes affichés.

mais là je bloque pour afficher la valeur de pression turbo.

je me suis servis de ce topic: DIY Sub £50 Digital LCD Arduino boost gauge | SEATCUPRA.NET

dans le void setup j'ai inscrusté ce code

//turbo jauge
  TV.write("TURBO"); // “MAP:” at top right of display
  TV.print(boost);
  TV.write("BAR"); // “PSI” three digits to the right of “MAP:”
  TV.write(254); // SerLCD instruction
  TV.write(192); // “Peak:” at bottom right of display
  TV.print("PEAK");
  TV.write(254); // SerLCD instruction
  TV.write(204); // “PSI” left of peakboost
  TV.print("PSI");

et dans le void loop celui-ci:

void loop()
{
mapval= analogRead(mapsen); //Reads the MAP sensor raw value on analog port 0
boost = (mapval/1.9); //Converts raw MAP value to PSI and accounts for atomospheric pressure

if (boost > peakboost) // If current boost is higher than peak, store in peak memory
{
peakboost = boost ;  // Store current boost in peak memory
}

if (peakboost <= 0) // Shifts peak value 1 character to the right if < 10PSI
{
TV.write(254); // SerLCD instruction
TV.write(197); // Peak display after “Peak:”
TV.print(peakboost,1); //peak to 1 decimal
}
else
{
TV.write(254); // SerLCD instruction
TV.write(197); // Go to position 22
TV.write(32); // Load clear bit at position 22
TV.write(254); // SerLCD instruction
TV.write(198); // Go to position 22
TV.write(32); // Load clear bit at position 23
TV.write(254); // SerLCD instruction
TV.write(199); // Go to position 22
TV.write(32); // Load clear bit at position 24
TV.write(254); // SerLCD instruction
TV.write(200); // Go to position 22
TV.write(32); // Load clear bit at position 25
TV.write(254); // SerLCD instruction
TV.write(201); // Go to position 22
TV.write(32); // Load clear bit at position 26
TV.write(254); // SerLCD instruction
TV.write(202); // Go to position 22
TV.write(32); // Load clear bit at position 26
TV.write(254); // SerLCD instruction
TV.write(198); // Peak display after “Peak:”
TV.print(peakboost,1); //peak to 1 decimal
}
if (boost <= 0) //Shifts the MAP value 1 character to the right if < 10PSI
{
TV.write(254); // SerLCD instruction
TV.write(133); // boost after “MAP:”
TV.print(boost,1); //boost to 1 decimal
}
else
{
TV.write(254); // SerLCD instruction
TV.write(133); // Go to position 6
TV.write(32); // Load clear bit at position 4
TV.write(254); // SerLCD instruction
TV.write(134); // Go to position 7
TV.write(32); // Load clear bit at position 4
TV.write(254); // SerLCD instruction
TV.write(135); // Go to position 8
TV.write(32); // Load clear bit at position 4
TV.write(254); // SerLCD instruction
TV.write(136); // Go to position 9
TV.write(32); // Load clear bit at position 4
TV.write(254); // SerLCD instruction
TV.write(137); // Go to position 10
TV.write(32); // Load clear bit at position 4
TV.write(254); // SerLCD instruction
TV.write(138); // Go to position 11
TV.write(32); // Load clear bit at position 4
TV.write(254); // SerLCD instruction
TV.write(134); // boost after “MAP:”
TV.print(boost,1); // boost to one decimal
}
delay(1000); // prevents LCD display from ghosting. Lower number refreshes faster, higher number has less ghosting on slow LCD’s
}

void preset() //peak reset if D2 goes low
{
peakboost = boost; //sets peakboost to current boost reading, resetting the peak memory
}

je vois que des pixels défilé sur l'écran.... j'ai un peu de mal a transcrire le scipt lcd avec le script TVout

Attend tu est en train de tous mélanger !?

TV.write(254); // SerLCD instruction

TV.xxx c'est un objet TV-out ou un objet SoftwareSerial ?

Dans tout les cas :

TV.write("TURBO");Q
TV.print(boost);

-> FAUX

.write(x) -> envoi un octet brute de forme (valeur binaire 0~255)
.print(x) -> affiche une valeur sous forme de caractére

Donc "quelqueChoseEntreDoubleQuote" -> .print(x) et non .write(x) !

oui j'ai mélangé le code, en fin de compte TV.write je n'en ai pas besoin.

dans le code du gars il met serial.write pour envoyer une instruction au LCD, tandis que moi je n'ai pas d'intruction a envoyé j'ai juste a utiliser le code TV.print et println.

je suis dans le bon?

antho59:
oui j'ai mélangé le code, en fin de compte TV.write je n'en ai pas besoin.
dans le code du gars il met serial.write pour envoyer une instruction au LCD, tandis que moi je n'ai pas d'intruction a envoyé j'ai juste a utiliser le code TV.print et println.

je suis dans le bon?

C'est bien ce que je pensai tu t'étais mélangé les pinceaux :grin:

Tu ne travaille pas (plus) avec un Serlcd, donc pas de commande spécial ou autre.
Tu as juste à utiliser TV.print pour afficher ton texte et tes valeurs c'est tout :wink:

un peu d'avancement aujourd'hui mais c'est pas encore çà mais je touche au but.

pour commencer le code

 #include "TVout.h"
#include "fontALL.h"
TVout TV;

int capteurT = 3; // capteur pression turbo connecté broche 3
int valeur = 0; //variable de type int pour stocker la mesure
float pression = 0;

void setup()
{
  TV.begin(NTSC,120,96);
  TV.select_font(font6x8);
  TV.println("test jauge turbo");
  TV.delay(5000);
  TV.println("BY ROCKS");
  TV.delay(5000);
  TV.clear_screen();
  
}

void loop()
{
  valeur = analogRead(capteurT); //lit la valeur de la tension
  pression = (valeur/1,9); //convertit la tension en valeur de pression
  
  TV.select_font(font6x8);
  TV.print("TURBO = ");
  TV.print(pression);
  
}

erreurs dans le calcul et la boucle, si je met TV.print("TURBO = ") et TV.print(pression) je vois le mot turbo et la valeur qui défile sur tout l'écran, mais il faut deviner que c'est marqué...

si je met TV.println("TURBO = ") et TV.println(pression) j'obtient une dizaine de ligne avec turbo et la valeur comme ceci:

pour le calcul j'ai un peu de mal a comprendre si je passe "valeur" en int ou float j'ai aucun changement, j'ai vu sur 2 codes qu'il divisait la valeur par 1023, si la valeur serait toujours a 5v ok mais là c'est pas mon cas, je pense qu'il faudrait diviser la valeur par 210 (pour 5v valeur affiché 1023, pour 4v valeur affiché 830, pour 3v valeur affiché 630) donc si je divise ma valeur affiché par 210 j'obtiendrais la tension en entrée me restera juste après a rediviser par 1.9 pour avoir ma pression.

Il y a une méthode set_cursor(x,y) qui permet de définir l'emplacement où le texte s'affiche.
Dans la beta1 il y a aussi des print et println(x,y,...) qui permettent de choisir l'emplacement de l'affichage. voir dans TVout.h et TVoutPrint.cpp ou là Google Code Archive - Long-term storage for Google Code Project Hosting.

j'ai rajouter un delay et clear screen çà s'affiche sur 2 lignes je vais essayer avec set_cursor pour tout mettre sur la meme ligne

   TV.select_font(font6x8);
  TV.println("TURBO =");
  TV.println(pression);
  TV.delay(100);
  TV.clear_screen();

merci fdufnews

Le problème du clear_screen c'est qu'il peut être la cause d'un papillotement de l'image.

pourquoi faire simple quand on peut faire compliqué :blush:

petite vidéo du résulat: - YouTube

et le code:

#include "TVout.h"
#include "fontALL.h"
TVout TV;

int capteurT=3; // capteur pression turbo connecté broche 3
float valeur=0; //variable de type int pour stocker la mesure
float pression=0;


void setup()
{
  TV.begin(NTSC,120,96);
  TV.select_font(font6x8);
  TV.println("test jauge turbo");
  TV.delay(5000);
  TV.println("BY ROCKS");
  TV.delay(5000);
  TV.clear_screen();
  
}

void loop()
{
  valeur = analogRead(capteurT); //lit la valeur de la tension
  pression = ((valeur/210)/1.9); //convertit la tension en valeur de pression
  
  TV.select_font(font6x8);
  TV.print("turbo= ");
  TV.print(pression);
  TV.println("bar");
  TV.delay(100);
  TV.clear_screen();
  
}

il suffit d'utiliser TV.print et sur la dernières "valeur" ou "texte il faut utiliser TV.println

en esperant que ça puisse servir aux newbies comme moi.

merci les gars pour votre aides.

je mettrais a jour le code avec les modifs réalisé par la suite.

antho59:
pourquoi faire simple quand on peut faire compliqué :blush:

petite vidéo du résulat: - YouTube

bonjour
[HUM]
donc si j'ai bien compris , ça détecte la pression de ton doigt sur le potentiomètre ? :grin:

tu rigoles là?

@ Artouste, j'ai pas compris pourquoi tu dis çà.

sinon je regarde pour mettre une barre de progression en dessous, je compte utiliser TV.draw_rect(x0,y0,width,height,color,fillcolor) comment faire varier la largeur en fonction de la valeur lu en entrée ou de la valeur affiché sur la TV?

Deux petites améliorations que tu peut faire :

antho59:
sinon je regarde pour mettre une barre de progression en dessous, je compte utiliser TV.draw_rect(x0,y0,width,height,color,fillcolor) comment faire varier la largeur en fonction de la valeur lu en entrée ou de la valeur affiché sur la TV?

Utilise map (ou un bête produit en croix) :

Ensuite pour le reste c'est des maths pure et dure :wink:
[partie pleine = x][partie vide = largeur_total - x]
-> un map, et deux TV.draw_rect :wink:

int bar = analogRead (3) // valeur lu en entrée. bar: progress bar

bar = map(bar,0,800,10,100) // 800: valeur max lu en entrée que je ne dépasserai jamais car elle coresspond a une pression d'environ 2bar, valeur de 800 étalonné a 100 qui correspond à la largeur max du rectangle

par contre je comprends pas pourquoi il faut 2 ligne draw_rec?

si je met ce code çà me marchera pas?

TV.draw_rec(0,10,bar,5,white,white);