Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int n1=0;
- int n2=0;
- int n3=0;
- int s1=0;
- int s2=0;
- int s3=0;
- int cont=0;
- int number = 1;
- int numberp = 1;
- int gdis,gspd;
- static long receivedNumber = 0;
- static long receivedSpeed = 0;
- static boolean negative = false;
- static int distance = 0;
- const char startOfNumberDelimiter = '<';
- const char endOfNumberDelimiter = '>';
- const char startOfSpeedDelimiter = 'S';
- const char endOfSpeedDelimiter = 's';
- void setup() {
- pinMode(2,OUTPUT);
- pinMode(3,OUTPUT);
- pinMode(4,OUTPUT);
- pinMode(5,OUTPUT);
- pinMode(6,OUTPUT);
- pinMode(7,OUTPUT);
- pinMode(8,OUTPUT);
- pinMode(9,OUTPUT);
- pinMode(10,OUTPUT);
- pinMode(11,OUTPUT);
- pinMode(12,OUTPUT);
- pinMode(A0,OUTPUT);
- pinMode(A1,OUTPUT);
- pinMode(A2,OUTPUT);
- pinMode(A5,INPUT);
- number = digitalRead(A5);
- numberp = digitalRead(A5);
- Serial.begin(9600);
- }
- void processNumber (const long n) {
- if (gdis == 1) {
- n1=-1;
- n2=-1;
- n3=-1;
- }
- else {
- n1 = n%10;
- if (n >= 10)
- n2 = ((n-n1)/10)%10;
- else
- n2 = 0;
- if (n>=100)
- n3 = (n-n1-10*n2)/100;
- else
- n3 = 0;
- }
- } // end of processNumber
- void processSpeed (const long n) {
- if (gspd==0) {
- s1 = n%10;
- s2 = ((n-s1)/10)%10;
- s3 = ((n-s1-10*s2)/100)%10;
- processNumber((n-s1-10*s2-100*s3)/1000);
- }
- else {
- s1=-1;
- s2=-1;
- s3=-1;
- processNumber(n/1000);
- }
- }
- void processInput ()
- {
- byte c = Serial.read ();
- switch (c)
- {
- case endOfNumberDelimiter:
- if (negative)
- processNumber (- receivedNumber);
- else
- processSpeed (receivedNumber);
- distance=0;
- break;
- // fall through to start a new number
- case startOfNumberDelimiter:
- cont = 0;
- gdis=0;
- gspd=0;
- distance = 1;
- receivedNumber = 0;
- negative = false;
- break;
- case '0' ... '9':
- cont++;
- receivedNumber *= 10;
- receivedNumber += c - '0';
- break;
- case '-':
- if (cont < 3) {
- cont++;
- gdis=1;
- }
- else
- gspd=1;
- receivedNumber *=10;
- break;
- } // end of switch
- } // end of processInput
- void loop() {
- if (Serial.available ())
- processInput ();
- if (negative == false) {
- digitalWrite(10,LOW);
- digitalWrite(11,LOW);
- digitalWrite(12,HIGH);
- digitalWrite(14,LOW);
- digitalWrite(15,LOW);
- digitalWrite(16,LOW);
- writeNumber(n1,0);
- delay(2);
- digitalWrite(10,LOW);
- digitalWrite(11,HIGH);
- digitalWrite(12,LOW);
- digitalWrite(14,LOW);
- digitalWrite(15,LOW);
- digitalWrite(16,LOW);
- writeNumber(n2,1);
- delay(2);
- digitalWrite(10,HIGH);
- digitalWrite(11,LOW);
- digitalWrite(12,LOW);
- digitalWrite(14,LOW);
- digitalWrite(15,LOW);
- digitalWrite(16,LOW);
- writeNumber(n3,0);
- delay(2);
- digitalWrite(10,LOW);
- digitalWrite(11,LOW);
- digitalWrite(12,LOW);
- digitalWrite(14,LOW);
- digitalWrite(15,LOW);
- digitalWrite(16,HIGH);
- writeNumber(s1,0);
- delay(2);
- digitalWrite(10,LOW);
- digitalWrite(11,LOW);
- digitalWrite(12,LOW);
- digitalWrite(14,LOW);
- digitalWrite(15,HIGH);
- digitalWrite(16,LOW);
- writeNumber(s2,0);
- delay(2);
- digitalWrite(10,LOW);
- digitalWrite(11,LOW);
- digitalWrite(12,LOW);
- digitalWrite(14,HIGH);
- digitalWrite(15,LOW);
- digitalWrite(16,LOW);
- writeNumber(s3,0);
- delay(2);
- }
- else {
- digitalWrite(10,HIGH);
- digitalWrite(11,HIGH);
- digitalWrite(12,HIGH);
- digitalWrite(14,HIGH);
- digitalWrite(15,HIGH);
- digitalWrite(16,HIGH);
- digitalWrite(2,LOW);
- digitalWrite(3,HIGH);
- digitalWrite(4,HIGH);
- digitalWrite(5,HIGH);
- digitalWrite(6,HIGH);
- digitalWrite(7,HIGH);
- digitalWrite(8,HIGH);
- digitalWrite(9,HIGH);
- delay(2);
- }
- number = digitalRead(A5);
- if (number != numberp) {
- numberp = number;
- Serial.println(number);
- }
- //delay(5);
- }
- void writeNumber(int i, int p) {
- if (p==1)
- digitalWrite(9,LOW);
- else
- digitalWrite(9,HIGH);
- switch (i) {
- case -1:
- digitalWrite(7,LOW);
- digitalWrite(6,HIGH);
- digitalWrite(3,HIGH);
- digitalWrite(2,HIGH);
- digitalWrite(4,HIGH);
- digitalWrite(5,HIGH);
- digitalWrite(8,HIGH);
- digitalWrite(9,HIGH);
- break;
- case 0:
- digitalWrite(7,HIGH);
- digitalWrite(6,LOW);
- digitalWrite(3,LOW);
- digitalWrite(2,LOW);
- digitalWrite(4,LOW);
- digitalWrite(5,LOW);
- digitalWrite(8,LOW);
- break;
- case 1:
- digitalWrite(7,HIGH);
- digitalWrite(6,HIGH);
- digitalWrite(3,HIGH);
- digitalWrite(2,LOW);
- digitalWrite(4,HIGH);
- digitalWrite(5,HIGH);
- digitalWrite(8,LOW);
- break;
- case 2:
- digitalWrite(7,LOW);
- digitalWrite(6,HIGH);
- digitalWrite(3,LOW);
- digitalWrite(2,LOW);
- digitalWrite(4,LOW);
- digitalWrite(5,LOW);
- digitalWrite(8,HIGH);
- break;
- case 3:
- digitalWrite(7,LOW);
- digitalWrite(6,HIGH);
- digitalWrite(3,LOW);
- digitalWrite(2,LOW);
- digitalWrite(4,HIGH);
- digitalWrite(5,LOW);
- digitalWrite(8,LOW);
- break;
- case 4:
- digitalWrite(7,LOW);
- digitalWrite(6,LOW);
- digitalWrite(3,HIGH);
- digitalWrite(2,LOW);
- digitalWrite(4,HIGH);
- digitalWrite(5,HIGH);
- digitalWrite(8,LOW);
- break;
- case 5:
- digitalWrite(7,LOW);
- digitalWrite(6,LOW);
- digitalWrite(3,LOW);
- digitalWrite(2,HIGH);
- digitalWrite(4,HIGH);
- digitalWrite(5,LOW);
- digitalWrite(8,LOW);
- break;
- case 6:
- digitalWrite(7,LOW);
- digitalWrite(6,LOW);
- digitalWrite(3,LOW);
- digitalWrite(2,HIGH);
- digitalWrite(4,LOW);
- digitalWrite(5,LOW);
- digitalWrite(8,LOW);
- break;
- case 7:
- digitalWrite(7,HIGH);
- digitalWrite(6,HIGH);
- digitalWrite(3,LOW);
- digitalWrite(2,LOW);
- digitalWrite(4,HIGH);
- digitalWrite(5,HIGH);
- digitalWrite(8,LOW);
- break;
- case 8:
- digitalWrite(7,LOW);
- digitalWrite(6,LOW);
- digitalWrite(3,LOW);
- digitalWrite(2,LOW);
- digitalWrite(4,LOW);
- digitalWrite(5,LOW);
- digitalWrite(8,LOW);
- break;
- case 9:
- digitalWrite(7,LOW);
- digitalWrite(6,LOW);
- digitalWrite(3,LOW);
- digitalWrite(2,LOW);
- digitalWrite(4,HIGH);
- digitalWrite(5,HIGH);
- digitalWrite(8,LOW);
- break;
- default:
- break;
- }
- }
- // 4
- // ---
- // 3 | | 5
- // -2-
- // 6 | | 8
- // ---
- // 7
- // Orden derecha izquierda
- // Negro (9), negro (8), verde, naranja, rojo, blanco, amarillo, azul
- // Orden por resistencia (izquierda -> derecha desde arriba)
- // 5, 4, 6, 7, 3, 2, 8, 9
- // Distancia controles: 10,11,12
- // Velocidad controles: A0,A1,A2
- // Interruptor: A5
- // 2, 3, 4, 5, 6, 7, 8, 9
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement