Hallo
Ich baue momentan einen Roboter und habe folgendes Problem:
Anfangs hatte ich alles über den arduino uno gesteuert und habe den scetch auch so konzepiert
dass er mit dem arduino uno funktioniert. ich steuer die servos mit dem PCA9685 servotreiber. Da ich dann aber mehr anschlüsse benötigte bin ich zu dem arduino mega gewechselt. Mittlerweile funktioniert jetzt auch das display und alles andere außer der servotreiber. ich bin mir sehr sicher das ich alles richtig angeschlossen habe.
weiß vielleicht jemand was dann wahrscheinlich an dem scetch falsch ist?
Vielleicht ist ja irgendeine library oder so nicht mit dem arduino mega kompatibel.
Ich habe schon eine woche versucht das problem zu fixen aber ich habe es nicht geschafft.
schonmal danke
hier der scetch:
#include <Adafruit_NeoPixel.h>
#include <HCPCA9685.h>
#include <Wire.h>
#include <VarSpeedServo.h>
#include <Adafruit_PWMServoDriver.h>
#include <LiquidCrystal.h>
#define LED_PIN 6
#define I2CAdd 0x40
#define NUM_LEDS 1
HCPCA9685 HCPCA9685(I2CAdd);
int zeitsens = 0;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
const int rs = 11, en = 12, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup() {
strip.begin();
strip.show();
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(13, OUTPUT);
HCPCA9685.Init(SERVO_MODE);
HCPCA9685.Sleep(false);
pinMode(10,INPUT);
Serial.begin(9600);
lcd.begin(0x27, 16, 2);
delay(10);
lcd.setCursor(0, 1);
lcd.print("Hi Master ");
delay(1000);
}
void loop() {
const int rs = 11, en = 12, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
int servo6;
int servoDU;
int servoL;
int servoR;
int servoF;
Serial.print("poti "); //serieller monitor
Serial.print(analogRead(A3) );
Serial.println();
Serial.print("taster ");
Serial.print(digitalRead(7) );
Serial.println();
Serial.print("zeitsens ");
Serial.print(zeitsens );
Serial.println();
Serial.print("bewegungssensor ");
Serial.print(digitalRead(10) );
Serial.println();
Serial.print("servo6 ");
Serial.print(servo6 );
Serial.println();
Serial.print("servoDU ");
Serial.print(servoDU );
Serial.println();
if (digitalRead(7) == LOW){
lcd.setCursor(0, 1);
lcd.print(" ");
}
//if (digitalRead(10) == HIGH){ // bewegungssensor
//zeitsens = 0;
//}
//else{
//}
//if (digitalRead(10) == LOW){
// zeitsens++;
//}
//else{
//}
//if (zeitsens == 0){
// strip.setPixelColor(0, strip.Color(0, 255, 0));
// strip.show();
//}
//else{
//}
//if (zeitsens > 100){
// strip.setPixelColor(0, strip.Color(0, 0, 255));
// strip.show();
//}
//else{
//}
if (( ( analogRead(A3) < 80 ) && ( analogRead(A3) > 0 ) && (digitalRead(10) == HIGH) ))
{
lcd.setCursor(0, 1);
lcd.print("started ");
lcd.setCursor(0, 0);
lcd.print("test ");
strip.setPixelColor(0, strip.Color(0, 255, 0));
strip.show();
HCPCA9685.Servo(0, 200);
HCPCA9685.Servo(1, 100);
HCPCA9685.Servo(2, 300);
HCPCA9685.Servo(3, 100);
delay(500);
HCPCA9685.Servo(2, 230);
HCPCA9685.Servo(3, 160);
delay(500);
HCPCA9685.Servo(4, 160);
HCPCA9685.Servo(5, 290);
delay(500);
HCPCA9685.Servo(4, 210);
HCPCA9685.Servo(5, 335);
servoDU = 90;
for (int i = 0; i < 18; i++) {
servoDU ++;servoDU ++;servoDU ++;servoDU ++;servoDU ++;
HCPCA9685.Servo(6, servoDU);
delay(50);
}
for (int i = 0; i < 36; i++) {
servoDU --;servoDU --;servoDU --;servoDU --;servoDU --;
HCPCA9685.Servo(6, servoDU);
delay(50);
}
for (int i = 0; i < 18; i++) {
servoDU ++;servoDU ++;servoDU ++;servoDU ++;servoDU ++;
HCPCA9685.Servo(6, servoDU);
delay(50);
}
delay(500);
HCPCA9685.Servo(7, 200);
delay(500);
HCPCA9685.Servo(7, -25);
delay(500);
servoR = 60;
servoL = 0;
for (int i = 0; i < 6; i++) {
servoL ++;servoL ++;servoL ++;servoL ++;servoL ++;servoL ++;servoL ++;servoL ++;servoL ++;servoL ++;
servoR --;servoR --;servoR --;servoR --;servoR --;servoR --;servoR --;servoR --;servoR --;servoR --;
HCPCA9685.Servo(10, servoL);
HCPCA9685.Servo(9, servoR);
delay(80);
}
delay(500);
for (int i = 0; i < 12; i++) {
servoR ++;servoR ++;servoR ++;servoR ++;servoR ++;servoR ++;servoR ++;servoR ++;servoR ++;servoR ++;
servoL --;servoL --;servoL --;servoL --;servoL --;servoL --;servoL --;servoL --;servoL --;servoL --;
HCPCA9685.Servo(10, servoL);
HCPCA9685.Servo(9, servoR);
delay(80);
}
delay(500);
for (int i = 0; i < 6; i++) {
servoL ++;servoL ++;servoL ++;servoL ++;servoL ++;servoL ++;servoL ++;servoL ++;servoL ++;servoL ++;
servoR --;servoR --;servoR --;servoR --;servoR --;servoR --;servoR --;servoR --;servoR --;servoR --;
HCPCA9685.Servo(10, servoL);
HCPCA9685.Servo(9, servoR);
delay(80);
}
delay(500);
servoF = 90;
for (int i = 0; i < 18; i++) {
servoF ++;servoF ++;servoF ++;servoF ++;servoF ++;
HCPCA9685.Servo(8, servoF);
delay(20);
}
delay(500);
for (int i = 0; i < 36; i++) {
servoF --;servoF --;servoF --;servoF --;servoF --;
HCPCA9685.Servo(8, servoF);
delay(20);
}
delay(500);
for (int i = 0; i < 18; i++) {
servoF ++;servoF ++;servoF ++;servoF ++;servoF ++;
HCPCA9685.Servo(8, servoF);
delay(20);
}
strip.setPixelColor(0, strip.Color(0, 0, 0));
strip.show();
}
if (( ( analogRead(A3) < 80 ) && ( analogRead(A3) > 0 ) )) //falls 0 -50
{
lcd.setCursor(0, 0);
lcd.print("test ");
}
if (( ( analogRead(A3) < 170 ) && ( analogRead(A3) >80 ) && (digitalRead(10) == HIGH) )) // UMGEBUNGSSCAN
{
HCPCA9685.Servo(0, 200);
HCPCA9685.Servo(1, 100);
HCPCA9685.Servo(6, servo6);
int servo6 = 0; // Deklariere Variable servo6 und setze sie auf 0
for (int i = 0; i <62 ; i++) { // Inkrementiere 180 Mal
servo6++;
servo6++;
servo6++;
delay(1);
if (zeitsens == 0){
strip.setPixelColor(0, strip.Color(0, 255, 0));
strip.show();
delay(100);
strip.setPixelColor(0, strip.Color(0, 0, 0));
strip.show();
delay(50);
strip.setPixelColor(0, strip.Color(0, 255, 0));
strip.show();
delay(500);
strip.setPixelColor(0, strip.Color(0, 0, 0));
strip.show();
delay(50);
strip.setPixelColor(0, strip.Color(0, 255, 0));
strip.show();
delay(1000);
}
else{
strip.setPixelColor(0, strip.Color(0, 0, 255));
strip.show();
}
if (digitalRead(10) == HIGH){ // bewegungssensor
zeitsens = 0;
}
else{
}
if (digitalRead(10) == LOW){
zeitsens++;
}
else{
}
HCPCA9685.Servo(6, servo6);
Serial.print("servo6 ");
Serial.print(servo6 );
Serial.println();
Serial.print("zeitsens ");
Serial.print(zeitsens );
Serial.println();
Serial.print("bewegungssensor ");
Serial.print(digitalRead(10) );
Serial.println();
}
for (int i = 0; i < 62; i++) { // Dekrementiere 180 Mal
servo6--;
servo6--;
servo6--;
delay(1);
if (zeitsens == 0){
strip.setPixelColor(0, strip.Color(0, 255, 0));
strip.show();
delay(2000);
}
else{
strip.setPixelColor(0, strip.Color(0, 0, 255));
strip.show();
}
if (digitalRead(10) == HIGH){ // bewegungssensor
zeitsens = 0;
}
else{
}
if (digitalRead(10) == LOW){
zeitsens++;
}
else{
}
HCPCA9685.Servo(6, servo6);
Serial.print(servo6 );
Serial.println();
Serial.print("zeitsens ");
Serial.print(zeitsens );
Serial.println();
Serial.print("bewegungssensor ");
Serial.print(digitalRead(10) );
Serial.println();
}
}
else{
HCPCA9685.Servo(0, 80);
HCPCA9685.Servo(1, 205);
strip.setPixelColor(0, strip.Color(0, 0, 0));
strip.show();
}
if (( ( analogRead(A3) < 270 ) && ( analogRead(A3) > 170 ) ))
//falls 250 -350
{
noTone(8);
lcd.setCursor(0, 0);
lcd.print("??? "); //???
}
if (( ( analogRead(A3) < 370 ) && ( analogRead(A3) > 270 ) ))
//falls 350 -450
{
noTone(8);
lcd.setCursor(0, 0);
lcd.print("??? "); //???
}
if (( ( analogRead(A3) < 470 ) && ( analogRead(A3) > 370 ) )) //falls 450 -550
{
noTone(8);
lcd.setCursor(0, 0);
lcd.print("??? "); //???
}
if (( ( analogRead(A3) < 570 ) && ( analogRead(A3) > 470 ) )) //falls 550 -650
{
noTone(8);
lcd.setCursor(0, 0);
lcd.print("??? "); //???
}
if (( ( analogRead(A3) < 670 ) && ( analogRead(A3) > 570 ) )) //falls 650 -750
{
noTone(8);
lcd.setCursor(0, 0);
lcd.print("??? "); //???
}
if (( ( analogRead(A3) < 770 ) && ( analogRead(A3) > 670 ) )) //falls 750 -850
{
noTone(8);
lcd.setCursor(0, 0);
lcd.print("??? "); //???
}
if (( ( analogRead(A3) < 870 ) && ( analogRead(A3) > 770 ) )) //falls 850 -950
{
noTone(8);
lcd.setCursor(0, 0);
lcd.print("??? "); //???
}
if (( ( analogRead(A3) < 970 ) && ( analogRead(A3) > 870 ) )) //falls 950 -1023
{
noTone(8);
lcd.setCursor(0, 0);
lcd.print("hallohallohallo "); //???
}
if (( ( analogRead(A3) < 1024 ) && ( analogRead(A3) > 970 ) ))//falls 850 -950
{
noTone(8);
lcd.setCursor(0, 0);
lcd.print("??? "); //???
}
digitalWrite(13, HIGH);
delay(100);
digitalWrite(13, LOW);
}