merci Etienne , je ne connaissaient pas , effectivement très puissant ,simple d'utilisation .
en 10 minutes mon problème était régler .
merci Etienne , je ne connaissaient pas , effectivement très puissant ,simple d'utilisation .
en 10 minutes mon problème était régler .
Hey
j'ai régler le problème de téléversement
je n'avais pas les bonne bibliotheques et il faut selectionner arduino duemilanove dans arduino ide
bon le plus dur reste le code arduino pour faire fonctionner avec simtool
Dude350z oui pour la programmation
voici le code de chez simtool
#include <TM1638.h>
#include <TM1638Font.h>
// To test in serial monitor , take comments out to see the output.
// Need to send R00000G0S000
int Speed;
int Gear;
int Rpm;
int RpmLeds;
int RpmMax = 8000;
//int Water;
//int Oil;
//int Fuel;
//int EngineOverHeat;
//int BrakeOverHeat;
//int TireDamage;
//int ShiftUp;
//int ShiftDown;
//int PartsDetached;
//int InPits;
//int YellowFlag;
//int Sector1Flag;
//int Sector2Flag;
//int Sector3Flag;
int ShiftPoint = 4000;
int LimitRange = 0;
int UnderShiftPoint;
int OverShiftPoint;
int OverShift;
int UnderShift;
int buttonCheck = 1;
int bufferArray[12];
#include <TM1638.h>
TM1638 module(9, 8, 7);
void setup(){
Serial.begin(57600);
// initialize the screen:
module.clearDisplay(); //clears the display
String name = "NUKEM"; //sets a custom Label
module.setDisplayToString(name); //prints the Label
delay(3000); //small delay 3 sec
module.clearDisplay(); //clears the display
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
}
void loop(){
//****************************** READ DATA FROM SERIAL ******************************
if (Serial.available() == 12) { //if 24 bits available in the Serial buffer...
int i;
for (i=0; i<12; i=i+1) { // read and label each byte.
bufferArray[i] = Serial.read();
}
if (bufferArray[0] == 'R'){
unsigned int rpmSmTools = ((bufferArray[1]-48)*10000) + ((bufferArray[2]-48)*1000) + // Take values 1-5.
((bufferArray[3]-48) *100) + ((bufferArray[4]-48)*10) + (bufferArray[5]-48);
// Serial.print("You have set the Rpm to a Value of:");
// Serial.println(rpmSmTools);
Rpm = rpmSmTools;
}
if (bufferArray[6] == 'G'){
unsigned int gearSmTools = ((bufferArray[7]-48)*1);
Gear = gearSmTools;
//Serial.print("You have set the Gear to a Value of:");
//Serial.println(gearSmTools);
}
if (bufferArray[8] == 'S'){
unsigned int speedSmTools = ((bufferArray[9]-48)*100) + ((bufferArray[10]-48)*10) + (bufferArray[11]-48); // Take values 1-5.
Speed = speedSmTools;
//Serial.print("You have set the Speed to a Value of:");
//Serial.println(speedSmTools);
}
// if (bufferArray[12] == 'O'){
//unsigned int oilSmTools = ((bufferArray[13]-48)*100) + ((bufferArray[14]-48)*10) + (bufferArray[15]-48); // Take values 1-5.
//Serial.print("You have set the Oil to a Value of:");
//Serial.println(oilSmTools);
// }
//if (bufferArray[16] == 'W'){
// unsigned int waterSmTools = ((bufferArray[17]-48)*100) + ((bufferArray[18]-48)*10) + (bufferArray[19]-48); // Take values 1-5.
//Serial.print("You have set the Water to a Value of:");
//Serial.println(waterSmTools);
// }
//if (bufferArray[20] == 'F'){
// unsigned int FuelSmTools = ((bufferArray[21]-48)*100) + ((bufferArray[22]-48)*10) + (bufferArray[23]-48); // Take values 1-5.
//Serial.print("You have set the Fuel to a Value of:");
//Serial.println(FuelSmTools);
// }
//if (bufferArray[24] == 'L'){
// EngineOverHeat = bufferArray[25];
// BrakeOverHeat = bufferArray[26];
// TireDamage = bufferArray[27];
// ShiftUp = bufferArray[28];
// ShiftDown = bufferArray[29];
// PartsDetached = bufferArray[30];
// InPits = bufferArray[31];
// YellowFlag = bufferArray[32];
// Sector1Flag = bufferArray[33];
// Sector2Flag = bufferArray[34];
// Sector3Flag = bufferArray[35];
// Serial.print("You have set the lights to a Value of:");
//Serial.println( bufferArray[25]-48);
//Serial.println( bufferArray[26]-48);
//Serial.println( bufferArray[27]-48);
//Serial.println( bufferArray[28]-48);
//Serial.println( bufferArray[29]-48);
//Serial.println( bufferArray[30]-48);
//Serial.println( bufferArray[31]-48);
//Serial.println( bufferArray[32]-48);
//Serial.println( bufferArray[33]-48);
//Serial.println( bufferArray[34]-48);
//Serial.println( bufferArray[35]-48);
//}
CheckButtons();
CheckShiftLightAdj();
SetLimits();
DisplayLeds();
UpdateLCD();
}
}
void UpdateLCD() {
if (buttonCheck == 1){
RpmLeds = map(Rpm, 500,RpmMax ,1 ,8);
if (RpmLeds == 1) { module.setLEDs(0b00000001 | 0b00000000<< 8);}
if (RpmLeds == 2) { module.setLEDs(0b00000011 | 0b00000000<< 8);}
if (RpmLeds == 3) { module.setLEDs(0b00000111 | 0b00000000<< 8);}
if (RpmLeds == 4) { module.setLEDs(0b00001111 | 0b00000000<< 8);}
if (RpmLeds == 5){ module.setLEDs(0b00011111 | 0b00000000<< 8);}
if (RpmLeds == 6){ module.setLEDs(0b00011111 | 0b00100000<< 8);}
if (RpmLeds == 7){ module.setLEDs(0b00011111 | 0b01100000<< 8);}
if (RpmLeds == 8){ module.setLEDs(0b00011111 | 0b11100000<< 8);}
module.setDisplayToDecNumber(Speed, 0, false); //displays numerical the Speed
//module.setDisplayToDecNumber(Rpm, 0, false); //displays numerical the rpm
if (Gear == 9) {char* name = "r"; module.setDisplayToString(name,0);}//r- little r
if (Gear == 0) {char* name = "n"; module.setDisplayToString(name,0);} //n - little n
if (Gear == 1) {module.setDisplayDigit(1, 0, false);}
if (Gear == 2) {module.setDisplayDigit(2, 0, false);}
if (Gear == 3) {module.setDisplayDigit(3, 0, false);}
if (Gear == 4) {module.setDisplayDigit(4, 0, false);}
if (Gear == 5) {module.setDisplayDigit(5, 0, false);}
if (Gear == 6) {module.setDisplayDigit(6, 0, false);}
if (Gear == 7) {module.setDisplayDigit(7, 0, false);}
}
if (buttonCheck == 2){
RpmLeds = map(Rpm, 500, RpmMax,1 ,8);
if (RpmLeds == 1) { module.setLEDs(0b00000001 | 0b00000000<< 8);}
if (RpmLeds == 2) { module.setLEDs(0b00000011 | 0b00000000<< 8);}
if (RpmLeds == 3) { module.setLEDs(0b00000111 | 0b00000000<< 8);}
if (RpmLeds == 4) { module.setLEDs(0b00001111 | 0b00000000<< 8);}
if (RpmLeds == 5){ module.setLEDs(0b00011111 | 0b00000000<< 8);}
if (RpmLeds == 6){ module.setLEDs(0b00011111 | 0b00100000<< 8);}
if (RpmLeds == 7){ module.setLEDs(0b00011111 | 0b01100000<< 8);}
if (RpmLeds == 8){ module.setLEDs(0b00011111 | 0b11100000<< 8);}
//module.setDisplayToDecNumber(Speed, 0, false); //displays numerical the Speed
module.setDisplayToDecNumber(Rpm, 0, false); //displays numerical the rpm
if (Gear == 9) {char* name = "r"; module.setDisplayToString(name,0);}//r- little r
if (Gear == 0) {char* name = "n"; module.setDisplayToString(name,0);} //n - little n
if (Gear == 1) {module.setDisplayDigit(1, 0, false);}
if (Gear == 2) {module.setDisplayDigit(2, 0, false);}
if (Gear == 3) {module.setDisplayDigit(3, 0, false);}
if (Gear == 4) {module.setDisplayDigit(4, 0, false);}
if (Gear == 5) {module.setDisplayDigit(5, 0, false);}
if (Gear == 6) {module.setDisplayDigit(6, 0, false);}
if (Gear == 7) {module.setDisplayDigit(7, 0, false);}
}
}
void CheckButtons(){
if (module.getButtons() == 0b0000001){buttonCheck = 1;}
if (module.getButtons() == 0b00000010){buttonCheck = 2;}
if (module.getButtons() == 0b00000100){RpmMax = Rpm;}
if (module.getButtons() == 0b00001000){ShiftPoint = Rpm;}
}
void CheckShiftLightAdj() {
LimitRange = analogRead(0);
int RpmAdjust = map(LimitRange, 1, 1023, 0, 2000);
UnderShift = RpmAdjust;
OverShift = RpmAdjust;
}
void SetLimits() {
UnderShiftPoint = ShiftPoint - UnderShift;
OverShiftPoint = ShiftPoint + OverShift;
if (OverShiftPoint > RpmMax){OverShiftPoint = RpmMax;}
}
void DisplayLeds(){
if (Rpm >= UnderShiftPoint){digitalWrite(3,HIGH);}
if (Rpm >= ShiftPoint){digitalWrite(4,HIGH);}
if (Rpm >= OverShiftPoint){digitalWrite(5,HIGH);}
if (Rpm < UnderShiftPoint){digitalWrite(3,LOW);}
if (Rpm < ShiftPoint){digitalWrite(4,LOW);}
if (Rpm < OverShiftPoint){digitalWrite(5,LOW);}
}
quand je tente de le televerse j'obtien une erreur
no matching function for call to 'TM1638::TM1638(int, int, int)'
bonjour
j'ai retrouver le code de d'origine fait par thanos (injoignable ...)
// X-sim3dashboard v1 (using TM1638 display and Arduino Nano v3)
// Made by TronicGr (Thanos) 1-30-2013 for X-sim3
// Shared as Public Domain
// Serial parser example: R~a01~~95~S~a02~G~a03~
// Where:
// ~a01~ is 16bit value for rpm
// ~95~ is data value parameter for RPM_MAX divided by 1000 to fit into a byte so actual value is 9500
// ~a02~ is 16bit value for speed
// ~a03~ is 8bit value for gear / neutral / reverse
// You can set the USO pause safely to 10ms for nice fast refresh rates!
#include <TM1638.h> //can be downloaded from http://code.google.com/p/tm1638-library/
// define a module on data pin 5, clock pin 4 and strobe pin 3
TM1638 module1(5, 4, 3);
TM1638 module2(5, 4, 2);
const int ledPin = 13; // the number of the LED pin
int ledState = LOW; // ledState used to set the LED
long previousMillis = 0; // will store last time LED was updated
byte oldbtn = 0;
byte btn =0;
byte btnstate =1;
unsigned long time;
// the follow variables is a long because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long interval = 40; // interval at which to blink (milliseconds)
void setup() {
//Create Serial Object
Serial.begin(125000);
//Serial.begin(115200);
pinMode(ledPin, OUTPUT);
// initialize the screen:
module1.clearDisplay(); //clears the display from garbage if any
module2.clearDisplay(); //clears the display from garbage if any
String name = "Thanos"; //sets a custom logo start up banner
module1.setDisplayToString(name); //prints the banner
name = "Tronicgr"; //sets a custom logo start up banner
module2.setDisplayToString(name); //prints the banner
module1.setLEDs(0b10000000 | 0b00000001<< 8 );
module2.setLEDs(0b10000000 | 0b00000001<< 8 );
delay(50);
module1.setLEDs(0b11000000 | 0b00000011<< 8 );
module2.setLEDs(0b11000000 | 0b00000011<< 8 );
delay(50);
module1.setLEDs(0b11100000 | 0b00000111<< 8 );
module2.setLEDs(0b11100000 | 0b00000111<< 8 );
delay(50);
module1.setLEDs(0b11110000 | 0b00001111<< 8 );
module2.setLEDs(0b11110000 | 0b00001111<< 8 );
delay(50);
module1.setLEDs(0b11111000 | 0b00011111<< 8 );
module2.setLEDs(0b11111000 | 0b00011111<< 8 );
delay(50);
module1.setLEDs(0b11111100 | 0b00111111<< 8 );
module2.setLEDs(0b11111100 | 0b00111111<< 8 );
delay(50);
module1.setLEDs(0b11111110 | 0b01111111<< 8 );
module2.setLEDs(0b11111110 | 0b01111111<< 8 );
delay(50);
module1.setLEDs(0b11111111 | 0b11111111<< 8 );
module2.setLEDs(0b11111111 | 0b11111111<< 8 );
delay(200);
module1.setLEDs(0b00000000 | 0b00000000<< 8 );
module2.setLEDs(0b00000000 | 0b00000000<< 8 );
delay(50);
module1.setLEDs(0b11111111 | 0b11111111<< 8 );
module2.setLEDs(0b11111111 | 0b11111111<< 8 );
delay(100);
module1.setLEDs(0b00000000 | 0b00000000<< 8 );
module2.setLEDs(0b00000000 | 0b00000000<< 8 );
delay(50);
module1.setLEDs(0b11111111 | 0b11111111<< 8 );
module2.setLEDs(0b11111111 | 0b11111111<< 8 );
delay(100);
module1.setLEDs(0b00000000 | 0b00000000<< 8 );
module2.setLEDs(0b00000000 | 0b00000000<< 8 );
delay(50);
module1.setLEDs(0b11111111 | 0b11111111<< 8 );
module2.setLEDs(0b11111111 | 0b11111111<< 8 );
delay(100);
module1.setLEDs(0b00000000 | 0b00000000<< 8 );
module2.setLEDs(0b00000000 | 0b00000000<< 8 );
//delay(1500); //small delay 1.5 sec
module1.clearDisplay(); //clears the 1st display
module2.clearDisplay(); //clears the 2nd display
btn=1;
}
void loop() {
unsigned long currentMillis = millis();
int i;
char bufferArray[20]; // holds all serial data into a array
unsigned int rpm; //holds the rpm data (0-65535 size)
unsigned int rpmleds; //holds the 8 leds values
unsigned int rpmmax; //retrieves from x-sim USO this value as parameter divided by 100
unsigned int carspeed; //holds the speed data (0-65535 size)
unsigned int carspeedkm; //holds the speed data KM (0-65535 size)
byte gear; // holds gear value data
byte d1; // high byte temp variable
byte d2; // low byte temp variable
byte rpmdata = 0; // marker that new data are available
byte speeddata = 0; // marker that new data are available
byte geardata = 0; // marker that new data are available
unsigned int blinkled = 0;
if (Serial.available() >= 9) { //if 6 bytes available in the Serial buffer...
for (i=0; i<9; i++) { // for each byte
bufferArray[i] = Serial.read(); // put into array
}
}
digitalWrite(13, LOW);
delay(10);
digitalWrite(13, HIGH);
//Serial.flush();
if (bufferArray[0] == 'R' ){ // if new bytes have been recieved
d1 = bufferArray[1]; // store high byte of rpm
d2 = bufferArray[2]; // store low byte of rpm
rpm = ((d1<<8) + d2); // concatonate bytes (shift 8 bits)
rpmmax = bufferArray[3]; // retrieves the maxrpm value
rpmmax = (rpmmax * 100)+200; // multiplies the rpm data into thousants
rpmdata=1; // we got new data!
}
if (bufferArray[4] == 'S' ){
d1 = bufferArray[5]; // store high byte of speed
d2 = bufferArray[6]; // store low byte of speed
carspeed = ((d1<<8) + d2); // concatonate bytes (shift 8 bits)
speeddata=1; // we got new data!
}
if (bufferArray[7] == 'G' ){
gear = bufferArray[8]; // retrieves the single byte of gear (0-255 value)
geardata=1; // we got new data!
}
if (btn != 0){
btnstate = btn;
}
if (speeddata == 1) {
if (btnstate == 1){
module1.setDisplayToDecNumber(carspeed, 0, false); //displays numerical the speed
speeddata=0;}
if (btnstate == 2){
carspeedkm = carspeed * 1.60934;
module1.setDisplayToDecNumber(carspeedkm, 0, false); //displays numerical the speed
speeddata=0;}
}
if (geardata == 1) {
char* neutral = "n"; // sets the character for neutral
char* reverse = "r"; // sets the character for reverse
gear = gear - 127; // offset the 0 value in 8-bit
if (gear >= 1 and gear <10 ){
module1.setDisplayDigit(gear, 0, false); // displays numerical value of the current gear
}
if (gear == 0){
module1.setDisplayToString(neutral, 0, 0); // displays the character for neutral
}
if (gear == 255){ // -1 that reprecents reverse rollover to 255 so...
module1.setDisplayToString(reverse, 0, 0); // displays the character for reverse
}
geardata=0;
}
Serial.flush();
btn = module1.getButtons();
if (btn != 0) {
if (time+200 < millis()){
oldbtn=255;
time=millis();
}
if (oldbtn != btn){
time=millis();
oldbtn=btn;
//module1.setDisplayToDecNumber(btn, 0, false);
}
}
if (rpmdata == 1) {
module2.setDisplayToDecNumber(rpm, 0, false); //displays numerical the speed
rpmleds = map(rpm,0,rpmmax,0,17); // distributes the rpm level to the 8 leds + 1 for shift change
if (rpmleds==0){
module1.setLEDs(0b00000000 | 0b00000000 << 8);
module2.setLEDs(0b00000000 | 0b00000000 << 8);
}
if (rpmleds==1){
module1.setLEDs(0b00000000 | 0b00000001 << 8 );
module2.setLEDs(0b00000000 | 0b00000000 << 8);
}
if (rpmleds==2){
module1.setLEDs(0b00000000 | 0b00000011 << 8 );
module2.setLEDs(0b00000000 | 0b00000000 << 8);
}
if (rpmleds==3){
module1.setLEDs(0b00000000 | 0b00000111 << 8 );
module2.setLEDs(0b00000000 | 0b00000000 << 8);
}
if (rpmleds==4){
module1.setLEDs(0b00000000 | 0b00001111 << 8);
module2.setLEDs(0b00000000 | 0b00000000 << 8);
}
if (rpmleds==5){
module1.setLEDs(0b00000000 | 0b00011111 << 8);
module2.setLEDs(0b00000000 | 0b00000000 << 8);
}
if (rpmleds==6){
module1.setLEDs(0b00000000 | 0b00111111 << 8);
module2.setLEDs(0b00000000 | 0b00000000 << 8);
}
if (rpmleds==7){
module1.setLEDs(0b00000000 | 0b01111111 << 8);
module2.setLEDs(0b00000000 | 0b00000000 << 8);
}
if (rpmleds==8){
module1.setLEDs(0b00000000 | 0b11111111 << 8);
module2.setLEDs(0b00000000 | 0b00000000 << 8);
}
if (rpmleds==9){
module1.setLEDs(0b00000000 | 0b11111111 << 8);
module2.setLEDs(0b00000000 | 0b00000001 << 8);
}
if (rpmleds==10){
module1.setLEDs(0b00000000 | 0b11111111 << 8);
module2.setLEDs(0b00000000 | 0b00000011 << 8);
}
if (rpmleds==11){
module1.setLEDs(0b00000000 | 0b11111111 << 8);
module2.setLEDs(0b00000000 | 0b00000111 << 8);
}
if (rpmleds==12){
module1.setLEDs(0b00000000 | 0b11111111 << 8);
module2.setLEDs(0b00000000 | 0b00001111 << 8);
}
if (rpmleds==13){
module1.setLEDs(0b00000000 | 0b11111111 << 8);
module2.setLEDs(0b00000000 | 0b00011111 << 8);
}
if (rpmleds==14){
module1.setLEDs(0b00000000 | 0b11111111 << 8);
module2.setLEDs(0b00100000 | 0b00011111 << 8 );
}
if (rpmleds==15){
module1.setLEDs(0b00000000 | 0b11111111 << 8);
module2.setLEDs(0b01100000 | 0b00011111 << 8 );
}
if (rpmleds==16){
//blinkled++;
//module.setLEDs(0b11100000 | 0b000011111<<8 );}
//if (blinkled > 100){
module1.setLEDs(0b00000000 | 0b00000000 << 8);
module2.setLEDs(0b00000000 | 0b00000000 << 8);
//delay(20);
//}
//if (blinkled > 200){
if(currentMillis - previousMillis > interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
module1.setLEDs(0b11111111 | 0b11111111 << 8 );
module2.setLEDs(0b11111111 | 0b11111111 << 8 );
}
rpmdata=0;
}
}
}
si quelqu'un aurait fait un dashboard avec 2 tm1638 et arduino nano v3 ou meme avec un seul tm1638 ?
j'y connais que dalle en arduino
oui sur la programmations (je pense qu'il faut le reprogrammer ? il fonctionnait avec x-sim 3 )
comment faire le lien avec game dash de simtool ?
bonsoir
j'aimerai faire fonctionner mon compteur diy (2 x tm1638 et arduino ) je l'avais acheter a l'époque a tronicgr (thanos)
il fonctionnait sous xsim3
j'ai mon pc qui est mort le hdd et tous ce qu'il contenait
j'ai remonté un pc et je souhaite passer par simtool (vers 2.51) et game dash (2.3)
j'ai tenter avec le tuto de racing mat http://www.racingfr.com/forum/index.php?showtopic=48223 mais les images sont indisponibles
j'aurais besoin d'un coup main pour faire fonctionner tous ca