Paso 9: cerebros
No he escrito un programa desde el GWbasic. Sé que la vieja escuela. Me doy cuenta que este programa se parece mucho un flashback básico. Sin embargo funciona justo como quería.
/*
COCHE ROBOT
Stephen J. Gardiner, CPS
2012 creado
Stephen J. Gardiner, CPS
*/
incluir el código de biblioteca:
#include < LiquidCrystal.h >
inicializar la biblioteca LCD
LiquidCrystal lcd (12, 11, 5, 4, 3, 2);
const int ledPin = 16; el pin de alimentación del sistema de impulsión
const int lCdPin = 13; lCdPin
const int redPin = 8; PASEO DEMASIADO DEDICADAS
const int FASTPin = 14; Speed-Up
const int SLOWPin = 15; Velocidad-abajo
const int pwm1Pin = 9; PWM Pin 1
const int pwm2Pin = 10; Pin2 PWM
int incomingByte; variable para leer los datos entrantes en serie en
int OVERRIDEOFF;
void setup() {}
Serial.Begin(9600); inicializar la comunicación serial:
Inicializa los pines de control como una salidas:
pinMode (ledPin, salida);
pinMode (lCdPin, salida);
pinMode (redPin, salida);
pinMode (FASTPin, salida);
pinMode (SLOWPin, salida);
pinMode (pwm1Pin, salida);
pinMode (pwm2Pin, salida);
LCD.Begin(16,4); fijar número la pantalla del LCD de filas y columnas:
lcd.setCursor (0, 0); Imprimir un mensaje en la pantalla LCD.
digitalWrite (lCdPin, HIGH);
LCD.Print ("en línea");
Serial.Print ("Control de robots v6.1");
Serial.Print("\r");
Serial.Print("on-line");
Serial.Print("\r");
Delay(1000);
digitalWrite (lCdPin, LOW);
}
void loop() {}
establecer el cursor a la columna 0, línea 1
(Nota: la línea 1 es la segunda fila, ya que cuenta comienza con 0):
lcd.setCursor(0,0);
lcd.setCursor(0,3);
int val1 = 100; variable para almacenar deber ciclo F + B
int val2 = 100; variable para almacenar deber ciclo L + R
analogWrite(pwm1Pin,val1); CONJUNTO UNIDAD-TENSIÓN A 2.5 (+)
analogWrite(pwm2Pin,val2); CONJUNTO UNIDAD-TENSIÓN A 2.5 (+)
ver si hay entrada serial de los datos:
Si (Serial.available() > 0) {}
leer el byte más antigua en el buffer serial:
Sí conozco los comandos Goto, a hatem' me funciona
incomingByte = Serial.read();
Si (incomingByte == ' o ') {goto DRIVEPOWER;}
Si (incomingByte == ' t ') {goto OVERRIDEON;}
Si (incomingByte == 'C') {goto OVERRIDEOFF;}
Si (incomingByte == 'I') {goto FASTER;}
Si (incomingByte == había ') {goto SLOWER;}
Si (incomingByte == 'F') {goto;}
Si (incomingByte == 'B') {goto atrás;}
Si (incomingByte == 'L') {goto izquierda;}
Si (incomingByte == 'R') {goto derecha;}
Serial.Print ("Control de robots v6.1");
LCD.Print ("listo");
Serial.Print("\r");
retorno;
Si se trata de un capital O encender la unidad:
{DRIVEPOWER:
digitalWrite (ledPin, HIGH);
digitalWrite (lCdPin, HIGH);
LCD.Print ("unidad de alimentación del sistema");
Serial.Print ("unidad de alimentación del sistema");
Delay(500);
lcd.setCursor(0,0);
digitalWrite (ledPin, LOW);
Delay(500);
digitalWrite (lCdPin, LOW);
int val = 169;
LCD.Clear();
Serial.Print("\r");
Serial.Flush();
retorno;
}
{OVERRIDEON:
Si es una anulación de la T:
digitalWrite (redPin, HIGH);
digitalWrite (lCdPin, HIGH);
LCD.Print ("OVER-RIDE ENGAGED");
Serial.Print ("exceso de viaje dedicada");
Delay(500);
lcd.setCursor(0,0);
LCD.Clear();
Serial.Flush();
Serial.Print("\r");
retorno;
}
Si es una anulación de C:
{OVERRIDEOFF:
digitalWrite (redPin, LOW);
digitalWrite (lCdPin, HIGH);
LCD.Print ("sobre paseo de dis-a");
Serial.Print ("exceso de viaje dis-a");
Delay(1000);
lcd.setCursor(0,0);
digitalWrite (lCdPin, LOW);
LCD.Clear();
Serial.Print("\r");
Serial.Flush();
retorno;
}
Si se trata de una F para aumentar la velocidad
{MÁS RÁPIDO:
digitalWrite (FASTPin, alto);
digitalWrite (lCdPin, HIGH);
LCD.Print ("más rápido");
Serial.Print ("más rápido");
Delay(500);
lcd.setCursor(0,0);
digitalWrite (FASTPin, bajo);
Delay(500);
digitalWrite (lCdPin, LOW);
LCD.Clear();
Serial.Flush();
Serial.Print("\r");
retorno;
}
Si es un capital S a una velocidad más baja
{MÁS LENTO:
digitalWrite (SLOWPin, alto);
digitalWrite (lCdPin, HIGH);
LCD.Print ("más lenta");
Serial.Print ("más lento");
Delay(500);
lcd.setCursor(0,0);
digitalWrite (SLOWPin, bajo);
Delay(500);
digitalWrite (lCdPin, LOW);
LCD.Clear();
Serial.Flush();
Serial.Print("\r");
retorno;
}
{HACIA ADELANTE:
digitalWrite (lCdPin, HIGH);
LCD.Print ("hacia delante");
Serial.Print ("hacia delante");
int val2 = 200; variable @ ciclo de trabajo de 200 = adelante
analogWrite(pwm2Pin,val2); AJUSTAR LA TENSIÓN DE LA UNIDAD PARA AVANZAR
Delay(1000);
lcd.setCursor(0,0);
digitalWrite (lCdPin, LOW);
LCD.Clear();
Serial.Flush();
Serial.Print("\r");
retorno;
}
{AL REVÉS:
digitalWrite (lCdPin, HIGH);
LCD.Print ("hacia atrás");
Serial.Print ("hacia atrás");
int val2 = 50; variable @ ciclo de trabajo de 75 = hacia atrás
analogWrite(pwm2Pin,val2); CONJUNTO UNIDAD-TENSIÓN HACIA ATRÁS
Delay(1000);
lcd.setCursor(0,0);
digitalWrite (lCdPin, LOW);
LCD.Clear();
Serial.Flush();
Serial.Print("\r");
retorno;
}
{IZQUIERDA:
digitalWrite (lCdPin, HIGH);
LCD.Print ("izquierda");
Serial.Print ("izquierda");
int val1 = 50; variable @ 100 ciclo de trabajo = izquierda
analogWrite(pwm1Pin,val1); CONJUNTO UNIDAD-VOLTAJE A IZQUIERDA
Delay(1000);
lcd.setCursor(0,0);
digitalWrite (lCdPin, LOW);
LCD.Clear();
Serial.Flush();
Serial.Print("\r");
retorno;
}
{DERECHO:
digitalWrite (lCdPin, HIGH);
LCD.Print ("derecha");
Serial.Print ("derecha");
int val1 = 220; variable @ ciclo de trabajo de 200 = derecha
analogWrite(pwm1Pin,val1); CONJUNTO UNIDAD-TENSIÓN A DERECHA
Delay(1000);
lcd.setCursor(0,0);
digitalWrite (lCdPin, LOW);
LCD.Clear();
Serial.Flush();
Serial.Print("\r");
retorno;
}
}
}