• 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
Problem z przerobieniem kodu pod wyświetlacz i2c
#1
Witam, znalazłem na internecie to http://www.silasparker.co.uk/2013/09/eur...l.html?m=1 problem jest taki, że dopiero co zaczynam przygodę z arduino i niewiem jak przerobić ten kod pod wyświetlacz z konwerterem pod I2C.  Tutaj daje kod :
Kod:
#include <LiquidCrystal.h>
#include <Servo.h>

const int SPEEDO_PIN      = A1;
const int RPM_PIN         = A0;
const int LEFT_INDICATOR  = A2;
const int RIGHT_INDICATOR = A3;
const int PARKING_BREAK   = A4;
const int FUEL_WARNING    = A5;


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");
 
 
 speedo.attach(SPEEDO_PIN);
 speedo.write(180);
 
 rpm.attach(RPM_PIN);
 rpm.write(180);
 

 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");

 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);   
 read_serial_byte_set_servo(rpm, SERVO_DIR_INVERT);
 
 skip_serial_byte();
 skip_serial_byte();
 skip_serial_byte();
 skip_serial_byte();
 skip_serial_byte();
 skip_serial_byte();
 skip_serial_byte();
   
 

 serial_byte = Serial.read();
 digitalWriteFromBit(LEFT_INDICATOR,  serial_byte, 5);  
 digitalWriteFromBit(RIGHT_INDICATOR, serial_byte, 4);
 


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


 serial_byte = Serial.read();
 
 
 int text_len = Serial.read();
 

 if (0 < text_len && text_len < 127)
 {
   lcd.clear();
   for (int i = 0; i < text_len; ++i)
   {
     while (Serial.available() == 0)
     {
       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));
   }
 }
 
}



Z góry dzięki za pomoc i przepraszam za wszystkie błędy
 
Odpowiedź
  


Wiadomości w tym wątku
Problem z przerobieniem kodu pod wyświetlacz i2c - przez boksej - 16-04-2018, 07:38

Skocz do:


Przeglądający: 1 gości