• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Button Box
#10
Kod:
#include <LiquidCrystal.h>
#include <Servo.h>

const int SPEEDO_PIN      = A1;
const int RPM_PIN         = A0;
const int LEFT_INDICATOR  = A2;   /// Podłączasz GND dioda i A2 najlepiej użyc arduino nano
const int RIGHT_INDICATOR = A3;
const int PARKING_BREAK   = A4;
const int FUEL_WARNING    = A5;

// Servo variables
Servo speedo;
Servo rpm;



#define PACKET_SYNC 0xFF
#define PACKET_VER  2

#define SERVO_DIR_NORMAL false
#define SERVO_DIR_INVERT true

int serial_byte;

LiquidCrystal lcd(12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2);

void setup()
{
Serial.begin(115200);

lcd.begin(16, 2);
lcd.print("Self Test");

// Initialise servos
speedo.attach(SPEEDO_PIN);
speedo.write(180);

rpm.attach(RPM_PIN);
rpm.write(180);

// Initialise LEDs
pinMode(LEFT_INDICATOR, OUTPUT);
pinMode(RIGHT_INDICATOR, OUTPUT);
pinMode(PARKING_BREAK, OUTPUT);
pinMode(FUEL_WARNING, OUTPUT);

digitalWrite(LEFT_INDICATOR, 0);
digitalWrite(RIGHT_INDICATOR, 0);
digitalWrite(PARKING_BREAK, 0);
digitalWrite(FUEL_WARNING, 0);


delay(500);

speedo.write(0);
rpm.write(0);
digitalWrite(LEFT_INDICATOR, 1);
digitalWrite(RIGHT_INDICATOR, 1);
digitalWrite(PARKING_BREAK, 1);
digitalWrite(FUEL_WARNING, 1);


delay(500);

speedo.write(180);
rpm.write(180);
digitalWrite(LEFT_INDICATOR, 0);
digitalWrite(RIGHT_INDICATOR, 0);
digitalWrite(PARKING_BREAK, 0);
digitalWrite(FUEL_WARNING, 0);


lcd.clear();
lcd.print("Wait");

// Wait a second to ensure serial data isn't from re-programming
delay(1000);
lcd.clear();
lcd.print("Ready");
}



void read_serial_byte_set_servo(Servo& servo, bool invert)
{
serial_byte = Serial.read();
serial_byte = (serial_byte < 0) ? 0 : ((serial_byte > 180) ? 180 : serial_byte);
if (invert)
  servo.write(180 - serial_byte);
else
  servo.write(serial_byte);
}

void skip_serial_byte()
{
(void)Serial.read();
}

void digitalWriteFromBit(int port, int value, int shift)
{
digitalWrite(port, (value >> shift) & 0x01);
}

void loop()
{
if (Serial.available() < 16)
  return;

serial_byte = Serial.read();
if (serial_byte != PACKET_SYNC)
  return;
 
serial_byte = Serial.read();
if (serial_byte != PACKET_VER)
{
  lcd.clear();
  lcd.print("PROTOCOL VERSION ERROR");
  return;
}

read_serial_byte_set_servo(speedo, SERVO_DIR_INVERT); // Speed  
read_serial_byte_set_servo(rpm, SERVO_DIR_INVERT); // RPM

skip_serial_byte(); // Brake air pressure
skip_serial_byte(); // Brake temperature
skip_serial_byte(); // Fuel ratio
skip_serial_byte(); // Oil pressure
skip_serial_byte(); // Oil temperature
skip_serial_byte(); // Water temperature
skip_serial_byte(); // Battery voltage
 

// Truck lights byte
serial_byte = Serial.read();
digitalWriteFromBit(LEFT_INDICATOR,  serial_byte, 5);  
digitalWriteFromBit(RIGHT_INDICATOR, serial_byte, 4);

// Warning lights bytes

serial_byte = Serial.read();  
digitalWriteFromBit(PARKING_BREAK, serial_byte, 7);
digitalWriteFromBit(FUEL_WARNING, serial_byte, 3);  

// Enabled flags
serial_byte = Serial.read();

// Text length
int text_len = Serial.read();

// Followed by text
if (0 < text_len && text_len < 127)
{
  lcd.clear();
  for (int i = 0; i < text_len; ++i)
  {
    while (Serial.available() == 0) // Wait for data if slow
    {
      delay(2);
    }
    serial_byte = Serial.read();
    if (serial_byte < 0 && serial_byte > 127)
      return;
   
    if (serial_byte == '\n')
      lcd.setCursor(0, 1);
    else
      lcd.print(char(serial_byte));
//      delay(2);
  }
}

}


Załączone pliki
.zip   ets2_dashboard_v3.zip (Rozmiar: 34.91 KB / Pobrań: 8)
 
Odpowiedź
  


Wiadomości w tym wątku
Button Box - przez dolegr - 21-11-2017, 23:03
RE: Button Box - przez adix - 22-11-2017, 13:51
RE: Button Box - przez dolegr - 22-11-2017, 20:35
RE: Button Box - przez adix - 23-11-2017, 19:36
RE: Button Box - przez Hixi - 25-11-2017, 16:10
RE: Button Box - przez soczek4024 - 25-11-2017, 17:40
RE: Button Box - przez Hixi - 25-11-2017, 17:52
RE: Button Box - przez soczek4024 - 26-11-2017, 14:13
RE: Button Box - przez Hixi - 26-11-2017, 22:41
RE: Button Box - przez soczek4024 - 27-11-2017, 00:54
RE: Button Box - przez Hixi - 27-11-2017, 09:41
RE: Button Box - przez soczek4024 - 27-11-2017, 14:59
RE: Button Box - przez Hixi - 27-11-2017, 15:55
RE: Button Box - przez simracer - 03-10-2018, 07:33
RE: Button Box - przez soczek4024 - 27-11-2017, 21:25
RE: Button Box - przez Hixi - 29-11-2017, 00:07
RE: Button Box - przez krn78 - 01-12-2017, 13:49
RE: Button Box - przez soczek4024 - 29-11-2017, 00:38
RE: Button Box - przez Hixi - 29-11-2017, 16:45

Skocz do:


Przeglądający: 2 gości